1

MSP430F5418P2.5を高から低への遷移に設定しました。しかし、低から高への遷移と高から低への遷移の両方で割り込みが発生しています。以下の私のコードスニペットをお願いします。

    P2OUT | = BIT5 /*P2.5内部抵抗を有効にする*/
    P2REN | = BIT5 /*P2.5をプルアップ抵抗として設定*/

    P2IES | = BIT5;    
    P2IE | = BIT5;    
    P2IFG&=〜BIT5; / *P2.5IFGがクリアされました*/


#pragma vector = PORT2_VECTOR
__interrupt void port2_interrupt(void)
{{
    スイッチ(P2IV)
    {{
        ケース0x0CU:
        {{
            /*ここで何かをします*/
            P2IFG&=〜BIT5;
            壊す;
        }
        デフォルト:
        {{
            /* 何もしない */
            壊す;
        }
    }
}
4

2 に答える 2

0

ハンス、私はピンをアサートするためにスイッチを使用していません。実際には別のプロセッサによって実行されます。TI(Texas Instruments)フォーラムで、低から高への遷移内に隠れた高から低への信号が存在する可能性があり、その逆もあり得るという返信がありました。

そこで、コードを次のように変更しましたが、正常に機能しました。

..。

 P2OUT | = BIT5; /*P2.5内部抵抗を有効にします*/
 P2REN | = BIT5; /*プルアップ抵抗としてP2.5を設定します*/

 P2IES | = BIT5; /*高から低への遷移にP2IFGを設定します*/
 P2IE | = BIT5; /*P2.5割り込みが有効*/
 P2IFG&=〜BIT5; / *P2.5IFGがクリアされました*/
..。

#pragma vector = PORT2_VECTOR
__interrupt void port2_isr(void)
{{
    スイッチ(P2IV)
    {{
        ケース0x0CU:
        {{
            TA1CCTL0&=〜CCIE;
            TA1CCR0 = 0U;
            TA1CCTL0 | = CCIE;
            TA1CCTL0&=〜CCIFG;
            TA1CCR0 = TA1R + 15U;
            P2IFG&=〜BIT5;
            壊す;
        }
        ..。
        ..。
    }
}

#pragma vector = TIMER1_A0_VECTOR / * Timer1_A3 CC0 * /
static __interrupt void _timer1_ao_isr(void)
{{
    TA1CCTL0&=〜CCIE;
    if((P2IN&BIT5)== 0U)
    {{
       //ここで有効な高から低へのアサートを取得しました!!!
    }
}

于 2011-07-04T12:22:42.803 に答える
0

実際には答えではなく、単なる提案です。変数の名前をより意味のあるものに変更してください。2か月後、BIT5が高から低への遷移をチェックするピンであることを思い出せません。定義を使用して、BIT5の名前をHIGH_TO_LOW_PINに変更できます。タイマー設定でも同じことができ、より意味のあるものにリファクタリングできます。

于 2011-07-12T16:04:53.833 に答える