问题如题,已知在不添加spi读写函数时,按键中断处理函数能正确执行,不会陷入死循环。 其中: spi写函数 spi读写事件的回调函数 按键中断处理函数中调用的spi读写函数 经排查在spi写函数中去除下面这行语句就不会陷入死循环,但这行语句是等待spi传输完成
问题是为什么会陷入死循环?理想情况应是进入按键中断处理函数后,调用spi写函数,在向spi写入数据后使用 while(!spi_xfer_done);语句等待spi数据传输完成。spi数据传输完成后触发spi读写事件的回调函数,spi_xfer_done 为真,此时while循环条件不再满足,结束中断,返回主函数。 请教问题出现在哪里,怎么解决这个问题。
补充,spi写函数在主函数内能正确运行。我用spi是用来驱动墨水屏的,设备本身有低功耗需求。
qiaoxingshu 在中断里设个标志位就出来吧,剩下就在主循环中处理。
Wireless-Tech 请问在主循环中处理这种方法不影响低功耗么 我的主函数如下,使用了电源管理, 改成这样的话还可以进入低功耗么,不会一直进行条件判断么
谢谢,已解决,是中断优先级的问题。gpiote和spi中断优先级都为6,其中gpiote(按键)事件先中断,spi事件后中断。此时gpiote先中断触发spi事件,循环等待spi传输完成,而打破循环的条件要等待spi中断改变相应标志位,由于中断优先级相同时遵循先来后到的原则,gpiote中断不完成则不处理spi中断,故会陷入死循环。
qiaoxingshu 不会的,因为只要CPU停了,啥事也干不了。
Wireless-Tech 懂了,谢谢