主题中讨论的其他器件:MSP430G2452
大家好、
我目前正在研究一个将计时器 A 和 SPI 与中断一起使用的应用。
计时器 A 允许定期执行任务、而 SPI 用于接收可能影响任务操作的命令。
SPI 每隔几 ms 接收一次新命令。
一切都正常、但时间(大约每30分钟一次)不会为 SPI ISR 提供服务、从而锁定更远的活动。
执行应用程序调试时、会出现以下情况:
- Timer A IF 为0
- 如果位为1、则为 SPI 计数器
- GIE 和 SPI USIIE 位都是有效的。
从这张图片中、我看不到不应提供来自 SPI 的 ISR 的任何原因。
在主循环内、有一段代码用于检查 SPI 计数器 IF。
如果它们删除了代码的这一部分、中断将始终得到处理。
在位校验期间、寄存器不被写入、只被读取、并且在调试部分中该位保持为1 (正如它应该的那样)
- 我无法解释这种奇怪的行为、也无法解释为什么不提供 ISR。
编程环境为 CCS、代码优化处于4级。
- 我想知道这种奇怪的行为是否与一些优化有关
- 我会要求将应用程序减小到最小大小以重现该行为、以便更轻松地进行调试。
- 我需要仔细检查它们是否有用于所有未使用的中断的中断陷阱。
- 是否有其他要推荐的测试?
谢谢、
日落