主题中讨论的其他器件:MSP-EXP430FR5994
工具/软件:Code Composer Studio
我正在尝试为 MSP-EXP430FR5994开发套件上的两个开关(S1和 S2、或 P5.6和 P5.5)使用中断。 一旦中断被启用、即使两个开关都没有被按下、ISR 也会启动。 中断标志的值在中断被启用前为零(没有中断被置位)、但是在 I RESET 标志5和6前、ISR 内的值为255 (所有中断被置位)(然后标志为159、即位5和6被关闭)。 按下开关后、似乎什么也不会发生。
为什么一旦启用中断、中断标志就等于255? 我假设这就是立即激活 ISR 而无需等待按下开关的原因。
我想解决方案比较微不足道、但我被骗了。 请提供任何帮助。
#include include "driverlib.h" #include "gpio.h" #include "stdio.h" #include "string.h" int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 //配置 LED 和开关 P1DIR |= BIT0; //将 P1.0设置为输出 P1DIR |= BIT1; //将 P1.1设置为输出 P1OUT &=~BIT0; //将 P1.0设置为关(红色 LED) P1OUT &=~BIT1; //将 P1.1设置为关(绿色 LED) P5IE |= BIT5; // P5.5中断使能(S2) P5IE |= BIT6; // P5.6中断被启用(S1) P5IFG &=~BIT4; // P5.5中断标志被清除(S2) P5IFG &=~BIT6; // P5.6中断标志被清除(S1) _bis_SR_register (GIE);//启用所有中断 //禁用 GPIO 上电默认高阻抗模式以激活先前配置的端口设置 PM5CTL0 &=~LOCKLPM5; while (1){;} #pragma vector=PORT5_vector __interrupt void Port_5 (void) {
//目前只需切换每个 LED,最终更具体地选择开关。 P1OUT ^= BIT0; //切换 P1.0 P1OUT ^= BIT1; //切换 P1.1 P5IFG &=~BIT4; // P5.5中断标志被清除 P5IFG &=~BIT6; // P5.6中断标志被清除 }