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.

[参考译文] 编译器/MSP430FR5969:按下开关、isn#39;t 调用 ISR

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/588729/compiler-msp430fr5969-switch-press-isn-t-calling-the-isr

器件型号:MSP430FR5969

工具/软件:TI C/C++编译器

/*这是代码:*/ 

#include #pragma vector=Port1_vector __interrupt void Port_1 (void) { P1OUT ^= 0x01;//切换 LED P1IFG &&~0x02;//PxIFG 清除 } void main (void){ WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式 /*******配置 CS 寄存器******** / CSCTL0_H = 0xA5;//解锁 CS 寄存 器 CSCTL1_H = 0x00;//将 DCO 设置为8MHz CSCTL1_L = 0x0c; CSCTL2 = 0x0003 | 0x0100 | 0x0030;//设置 DCO = SMCLK CSCTL3 = 0x0000 | 0x0000 | 0x0000 |设置为 CSCTL1 ;//立即设置为0x0000_0;设置 DCO = 0x0000_0;设置为 CSCTLH//锁定 CS 寄存器 /******** / P1DIR |= 0x01;//将 P1.0设置为输出引脚 P1OUT &=~0x01;//将 LED 设置为初始低电平 P1REN |= 0x02;//针对开关的上拉寄存器 P1IE |= 0x02;//PxIE -中断使能 P1IES |= 0x02;//PxIES -下降沿为高电平 P1IFG &=~0x02;//初始清除 PxIFG 标志 //中断 v/s 轮询方法示例 如需了解更多信息,请访问: processors.wiki.ti.com/.../MSP430_LaunchPad_Interrupt_vs_Polling */ _bis_SR_register (LPM4_bits + GIE); //进入具有中断 的低功耗模式4 }

我面临的问题是代码似乎卡在进入 LPM4的行上。 开关按压不会生成中断。 请指出我的错误吗?

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

    您好、Priyank、

    您似乎正在为中断设置 P1.1、并且希望使用下降沿作为触发器、对吧? 您的代码非常接近、但我看到缺少1件事:

    您可以设置 P1REN 位1以启用内部上拉/下拉电阻器。 但是、您需要设置 P1OUT |= BIT1; 如果您希望电阻器为上拉电阻器(如果 P1OUT 中的位 为0、则设置 P1REN 会启用下拉电阻器)。 因此、您可能永远不会因此而获得边沿。 我想、如果你加上这个1、那么你应该能够获得一个中断。

    我想对您的代码添加另一条注释、以便于读取和调试-我看到您使用十六进制值设置所有内容。 器件头文件已包含寄存器中不同位字段的定义、因此读取和调试比读取十六进制值和不断参考用户指南寄存器说明要容易得多。 下面是一个简短的示例、因此您可以看到它会产生什么影响(您还会看到这也是我们的代码示例的外观):

    您的版本:

    /********配置 CS 寄存器******** /
    CSCTL0_H = 0xA5;//解锁 CS 寄存
    器 CSCTL1_H = 0x00;//将 DCO 设置为8MHz
    CSCTL1_L = 0x0c;
    CSCTL2 = 0x0003 | 0x0100 | 0x0030;//设置 DCO = SMCLK
    CSCTL3 = 0x0000 | 0x0000 | 0x0000 |设置为 CSCTL1
    ;//立即设置为0x0000_0;设置 DCO = 0x0000_0;设置为 CSCTLH//锁定 CS 寄存器
    /******** / 

    而是使用头文件中的定义:

    /******** 配置 CS 寄存器******** /
    CSCTL0_H = CSKKEY_H; //解锁 CS 寄存器
    CSCTL1 = DCOFSEL_6; //将 DCO 设置为8MHz
    CSCTL2 = SELM__DCOCLK | SELA_VLOCLK | SELS_DCOCLK; //设置 DCO = SMCLK = MCLK
    CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; //现在将分频器值设置为1
    CSCTL0_H = 0; //锁定 CS 寄存器
    /******** / 

    这是个人偏好、但我认为这可以让其他人更容易理解您的代码。 希望这对您有所帮助!

    此致、

    Katie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Katie。 我了解使用宏时它变得有多容易。 实际上、我确实喜欢宏。 但是、由于这是我在 MSP430上的最初几天、我尝试配置寄存器、同时尽可能提高舒适度。