你好。
我正在尝试每1/10秒捕获 P2IN 和 PI1N…TIMER2在后台运行并收集引脚历史记录。 如果按键 Port1矢量被命中、则启动2秒计时器(TIMER0 ISR)。 在2秒计时器到期后、我立即禁用 TIMER2 ISR 并查看历史记录数组。 它永远不会显示 P1IN 状态的变化...P1IN 被配置为一个带有下拉电阻器的输入。 如果我在 TIMER2 ISR 中放置了一个断点、在这里我将指向历史记录开头的指针复位以进行翻转、我可以看到历史记录中的变化、显示它已读取 P1IN....please。有人可以向我解释为什么在 TIMER0中禁用 TIMER2后中断时、历史记录是为什么的 阵列恢复为00??? 我使用的是 MSP430FR2355EVM 板。 还有一个简短的话术...如果我在2秒的时间内保持3.3V 至 P1引脚之一、所有历史记录都会显示它已捕获...但是、我想知道为什么>1/10s 和<2s、我看不到任何捕获?
#pragma vector=TIMER2_B0_vector // CCIE 每隔十分之一秒 __interrupt void m100SecondTimerB2 (void) //滚动计数器...在20次点击后或2秒复位 计时器关闭 { TB2CCR0 += TENTHSEC; *pHistory =(无符号)((P2IN << 8)|(P1IN)); *pHistory &=~(0xF701);//屏蔽未使用的引脚 pHistore++; if (pHistory > history + 19) pHistory =历史记录; } //#pragma vector=TIMER0_B0_vector // CCIE 每隔十分之一的秒 __interrupt void m100SecondTimer (void) { TB0CCR0 += TENTHSEC; *pHistory =(无符号)((P2IN << 8)|(P1IN)); *pHistory &=~(0xF701);//屏蔽未使用的引脚 pHistory++; }*/ #pragma vector=TIMER0_B1_vector // TBIE 溢出_中断 失效二级计时器(空) { switch (__evo_in_range (TB0IV、TB0IV_TBIFG)) { 案例 TB0IV_NONE:break; //无中断 案例 TB0IV_TBCCR1:break; // CCR1未使用 案例 TB0IV_TBCCR2:中断; //未使用 CCR2 案例 TB0IV_TBIFG: //溢出 远程= T; TB2CCTL0 &=~CCIE; pHistory =历史记录; _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 ISR 和唤醒、在 main 中处理 中断; 默认值:break; } } //ISR、用于开/关按钮 #pragma vector=Port1_vector __interrupt void indicatorButtons(void) { launchTimerSeq(); 开关(__evo_in_range (P1IV、16)) { 案例4://P1.1 指示器^= SW1; P1IFG &=~BIT1; 中断; 判例6://P1.2 指示器^= SW2; P1IFG &=~BIT2; 中断; 判例8://P1.3 指示器^= SW3; P1IFG &=~BIT3; 中断; 判例10://P1.4 指示器^= SW4; P1IFG &=~BIT4; 中断; 判例12://P1.5 指示器^= SW5; P1IFG &=~BIT4; 中断; 判例14://P1.6 指示器^= SW6; P1IFG &=~BIT6; 中断; 判例16://P1.7 指示器^=全部; P1IFG &=~BIT7; 中断; 默认值: 中断; } }
任何想法…
谢谢你
Steve