MSP430 G2553 Timer 中斷總結(jié)
目前總共用到了四個(gè)中斷向量,我覺得已經(jīng)把G2553的所有定時(shí)器中斷都用到了。
定時(shí)器有兩個(gè),TA0與TA1,每個(gè)定時(shí)器又有兩個(gè)中斷向量
1,CCR0到達(dá)時(shí)的中斷,在計(jì)數(shù)模式時(shí)候很有用,平時(shí)定時(shí)器的基本功能。
2,CCR1,CCR2,以及 overflow時(shí)候的中斷向量,這里面又有三個(gè)中斷標(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 */
可見,每個(gè)TimerA模塊有兩個(gè)中斷向量
更詳細(xì)一點(diǎn),查閱用戶指南可知:
TIMERA0只針對(duì)CCR0的計(jì)數(shù)溢出TIMERA1再查詢TAIV后可知道是CCR1,還是CCR2,亦或TAIFG引起的,至于TAIFG是什么情況下置位的,則要看TA工作的模式
TA0的兩個(gè)中斷:
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TimerA0(void)
{
//計(jì)數(shù)到達(dá)時(shí)候的代碼
}
#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 定時(shí)器溢出
}
下面是TA1的兩個(gè)中斷向量,注意向量名字。
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TimerA1(void)
{
//計(jì)數(shù)到達(dá)時(shí)候的代碼
}
#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)行判斷是哪一個(gè)中斷源產(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 定時(shí)器溢出
}
另外TA1與TA2的寄存器名字也有不同設(shè)置時(shí)候需要注意