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.

[参考译文] MSP430F5329:IAR 编译器、写入 UCB1IE 寄存器有没有我必须做的特别的事情?

Guru**** 2501855 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/611596/msp430f5329-iar-compiler-is-there-something-i-have-to-do-special-to-write-to-ucb1ie-register

器件型号:MSP430F5329

我在使 UCB1中断触发时遇到问题。 我通常从未遇到过中断问题、因为我从事嵌入式代码已有大约40年。  

我想我已经把它缩小到当我向 UCB1IE 寄存器写入一个3时、它不会写入。 它保持为0。  

在执行行 UCB1IE = 0x03后、当我单步执行代码时、我有一个 IAR 调试器的屏幕截图。  

如果仔细观察、您可以在主窗口的 USI_i2c.c 选项卡中看到、当前指令是 UCB1IFG = 0;(尚未执行)
刚刚执行的指令是 UCB1IE = 0x03;

当我查看观察1窗口时、我会期望 UCB1IE 为3、但它显示'\0'(0x00) Memory 0x63c

查看反汇编窗口、可以看到汇编命令是40F2 0003 063C、我认为这是将3移动到内存063C (UCB1IE)。

我再次跳了一步、只是为了确保观察窗口不在后面、但它保持为0。  

我出了什么问题?

UCB1CTL1.UCSWRST = 1、这意味着当我更改这些值时它被保持在复位状态。 中断关闭、正如您在左侧的 CPU 寄存器窗口中看到的那样。 GIE = 0、如果中断打开、并且一个中断被触发、调试器本会将我带到中断服务例程。  

基普
 

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

    请注意、软件复位(UCSWRST)不是一个事件、而是一个状态。 用户指南的第38.3.1节指出:

    在 μ I²C 模式下设置 UCSWRST 具有以下效果:

    • […]
    • 寄存器 UCBxIE 和 UCBxIFG 被清零。

    […]
    建议的 USCI 初始化/重新配置过程为:
    […]
    4.通过软件清除 UCSWRST。
    5.启用中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    来解决它。 我想使能中断意味着 GIE 位、而不是 UCB1IE。

    谢谢你。