我们使用一片配备了4*4规格CC1310的电路板作为TX端进行数据传输(high speed mode,包间隔10ms),外围电路均使用TI参考设计。代码逻辑为TX端发送数据后,RX端接收并回传包,TX端在接收到回包后进行下一包数据传输。
问题现象:在TX板上运行程序,三分钟左右后会卡死在StateMachine_exec中,具体停留在了IntMasterDisable
对比测试:
1.单独发射载波例程,可持续运行;
2.取消接收回包操作,仅连续发送数据,仍会卡死;
3.将包间隔增加至1s,可持续运行,不会卡死
问题分析:
当程序卡死时,通过CCSdebug分析查看寄存器发现R14值为0xfffffff9,MSP寄存器值为0x20004f78,且CFSR 寄存器中出现了 IMPRECIESERR 标志。通过观察栈区地址0x20004f78处的返回地址LR为函数IntMasterDisable,推测程序发生了不精确的数据访问冲突导致中断去使能时识别到了异常未正确处理,导致系统lockup。通过配置CPU_SCS_O_ACTLR寄存器禁止写入,卡死时R14值为0xfffffff9,MSP寄存器值为0x20004f78,观察CFSR寄存器出现PRECIESERR,此时BAFR为0x00000001,通过观察栈区此地址并未发现任何异常。
我们在传输数据状态机的开始与结束分别增加1us的延时后,程序卡死情况消失。问题原因是否为内部某些窗口时间冲突?为在后续产品中彻底根除此问题,请告诉我们该问题的具体原因。