大家好、TI 论坛、
我正尝试通过 USCI39问题导致不可预测的代码执行、到目前为止、我一直无法执行。 这样做的动机是为了证明它会影响我们的微控制器、以便我可以证明更新看起来运行正常的现有固件是合理的。 我阅读以下论坛帖子、以更好地了解该问题:
根据勘误表、"如果以下所有事件按以下顺序发生、则会触发此勘误表:
挂起中断:在 GIE=0时、UCxIFG=1和 UCxIE=1中的一个
2. GIE 由软件(例如 EINT)
执行"EINT"指令后、挂起的中断在1个 MCLK 时钟周期的时间窗口中由硬件(外部 I2C 事件)清除。"
因此、我一直在尝试创建这些事件、从而导致不可预测的代码执行。 我有一个测试设置、其中两个微控制器通过 I2C 和几条 GPIO 线路相互通信。 MSP430F5438A-EP 配置为 I2C 目标、Tiva-TM4C 配置为 I2C 控制器。 以下是我要执行的步骤:
MSP430禁用 GIE、然后将 GPIO 线路驱动为低电平。
2. GPIO 线路变为低电平会触发 Tiva 向 MSP430发送一个 I2C 启动命令
3. MSP430将 GPIO 线路驱动为高电平、执行8个 NOP、然后启用全局中断
GPIO 线路变为高电平将触发 Tiva 发送 I2C 停止命令。
我要尝试的是在 GIE=0时在 MSP430中创建一个挂起的 UCSTTIFG、然后设置 GIE=1、在接下来的 MCLK 周期中、通过引起一个 UCSTPIFG 来清除 UCSTTIFG。
我一直在使用示波器来验证信号时序、通过使用示波器并添加精确数量的 NOP、我感觉我已经非常接近我需要的位置。 我可以足够精确地生成 I2C 停止信号、以便在一次测试中可以看到 MSP430调用 UCSTPIFG ISR;通过在 下一次测试中将 I2C 停止命令延迟24纳秒、我可以看到 MSP430调用 UCSTTIFG ISR、然后是 UCSTPIFG ISR。
因此、虽然我能够精确控制此 I2C 停止命令并使 MSP430在 执行1个 ISR 或2个 ISR 之间"振荡"、但我似乎不能导致不可预知的代码执行。 有人对我可能会做什么有任何想法吗? 或者、我的 MSP430F5438A 在某种程度上不受此问题的影响吗?