场景:单片机需要处理SPI,UART,CAN、定时器周期中断、外部中断等多个中断任务。
问题:SPI通讯有大概千分之一的错帧。
分析原因:原因不确定,猜猜可能是从机SPI中断被其他高优先级的中断抢占导致通讯异常,因为屏蔽掉其他中断,通讯就正常了。
求助:中断优先级设计原则
如果抢占优先级相同 中断同时来了 先处理响应优先级大的 在这里需要注意一点就是 如果抢占优先级相同 低的优先级发生了 虽然另一个中断比他的响应要大 但是不能使它挂起 所以响应优先级只是处理中断同时发生时先处理哪个中断的问题 如果抢占优先级大的 抢占优先级小的无论现在在执不执行 大的都可以让小的挂起而使 自己先执行 .(摘自百度)
把抢占优先级和响应优先级设置为最高试试.
优先级的高低需要根据该中断的重要程度,如果一直在执行,就可以用低优先级;
在要别的程序执行时,需要打断其他的中断,则用高优先级;优先级的高低需要根据实际情况而定。
如上你遇到的这种情况,则可以把SPI的优先级设置成你用到的优先级中最高的一个。