3079|2

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助;SPI不能完整正确接收数据包,请求高手们帮忙分析。小弟不胜感激!! [复制链接]

如题:这个问题愁死我了,一个星期都没有解决。
问题描述:我用的单片机是AVR的ATMEGA88,ICCAVR编译器。单片机和ARM通过SPI接口通信。单片机作为主机。单片机通过定时器启动时钟,接收ARM发送过来的数据包。数据包的第一个字节表示数据包的长度。
现在的问题是:我只能确定正确接收第一个字节,其他字节不能正确接收。
我把SPI中断程序贴出来,轻各位高手看看我的思路是不是有问题?
#pragma interrupt_handler spi_int:18
void spi_int()//在SPI主模式下的
{
    unsigned char temp;
     CLI();             //关中断,防止接收时间过长,造成定时器中断。  
     receive_data1=SPDR;  //接收数据
     spi_ok=0;            //SPI口空闲
     temp = SPSR;   
     temp = SPDR;    //清空SPI,和中断标志,使SPI空闲   
         if((receive_data1!=0)&&(spi_buffer==0)&&(receive_data1!=0xFF)&&(receive_data1!=127))
           //如果接收缓冲区空,且接收到的数据合法,则认为是数据包的第一个字节
          {
              spi_rx_buffer[0]=receive_data1;    //存储数据包的长度
                  spi_buffer=1;                 //置接收缓冲区非空
                  first_data=1;
                  SPDR=0xFF;                   //启动时钟,进行下一次数据传输
                  spi_ok=1;                    //置SPI忙
                  ++count;
          }   
        else  
          if((spi_buffer==1)&&(rx_index             {
                 spi_rx_buffer[++rx_index]=receive_data1;   
                        // receive_data++;
                         if(rx_index                          {
                             SPDR=0xFF;
                             spi_ok=1;
                         }
                         ++count;
                 }   
                     SEI();
        // delay_us(16);
}  

最新回复

个人觉得做主机的话SPI用IO口仿下还更方便,想发8位就8位,想16位就16位  详情 回复 发表于 2008-7-27 17:20
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
发送一个8位,才能启动时钟接受一个8位,要等到SPSR寄存器的SPIF置位后才可以读接受到的数据,楼主接受数据的时序不对。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
个人觉得做主机的话SPI用IO口仿下还更方便,想发8位就8位,想16位就16位
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表