1

我已将 MSP430F5418 P2.5 设置为从高到低转换。但是我在从低到高和从高到低的转换中都遇到了中断。请在下面使用我的代码片段。

    P2OUT |= BIT5 /* 启用 P2.5 内阻 */
    P2REN |= BIT5 /* 将 P2.5 设置为上拉电阻 */

    P2IES |= BIT5;    
    P2IE |= BIT5;    
    P2IFG &= ~BIT5; /* P2.5 IFG 清除 */


#pragma 向量=PORT2_VECTOR
__interrupt 无效端口2_interrupt(无效)
{
    开关 (P2IV)
    {
        案例 0x0CU:
        {
            /* 在这里做一些事情 */
            P2IFG &= ~BIT5;
            休息;
        }
        默认:
        {
            /* 无动作 */
            休息;
        }
    }
}
4

2 回答 2

0

实际上不是一个答案,只是一个建议,将您的变量重命名为更有意义的东西,两个月后您将不会记得 BIT5 是您检查从高到低转换的引脚。您可以使用定义将 BIT5 重命名为 HIGH_TO_LOW_PIN。您可以对计时器设置做同样的事情,将其重构为更有意义的东西。

于 2011-07-12T16:04:53.833 回答
0

汉斯,我没有使用开关来断言引脚。它实际上是由另一个处理器完成的。我在 TI(Texas Instruments)论坛上得到回复,说在低到高的转换中可能存在隐藏的高到低信号,反之亦然。

所以,我修改了我的代码如下,它工作正常。

...

 P2OUT |= BIT5 ; /* 启用 P2.5 内阻 */
 P2REN |= BIT5; /* 设置 P2.5 为上拉电阻 */

 P2IES |= BIT5; /* 将 P2IFG 设置为从高到低的转换 */
 P2IE |= BIT5; /* P2.5 中断启用 */
 P2IFG &= ~BIT5; /* P2.5 IFG 清除 */
...

#pragma 向量=PORT2_VECTOR
__interrupt 无效端口2_isr(无效)
{
    开关 (P2IV)
    {
        案例 0x0CU:
        {
            TA1CCTL0 &= ~CCIE;
            TA1CCR0 = 0U;
            TA1CCTL0 |= CCIE;
            TA1CCTL0 &= ~CCIFG;
            TA1CCR0 = TA1R + 15U;
            P2IFG &= ~BIT5;
            休息;
        }
        ...
        ...
    }
}

#pragma vector = TIMER1_A0_VECTOR /* Timer1_A3 CC0 */
静态 __interrupt 无效 _timer1_ao_isr (无效)
{
    TA1CCTL0 &= ~CCIE;
    如果 ((P2IN & BIT5) == 0U)
    {
       // 这里有一个有效的从高到低的断言!!!
    }
}

于 2011-07-04T12:22:42.803 回答