我已将MSP430F5418 P2.5设置为从高到低转换。但我正在接受从低到高和从高到低转换的中断。请在下面的我的代码片段。
P2OUT |= BIT5 /* Enable P2.5 internal resistances */ P2REN |= BIT5 /* Set up P2.5 as pull-Up resistances */ P2IES |= BIT5; P2IE |= BIT5; P2IFG &= ~BIT5; /* P2.5 IFG cleared */ #pragma vector=PORT2_VECTOR __interrupt void port2_interrupt (void) { switch (P2IV) { case 0x0CU: { /* Do something here */ P2IFG &= ~BIT5; break; } default: { /* No Action */ break; } } }
答案 0 :(得分:0)
汉斯,我没有使用开关来断言引脚。它实际上是由另一个处理器完成的。我在TI(德州仪器)论坛上得到了一个答复,即在从低到高的转换过程中可能存在隐藏的从高到低的信号,反之亦然。
所以,我修改了我的代码如下,它工作正常。
... P2OUT |= BIT5 ; /* Enable P2.5 internal resistance */ P2REN |= BIT5; /* Set up P2.5 as pull-up resistance */ P2IES |= BIT5; /* Sets P2IFG for high to low transition */ P2IE |= BIT5; /* P2.5 interrupt enabled */ P2IFG &= ~BIT5; /* P2.5 IFG cleared */ ... #pragma vector=PORT2_VECTOR __interrupt void port2_isr (void) { switch (P2IV) { case 0x0CU: { TA1CCTL0 &= ~CCIE; TA1CCR0 = 0U; TA1CCTL0 |= CCIE; TA1CCTL0 &= ~CCIFG; TA1CCR0 = TA1R + 15U; P2IFG &= ~BIT5; break; } ... ... } } #pragma vector = TIMER1_A0_VECTOR /* Timer1_A3 CC0 */ static __interrupt void _timer1_ao_isr (void) { TA1CCTL0 &= ~CCIE; if ((P2IN & BIT5) == 0U) { // Got a valid high-to-low assert here!!! } }
答案 1 :(得分:0)
实际上不是一个答案,只是一个建议,将你的变量重命名为更有意义的东西,两个月后你就不会记得BIT5是你检查从高到低转换的引脚。您可以使用define将BIT5重命名为HIGH_TO_LOW_PIN。您可以使用计时器设置执行相同的操作,将其重构为更有意义的内容。