在stm32的contiki系统下,cc1120和cc1200收包中断响应处理不及时

Other Parts Discussed in Thread: CC1200, CC1120

hi,all:

        我用stm32芯片下运行contiki系统,修改并添加cc1120和cc1200的程序,硬件是仿照参考设计自己开发。已经实现单包127字节的收发正常处理,但是现在发现了一个问题,当超过127字节以后,有时中断处理不及时,有时则是在rx_rx中fifo状态错误,有时读取cc1200的读fifo中判断认为fifo是空的。

        我基本没有修改contiki对cc1200的程序结构,主要是添加程序支持。我使用了gpio2对于收包的处理设置GPIO2_IOCFG其值是0,CC1200_FIFO_CFG其值是32,用于cc1200的fifo阈值的中断触发,stm32对应gpio设置成上升沿中断触发。使用gpio0对于收包结束设置GPIO0_IOOFG其值是6,用于cc1200收包结束的中断触发,stm32对应gpio设置成下降沿触发。 

       

        具体现象是我需要发送比127字节大一点的数据包的时候,接收端对第一个发送的127字节处理是正确的。

        当发送端发送127字节数据时,接收端的gpio0在前导码和匹配字都匹配正确的情况下拉高电平,gpio2是fifo每续满32字节被拉高一次,stm32触发gpio2的对应io上升沿中断并处理数据包,在执行rx_rx时gpio0拉低。当gpio2大约到来3各种断后(大约处理了90—110字节数据),发送127字节完成,gpio0拉低,触发stm32对应io的下降沿中断,处理剩余数据。

        当发送端发送比127字节大些的数据时,第一个数据包如上述描述处理正常,而第二个数据包却没有正常的进入中断并处理,导致第二个数据包丢失。示波器量gpio,如图所示:

        

        其中绿色线(第一条)是收端gpio0的电平,紫色线(第三条)是收端gpio2的电平,黄色线(第二条)是发送端的配置为发现tx状态的gpio0的电平。

       根据示波器显示波形分析,认为是stm32中断没有响应。但是为什么没有响应呢?我设置的是没有问题的。在把发送端延长到每个包间隔300ms就不会出现任何问题。

       出现这个状况,为了排除可能的影响,我检查了中断处理函数,并没有发现可以浪费时间的处理,并且打印信息也没有看到有任何异常。打印信息我用的是ttl,端口用的是uart2速率115200,并且一次中断打印只有不到50字节。

        麻烦大家帮忙想想这是什么问题?或者说帮我想想对于cc1200或者cc1120芯片,有没有其他解决的方法~

        非常感谢~