This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2512:确保 CPUOFF 位被清零

Guru**** 657500 points
Other Parts Discussed in Thread: CC2640R2F, MSP-TS430RHL20, MSP430FR2512
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/967504/msp430fr2512-ensuring-the-cpuoff-bit-is-cleared

器件型号:MSP430FR2512
主题中讨论的其他器件:CC2640R2FMSP-TS430RHL20MSP430WARE

大家好、

 与 CC2640R2F Launchpad 通信时、在 MSP-TS430RHL20上使用 MSP430FR2512的 I2C 总线时遇到不一致的错误。 我们使用示波器探测、可以确认 I2C 事务的所有部分都正确进行。

我们在 I2C 停止 ISR "__BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);"内添加了一条用于退出 LPM (0或4)的线路。

我们观察到、处理器将返回到主应用程序、其中主程序在等待 I2C 事务"_bis_SR_register (LPM0 + GIE)"时停止、并且 SR 寄存器中的 CPUOFF 位将保持置位。 只清除其他所有 I2C 停止事件。

此外、当 CPU 确实在主循环内恢复运行时、UCG0IFG 寄存器的 I2C UCSTPIFG 位会自动清零。

I2C 过程根据 MSP430WARE 驱动程序库中的多个 Rx 和 Tx 示例进行配置和执行。

是否有更合适的方法来确保在 I2C 停止事件中清除 CPUOFF 位?


此致、

车架

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题必须在 ISR 代码中的其他位置、而不是那一行。 如果它执行、则当 ISR 退出时、CPUOFF 位将被清除。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果 ISR 发出唤醒命令,但 main()不在 LPM 中,则会忽略唤醒。 在这种情况下(如果没有其他唤醒),当 main()随后进入 LPM 时,它不会唤醒。

    因此、如果(a) main 在 I2C 事务运行时执行其他操作或(b)事务发生得非常快、则会有一个显而易见的竞争(始终存在)。

    避免这种情况的一种方法是定义一个标志、例如"volatile unsigned char done;"。 在开始传输之前将其设置为0、在 ISR 中将其设置为1。 那么 main()看起来类似于:

    while (1){
    _BIC_SR_register (GIE); //通过禁用关闭窗口
    如果(完成)中断; //事务已完成
    _bis_SR_register (LPM0_bits|GIE);//打开窗口并等待
    }
    __bis_SR_register (GIE); //重新启用 

    它看起来有点笨拙、但速度很快。