使用MSP430F1121中斷須要注意的問(wèn)題
MSP430F1121(下面簡(jiǎn)稱(chēng)F1121)是TI公司新近推出的一款廉價(jià)的20引腳低功耗16位Flash單片機。它所具備的多種中斷功能使其應用靈活,并適用于各種不同的應用領(lǐng)域。
不過(guò),我們在應用開(kāi)發(fā)中發(fā)現,廠(chǎng)家提供的技術(shù)文件雖然不少,但是對有關(guān)中斷的說(shuō)明卻不那么詳盡,這就給應用開(kāi)發(fā)造成了諸多不便。為此,我們專(zhuān)門(mén)用程序進(jìn)行了一些試驗,并從中明確了一些問(wèn)題。在這里,我們就把這些問(wèn)題說(shuō)明一下,供大家參考。
在說(shuō)明這些問(wèn)題之前,有必要先來(lái)看一下F1121的中斷,如表1所列。
表1 F1121中斷
F1121的各個(gè)中斷都有對應的中斷向量和中斷優(yōu)先級,通常被分為三類(lèi):系統復位、(非)屏蔽中斷和可屏蔽中斷。此外,F1121的各中斷又分單源中斷和多源中斷,對應的中斷標志稱(chēng)為單源中斷標志和多源中斷標志。
一、 系統復位
從形式上講,可以把系統復位看成一種中斷,但這是一種特殊的中斷,雖然它也有中斷向量(復位向量)和中斷優(yōu)先級,但與通常意義的中斷有明顯的區別:系統復位導致系統進(jìn)入初始狀態(tài),并迫使程序從頭開(kāi)始運行。
1. 導致系統復位的情況及POR和PUC信號
有4種情況能夠導致系統復位,并且產(chǎn)生POR(Power-On Reset)和PUC(Power-Up Clear)信號:
· 上電復位——產(chǎn)生POR和PUC;
· RST復位(外部復位信號復位)——產(chǎn)生POR和PUC;
· 看門(mén)狗中斷——僅產(chǎn)生PUC;
· 關(guān)鍵碼錯誤中斷——僅產(chǎn)生PUC。
POR和PUC都是系統復位時(shí)產(chǎn)生的芯片內部信號,負責對寄存器進(jìn)行初始化。在F1121提供的技術(shù)文件中,由PUC信號負責初始化的那些寄存器位,其初始狀態(tài)用“0”和“1”來(lái)表示,而由POR信號負責的,用“(0)”和“(1)”來(lái)表示。例如,圖1所示的BCSCTL1寄存器,高4 位由POR負責,低4位由PUC負責。
圖1 BCSCTL1寄存器
不同的系統復位情況產(chǎn)生不同的PUC和POR,因而產(chǎn)生不同的系統初始化結果。例如,對于BCSCTL1寄存器,不管是什么原因造成了系統復位,其低4位都將回到初始狀態(tài)上;高4位只有在上電復位和RST復位這兩種情況下才會(huì )回到初始狀態(tài),而在其他情況下(除非芯片掉電)其狀態(tài)保持不變。
2. 看門(mén)狗中斷標志W(wǎng)DTIFG
看門(mén)狗定時(shí)器有兩種工作方式,且都使用中斷標志W(wǎng)DTIFG,但它們的表現卻有明顯的區別。在看門(mén)狗工作方式下(產(chǎn)生導致系統復位的看門(mén)狗中斷),其表現為:當發(fā)生看門(mén)狗中斷而導致系統復位時(shí),WDTIFG將置“1”(其他復位情況下為“0”)。這時(shí)的WDTIFG不能自動(dòng)清“0”,只有等待軟件(程序指令)將其清“0”。不過(guò)即使不清“0”(無(wú)論WDTIFG是“1”還是“0”),也不會(huì )影響程序的運行,而且也不會(huì )妨礙再次產(chǎn)生看門(mén)狗中斷。實(shí)際上,這時(shí)的WDTIFG僅僅是標記一下是否產(chǎn)生了看門(mén)狗中斷的作用,以便區分系統復位的原因。另一個(gè)導致系統復位的關(guān)鍵碼錯誤中斷的中斷標志KEYV 的情況也是如此。
另外,中斷使能位WDTIE對看門(mén)狗中斷不起任何作用。
二、 中斷
中斷分為可屏蔽中斷和非屏蔽中斷,區分它們的惟一準則是GIE(可屏蔽中斷使能總控制位)能否禁止其中斷。凡是能被GIE禁止的就是可屏蔽中斷,不能被禁止的就是非屏蔽中斷。
但是在F1121中,真正的非屏蔽中斷只有看門(mén)狗中斷和關(guān)鍵碼錯誤中斷。這兩種中斷卻不是普通意義的中斷,因為它們會(huì )導致系統復位。除此之外,還有三種中斷屬于非屏蔽中斷的范疇,但它們卻不是真正的非屏蔽中斷,因為它們各自都有自己的中斷使能控制位,這些中斷使能控制位能夠屏蔽它們的中斷。所以,對這三種中斷用“(非)屏蔽中斷”來(lái)表示。
1. 中斷標志
無(wú)論可屏蔽中斷還是(非)屏蔽中斷都有自己的中斷標志,其共同特點(diǎn)是:① 中斷標志的狀態(tài)與該中斷源能否產(chǎn)生中斷無(wú)關(guān)?;蛘哒f(shuō),不管是否允許其中斷,只要滿(mǎn)足了中斷的條件,中斷標志就會(huì )置“1”。另外,也可以用軟件將中斷標志置 “1”或清“0”。② 中斷源就是通過(guò)中斷標志請求中斷的(當允許其中斷時(shí))。下面以(看門(mén)狗)定時(shí)器中斷(不同于看門(mén)狗中斷,它產(chǎn)生可屏蔽中斷,中斷向量為FFF4h,中斷優(yōu)先級是10)為例進(jìn)行說(shuō)明。
· 在允許其中斷的情況下,無(wú)論什么原因,只要WDTIFG置“1”就會(huì )產(chǎn)生中斷。例如,定時(shí)器溢出(這時(shí)WDTIFG置“1”)會(huì )產(chǎn)生中斷,用軟件強行將WDTIFG置“1”也會(huì )產(chǎn)生中斷。
· 如果在中斷被禁止的情況下WDTIFG已經(jīng)置“1”,那么一旦允許,它就會(huì )產(chǎn)生中斷。
· 如果在中斷被禁止的情況下WDTIFG已經(jīng)置“1”,但是,假如在允許它中斷之前將其清“0”,那么,即使允許,它也不會(huì )產(chǎn)生中斷。
中斷標志分為兩種——單源中斷標志和多源中斷標志,它們有不同的特性。
?。?) 單源中斷標志
如果一個(gè)中斷向量(也就是中斷處理程序)只對應惟一的一個(gè)中斷源,那么,這個(gè)中斷就被稱(chēng)為單源中斷,其中斷標志就是單源中斷標志。例如,(看門(mén)狗)定時(shí)器中斷的WDTIFG、比較器A中斷的CAIFG和定時(shí)器A中斷的CCIFG0都是單源中斷標志。
單源中斷標志的特性是:當單源中斷被響應時(shí),其單源中斷標志將會(huì )自動(dòng)清“0”。
但須注意,如果在中斷處理過(guò)程中(中斷返回之前)這個(gè)單源中斷標志又重新被置“1”,那么,它就不會(huì )自動(dòng)清“0”了,只有用軟件才能將其清“0”。
?。?) 多源中斷標志
如果一個(gè)中斷向量對應于多個(gè)中斷源(即多個(gè)中斷共用一個(gè)中斷處理程序),那么這些中斷都稱(chēng)為多源中斷,對應的各個(gè)中斷標志都是多源中斷標志。例如,三個(gè)(非)屏蔽中斷的NMIIFG、OFIFG、ACCVIFG以及定時(shí)器A中斷的CCIFG1、CCIFG2、 TAIFG和P1及P2口的所有中斷標志都是多源中斷標志。
多源中斷標志的特性是:當多源中斷被響應時(shí),多源中斷標志不能自動(dòng)清“0”,只能用軟件才能將其清“0”。因此,一定不要忘記在中斷返回之前將多源中斷標志清“0”;否則,當中斷返回后,這個(gè)沒(méi)有被清“0”的中斷標志馬上就會(huì )再次請求中斷。
2. (非)屏蔽中斷
一共有三個(gè)(非)屏蔽中斷:NMI中斷、振蕩器故障中斷和Flash讀寫(xiě)錯誤中斷。它們不受GIE狀態(tài)的影響,但各自都有中斷使能位:NMIIE、OFIE和ACCVIE,只有當中斷使能位被置位后,才能允許對應的中斷源產(chǎn)生中斷。
注意:對這三個(gè)(非)屏蔽中斷來(lái)說(shuō),只要響應了其中的一個(gè)中斷,所有這三個(gè)中斷使能位就會(huì )全部自動(dòng)復位,而且一直保持在復位狀態(tài)上,即使中斷返回后它們也不會(huì )自動(dòng)恢復為先前的狀態(tài),所以,需要用軟件才能將它們重新置位。另外須注意的是,這三個(gè)中斷都是多源中斷。
3. 可屏蔽中斷和GIE
能夠被GIE禁止的中斷都是可屏蔽中斷,其中有的是單源中斷(單源中斷標志),有的是多源中斷(多源中斷標志)。所有這些中斷都有各自的中斷使能位,只有當中斷使能位被置位并且GIE置位后,才能允許對應的中斷源產(chǎn)生中斷。除了系統復位或者用軟件進(jìn)行改寫(xiě)之外,其他任何情況(包括中斷響應或中斷返回等)都不會(huì )對這些中斷使能位的狀態(tài)產(chǎn)生影響。
GIE是可屏蔽中斷使能總控制位,當它復位時(shí)禁止所有可屏蔽中斷源請求中斷,當它置位時(shí)才有可能允許它們請求中斷(能否允許還取決于它們各自的中斷使能位的狀態(tài))。
注意:當響應了任何一個(gè)中斷時(shí),包括可屏蔽中斷和(非)屏蔽中斷,GIE將會(huì )自動(dòng)復位;當中斷返回時(shí)它又會(huì )自動(dòng)恢復為中斷前的狀態(tài)(除非在中斷處理期間改寫(xiě)了保存在堆棧中的GIE的內容)。
如果在中斷處理期間用軟件將已經(jīng)復位的GIE重新置位,這時(shí)就可以形成可屏蔽中斷嵌套。
4. 中斷優(yōu)先級
F1121的中斷優(yōu)先級與其他微處理器中的概念略有不同:它只對同時(shí)發(fā)生多個(gè)中斷的情況有效(級別高的中斷優(yōu)先被響應),而對中斷嵌套的情況沒(méi)有任何限制。
5. 中斷嵌套
如果在處理某一中斷期間又響應了其他中斷請求,這時(shí)就會(huì )形成中斷嵌套。中斷嵌套時(shí),前一中斷處理過(guò)程被暫停,當后一中斷被處理完之后才會(huì )繼續處理前一中斷。
注意:只有在中斷處理期間將GIE重新置位,可屏蔽中斷才能夠嵌入到這個(gè)中斷的處理之中;但(非)屏蔽中斷卻不受此限制,它們可以隨時(shí)嵌入到任何處理之中(如果允許其中斷的話(huà))。另外,F1121的中斷嵌套不受中斷優(yōu)先級的任何限制。也就是說(shuō),高級別中斷可以嵌入到低級別中斷的處理過(guò)程中;反過(guò)來(lái),低級別中斷也可以嵌入到高級別的中斷處理過(guò)程中,甚至可以形成自身嵌套。這些情況對(非)屏蔽中斷也不例外。因此,在使用F1121時(shí)須特別注意這一點(diǎn),即使不是有意使用中斷嵌套,也必須考慮這一問(wèn)題,因為這時(shí)仍會(huì )存在發(fā)生中斷嵌套的可能,而且,如果嵌套會(huì )影響中斷的某一(些)狀態(tài)的話(huà),就有可能造成系統運行錯誤。
評論