SPI接收中断设置的抢占优先级是0,通道优先级也是0比如接收1000个数据,有时可以完全接收,有时会产生接收溢出导致几十个数据发生了溢出丢失
经过测试:当SPI接收到一个数据后,产生接收标志,但是CPU没有立即去响应接收,而是进过一段时间后才读取SPI数据寄存器,但是此时已经丢失了几十个数据。(即偶然性的不能及时响应SPI中断)
个人猜测:查看资料显示GD32有一个内核BUG(Interrupted loads to SP can cause erroneous behavior):
当加载SP寄存器时,如果此时产生中断,则返回中断时会消耗CPU额外的时间去执行指令,解决的方案是使用通用寄存器间接加载SP寄存器
不知道大家有没有遇到这种问题,解决的方案是什么?
|