最近兩天琢磨了下MSP430的定時(shí)器,發(fā)現(xiàn)還是挺麻煩的,在這里把學(xué)習(xí)心得記錄下來(lái):在MSP430G2211上只有TIMER A中斷,所以在這里我們討論TIMER A ,TIMER B應(yīng)該和TIMER A差不多。 對(duì)于每一個(gè)定時(shí)器來(lái)說(shuō),它有兩個(gè)中斷,TIMERA0_VECTOR 和TIMERA1_VECTOR 。這兩個(gè)中斷何時(shí)被觸發(fā)呢?在MSP430中,TIMERA0_VECTOR在TACCR0寄存器溢出時(shí)被觸發(fā);而TIMERA1_VECTOR 在三個(gè)時(shí)候都可以被觸發(fā)(TACCR1 CCIFG、TACCR2 CCIFG,TAIFG只要這三個(gè)寄存器中的任何一個(gè)被置位了,TIMERA1_VECTOR 中斷就會(huì)被觸發(fā))。 顯然,這樣就會(huì)有一個(gè)問(wèn)題:既然三個(gè)寄存器中的任何一個(gè)被置位了 都會(huì)產(chǎn)生中斷,那么用戶(hù)如何區(qū)分這三種中斷呢?在MSP430中提供了一個(gè)TAIV寄存器,在響應(yīng)TIMERA1_VECTOR 時(shí)我們?nèi)ゲ榭碩AIV寄存器中的值就能得到當(dāng)前是誰(shuí)產(chǎn)生了中斷。代碼如下:#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
本文引用地址:http://www.ex-cimer.com/article/201611/316284.htmswitch(TAIV)
{
case 2:
。。。。
break;
case 4:
。。。。
break;
case 10:
。。。。
break;
} 關(guān)于TAIFG這個(gè)標(biāo)記,很多人認(rèn)為是定時(shí)器溢出的中斷,所以很多人把TAIFG標(biāo)記和TACCR0的中斷認(rèn)為是一個(gè)東西,但是仔細(xì)看430的用戶(hù)手冊(cè)你會(huì)發(fā)現(xiàn),TAIFG標(biāo)記并不一定是定時(shí)器溢出時(shí)才會(huì)被置位!
評(píng)論