打印

使用GD32实现SPI+DMA通讯出现的偶然性SPI接收溢出

[复制链接]
552|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanct|  楼主 | 2022-5-13 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SPI接收中断设置的抢占优先级是0,通道优先级也是0比如接收1000个数据,有时可以完全接收,有时会产生接收溢出导致几十个数据发生了溢出丢失
经过测试:当SPI接收到一个数据后,产生接收标志,但是CPU没有立即去响应接收,而是进过一段时间后才读取SPI数据寄存器,但是此时已经丢失了几十个数据。(即偶然性的不能及时响应SPI中断)
个人猜测:查看资料显示GD32有一个内核BUG(Interrupted loads to SP can cause erroneous behavior):
当加载SP寄存器时,如果此时产生中断,则返回中断时会消耗CPU额外的时间去执行指令,解决的方案是使用通用寄存器间接加载SP寄存器
不知道大家有没有遇到这种问题,解决的方案是什么?

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝