请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2000 主题中讨论的其他器件:MSP430FR2100
工具/软件:Code Composer Studio
您好!
我的代码在 P1.3上使 P1.6导通并由低边沿到高边沿关闭、并打开 RTC 1秒、然后切换回 P1.6、等待 P1.3上的中断。 这就重复了。
#include /*全局变量*/ #if defined (__IAR_systems_icc__) __persistent volatile unsigned char timeIncrement = 0;//软件计数变量 #Elif defined (__TI_Compiler_version__) #endif #define MODCOUNT (32-1) int main (void) { WDTCTL = WDTPW | WDTHOLD; P1OUT = 0x00; P1DIR =~BIT3; P2OUT = 0x00; P2DIR = 0xFF; P2SEL1 = BIT6 | BIT7; // P2.6~P2.7:晶振引脚 SYSCFG0 = FRWPPW; //启用 FRAM 写入访问 P1OUT ^= BIT6; PM5CTL0 &=~LOCKLPM5; //初始化晶振 操作 { CSCTL7 = 0; //清除 XT1故障标志 SFRIFG1 = 0; //清除故障标志 } while (SFRIFG1和 OFIFG);//测试振荡器故障标志 P1REN = BIT3; P1IES = 0x00; P1IE = BIT3; CSCTL4 = SELA_XT1CLK; _bis_SR_register (LPM3_bits | GIE); //输入 LPM3、启用中断 } #pragma vector=RTC_vector __interrupt void RTC_ISR (void) { 开关(__evo_in_range (RTCIV、RTCIV__RTCIFG)) { 案例 RTCIV_none:中断; //无中断 案例 RTCIV_RTCIFG: // RTC 溢出 P1OUT ^= BIT6; RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024;//停止 RTC P1REN = BIT3; // P1.3下拉寄存器使能 P1IES = 0x00; // P1.3低边沿/高边沿 P1IE = BIT3; // P1.3中断被启用 _bis_SR_register_ON_EXIT (LPM3_BITS | GIE); 中断; 默认值:break; } } #pragma vector=Port1_vector __interrupt void Port_1 (void) { P1OUT ^= BIT6; P1IE = 0x00; P1IFG = 0x00; //清除 P1.3 IFG RTCMOD = MODCOUNT; RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024 | RTCIE; _bis_SR_register_ON_EXIT (LPM3_BITS | GIE); }
如果我反转 P1.3和 P1.6的工作方式、即等待 P1.6中的中断、ISR 将不会用于 P1.6。 为什么会发生这种情况、因为它应该对两者都起相同的作用。 我是否遗漏了什么
#include /*全局变量*/ #if defined (__IAR_systems_icc__) __persistent volatile unsigned char timeIncrement = 0;//软件计数变量 #Elif defined (__TI_Compiler_version__) #endif #define MODCOUNT (32-1) int main (void) { WDTCTL = WDTPW | WDTHOLD; P1OUT = 0x00; P1DIR =~BIT6; P2OUT = 0x00; P2DIR = 0xFF; P2SEL1 = BIT6 | BIT7; // P2.6~P2.7:晶振引脚 SYSCFG0 = FRWPPW; //启用 FRAM 写入访问 P1OUT ^= BIT3; PM5CTL0 &=~LOCKLPM5; //初始化晶振 操作 { CSCTL7 = 0; //清除 XT1故障标志 SFRIFG1 = 0; //清除故障标志 } while (SFRIFG1和 OFIFG);//测试振荡器故障标志 P1REN = BIT6; P1IES = 0x00; P1IE = BIT6; CSCTL4 = SELA_XT1CLK; _bis_SR_register (LPM3_bits | GIE); //输入 LPM3、启用中断 } #pragma vector=RTC_vector __interrupt void RTC_ISR (void) { 开关(__evo_in_range (RTCIV、RTCIV__RTCIFG)) { 案例 RTCIV_none:中断; //无中断 案例 RTCIV_RTCIFG: // RTC 溢出 P1OUT ^= BIT3; RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024;//停止 RTC P1REN = BIT6; // P1.3下拉寄存器使能 P1IES = 0x00; // P1.3低边沿/高边沿 P1IE = BIT6; // P1.3中断被启用 _bis_SR_register_ON_EXIT (LPM3_BITS | GIE); 中断; 默认值:break; } } #pragma vector=Port1_vector __interrupt void Port_1 (void) { P1OUT ^= BIT3; P1IE = 0x00; P1IFG = 0x00; //清除 P1.3 IFG RTCMOD = MODCOUNT; RTCCTL = RTCSS_XT1CLK | RTCSR | RTCPS__1024 | RTCIE; _bis_SR_register_ON_EXIT (LPM3_BITS | GIE); }