Прерывание порта MSP430F5418 происходит как для переходов с низкого уровня на высокий, так и с низкого на высокий - PullRequest
1 голос
/ 02 июля 2011

Я установил 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;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

На самом деле это не ответ, а просто предложение, переименуйте ваши переменные во что-то более значимое. Через два месяца вы не вспомните, что BIT5 - это пин-код, который вы проверяете для перехода с высокого уровня на низкий. Вы можете использовать определение для переименования BIT5, чтобы сказать, HIGH_TO_LOW_PIN. Вы можете сделать то же самое с настройкой таймера, реорганизовав его в нечто более значимое.

0 голосов
/ 04 июля 2011

Ганс, я не использую переключатель, чтобы установить контакт.Это на самом деле сделано другим процессором.На форуме TI (Texas Instruments) я получил ответ, что в переходе от низкого уровня к высокому может быть скрытый сигнал от высокого уровня к низкому, и наоборот.

Итак, я изменил свой код следующим образом, и он работал нормально.

...

 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!!!
    }
}

...