MSP430 G2553 Timer 中斷總結(jié)
目前總共用到了四個中斷向量,我覺得已經(jīng)把G2553的所有定時器中斷都用到了。
定時器有兩個,TA0與TA1,每個定時器又有兩個中斷向量
1,CCR0到達(dá)時的中斷,在計數(shù)模式時候很有用,平時定時器的基本功能。
2,CCR1,CCR2,以及 overflow時候的中斷向量,這里面又有三個中斷標(biāo)志。
#define TIMER0_A1_VECTOR (8 * 2u) /* 0xFFF0 Timer0)A CC1, TA0 */
#define TIMER0_A0_VECTOR (9 * 2u) /* 0xFFF2 Timer0_A CC0 */ . .
#define TIMER1_A1_VECTOR (12 * 2u) /* 0xFFF8 Timer1_A CC1-4, TA1 */
#define TIMER1_A0_VECTOR (13 * 2u) /* 0xFFFA Timer1_A CC0 */
可見,每個TimerA模塊有兩個中斷向量
更詳細(xì)一點,查閱用戶指南可知:
TIMERA0只針對CCR0的計數(shù)溢出TIMERA1再查詢TAIV后可知道是CCR1,還是CCR2,亦或TAIFG引起的,至于TAIFG是什么情況下置位的,則要看TA工作的模式
TA0的兩個中斷:
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TimerA0(void)
{
//計數(shù)到達(dá)時候的代碼
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer0_A(void)
{
switch( TA0IV ) //TAIV中斷向量寄存器 用于
{
case 2: break; // CCR1 not used 捕獲/比較器1
case 4: break; // CCR2 not used 捕獲/比較器2
case 10: break; // overflow 定時器溢出
}
下面是TA1的兩個中斷向量,注意向量名字。
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TimerA1(void)
{
//計數(shù)到達(dá)時候的代碼
}
#pragma vector=TIMER1_A1_VECTOR //Timer1_A CC1 的中斷向量
__interrupt void Timer_A1(void)
{ unsigned int count; char countH,countL; float mile; UCHAR shi[2]; //的方法進(jìn)行判斷是哪一個中斷源產(chǎn)生的中斷
switch(TA1IV) //如果是Timer1_A CC1產(chǎn)生的中斷
{
case 2:break; // CCR1 not used 捕獲/比較器1
case 4:break; // CCR2 not used 捕獲/比較器2
case 10:break; // overflow 定時器溢出
}
另外TA1與TA2的寄存器名字也有不同設(shè)置時候需要注意