430的中斷是按照下圖1的優先順序順序定義的,有三種中斷:1.系統重置、2.不可遮蔽中斷(nmi)、3.可遮蔽中斷。
圖1.中斷優先順序
部分具體的中斷優先順序由高到低為:
port2_vector (1 * 2u) /* 0xffe2 port 2 */
port1_vector (4 * 2u) /* 0xffe8 port 1 */
timera1_vector (5 * 2u) /* 0xffea timer a cc1-2, ta */
timera0_vector (6 * 2u) /* 0xffec timer a cc0 */
adc_vector (7 * 2u) /* 0xffee adc */
usart0tx_vector (8 * 2u) /* 0xfff0 usart 0 transmit */
usart0rx_vector (9 * 2u) /* 0xfff2 usart 0 receive */
wdt_vector (10 * 2u) /* 0xfff4 watchdog timer */
comparatora_vector (11 * 2u) /* 0xfff6 comparator a */
timerb1_vector (12 * 2u) /* 0xfff8 timer b cc1-2, tb */
timerb0_vector (13 * 2u) /* 0xfffa timer b cc0 */
nmi_vector (14 * 2u) /* 0xfffc non-maska××e */
reset_vector (15 * 2u) /* 0xfffe reset [highest priority] */
其中可遮蔽中斷分為系統nmi(snmi)和使用者nmi(unmi),一般來說,不可遮蔽中斷不受gie標誌位的影響。使用者不可遮蔽中斷的中斷源為nmiie、accie和ofie,當響應使用者不可遮蔽中斷後,其他不可遮蔽中斷就自動被禁止,以防止同級別的中斷發生產生中斷巢狀。當同時有多個中斷來的時候才有優先順序的考慮(優先順序順序可檢視向量表)。有中斷響應以後自動關閉總中斷,這個時候即使來更高優先順序的中斷都不會響應。要中斷巢狀的話,就必須在中斷中開啟總中斷。
關於中斷巢狀,資料上是這麼講的:
1)430預設的是關閉中斷巢狀的,除非你在乙個中斷程式中再次開總中斷eint;
2)當進入中斷程式時,只要不在中斷中再次開中斷,則總中斷是關閉的,此時來中斷不管是比當前中斷的優先順序高還是低都不執行;
3)若在中斷a中開了總中斷,則可以響應後來的中斷b(不管b的優先順序比a高還是低),b執行完再繼續執行a。注意:進入中斷b後總中斷同樣也會關閉,如果b中斷程式執行時需響應中斷c,則此時也要開總中斷,若不需響應中斷,則不用開中斷,b執行完後跳出中斷程式進入a程式時,總中斷會自動開啟;
4)若在中斷中開了總中斷,後來的中斷同時有多個,則會按優先順序來執行,即中斷優先順序只有在多個中斷同時到來時才起做用!中斷服務不執行搶先原則。
5)對於單源中斷,只要響應中斷,系統硬體自動清中斷標誌位,對於ta/tb定時器的比較/捕獲中斷,只要訪問taiv/tbiv,標誌位倍被自動清除;
對於單源中斷,只要響應中斷,系統硬體自動清中斷標誌位;
對於ta/tb定時器的比較/捕獲中斷,只要訪問taiv/tbiv,標誌位被自動清除;
對於多源中斷要手動清標誌位,比如p1/p2口中斷,要手工清除相應的標誌;如果在這種中斷用"eint();"開中斷,而在開啟中斷前沒有清標誌,就會有相同的中斷不斷嵌入,而導致堆疊溢位引起復位,所以在這類中斷中必須先清標誌再開啟中斷開關。
對於多源中斷,我在應用時遇到了一些問題,程式總是在執行時跑飛。我曾經用過的程式中有兩個中斷源,但是已經按照要求在中斷服務程式中清楚了標誌位,但程式還是跑飛了,現在還未找到原因,還要繼續修改,要請教一下學長。
官方給的多源中斷的例子是:
#pragma vector = port2_vector
__interrupt void port2(void)
MSP430微控制器的中斷
中斷是msp430微處理器的一大特色,有效地利用中斷可以簡化程式和提高執行效率。msp430的幾乎每個外圍模組都能夠產生中斷,為msp430針對事件 即外圍模組產生的中斷 進行的程式設計打下基礎。msp430在沒有事件發生時進入低功耗模式,事件發生時,通過中斷喚醒cpu,事件處理完畢後,cpu再次進...
MSP430教程8 MSP430微控制器復位電路
msp430 微控制器系統復位電路 從上msp430 系統復位電路功能模組圖中可以看到了兩個復位訊號,乙個是上電復位訊號 por power on reset 和上電清除訊號 puc power up clear por 訊號是器件的復位訊號,此訊號只有在以下的事件發生時才會產生 器件上電時。rst...
MSP430微控制器低功耗結構
各控制位的作用如下 scg1 復位,使能smclk 置位,禁止smclk。scg0 復位,啟用直流發生器,只有scg0置位,並且dcoclk沒有被用作mclk或smclk時,直流發生器才能被禁止。oscoff 復位,啟用lfxt1,只有當oscoff被置位並且lfxt1clk不用於mclk或smcl...