一、问题
一般SPI底层写完,如果能运行起来代码是不会出错的。但当出现多中断嵌套时,就有可能会出现SPI操作错误的地址造成出错。
二、现象
博主在用PIC开发时遇到这样的情况:
在低优先级中断里运行SPI读函数去读与单片机通信芯片的寄存器的值,恰巧地址是16位的,在SPI访问地址时得先写进高地址,然后再写进低地址访问。如果在写入高地址后,刚好其它中断优先级较高的中断切出去去执行SPI读写操作,这时候在切回来读低地址时,就相当于你操作的是低地址的内容,而不是高地址+低地址整块完整地址。就会造成前面写入的与后面读出来的不一现象。
三、结论
总结一句就是在多中断嵌套,存在中断优先级现象时,且中断里都有操作SPI时要意识到地址会出错的问题。