问答

汇集网友智慧,解决技术难题

21ic问答首页 - 使用GD32实现SPI+DMA通讯出现的偶然性SPI接收溢出

国产芯片 MUC

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

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

回答 +关注 5
548人浏览 0人回答问题 分享 举报
0 个回答

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