最近兩天琢磨了下MSP430的定時(shí)器,發(fā)現還是挺麻煩的,在這里把學(xué)習心得記錄下來(lái):在MSP430G2211上只有TIMER A中斷,所以在這里我們討論TIMER A ,TIMER B應該和TIMER A差不多。 對于每一個(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ù)如何區分這三種中斷呢?在MSP430中提供了一個(gè)TAIV寄存器,在響應TIMERA1_VECTOR 時(shí)我們去查看TAIV寄存器中的值就能得到當前是誰(shuí)產(chǎn)生了中斷。代碼如下:#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
本文引用地址:http://dyxdggzs.com/article/201611/316284.htmswitch(TAIV)
{
case 2:
。。。。
break;
case 4:
。。。。
break;
case 10:
。。。。
break;
} 關(guān)于TAIFG這個(gè)標記,很多人認為是定時(shí)器溢出的中斷,所以很多人把TAIFG標記和TACCR0的中斷認為是一個(gè)東西,但是仔細看430的用戶(hù)手冊你會(huì )發(fā)現,TAIFG標記并不一定是定時(shí)器溢出時(shí)才會(huì )被置位!
評論