msp430的中斷優先順序、開啟關閉、中斷巢狀
優先順序順序從高到低為:
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] */
當同時有多個中斷來的時候才有優先順序的考慮(優先順序順序可檢視向量表)
有中斷響應以後自動關閉總中斷,這個時候即使來更高優先順序的中斷都不會響應
要中斷巢狀的話,就必須在中斷中開啟總中斷!
msp430的指令中,dint和eint分別指關和開所有中斷,也就是包涵p1ie、p2ie、wdtie、taie、tbie、adc12ie、串列埠中斷允許的所有中斷允許位為「0」和為「1」。
實現中斷巢狀需要注意以下幾點:
1)430預設的是關閉中斷巢狀的,除非你在乙個中斷程式中再次開總中斷eint;
2)當進入中斷程式時,只要不在中斷中再次開中斷,則總中斷是關閉的,此時來中斷不管是比當前中斷的優先順序高還是低都不執行;
3)若在中斷a中開了總中斷,則可以響應後來的中斷b(不管b的優先順序比a高還是低),b執行完再繼續執行a。注意:進入中斷b後總中斷同樣也會關閉,如果b中斷程式執行時需響應中斷c,則此時也要開總中斷,若不需響應中斷,則不用開中斷,b執行完後跳出中斷程式進入a程式時,總中斷會自動開啟;
4)若在中斷中開了總中斷,後來的中斷同時有多個,則會按優先順序來執行,即中斷優先順序只有在多個中斷同時到來時才起做用!中斷服務不執行搶先原則。
5)對於單源中斷,只要響應中斷,系統硬體自動清中斷標誌位,對於ta/tb定時器的比較/捕獲中斷,只要訪問taiv/tbiv,標誌位倍被自動清除;
對於多源中斷要手動清標誌位,比如p1/p2口中斷,要手工清除相應的標誌,如果在這種中斷用"eint();"開中斷,而在開啟中斷前沒有清標誌,就會有相同的中斷不斷嵌入,而導致堆疊溢位引起復位,所以在這類中斷中必須先清標誌再開啟中斷開關.
MSP430微控制器 中斷服務
430的中斷是按照下圖1的優先順序順序定義的,有三種中斷 1.系統重置 2.不可遮蔽中斷 nmi 3.可遮蔽中斷。圖1.中斷優先順序 部分具體的中斷優先順序由高到低為 port2 vector 1 2u 0xffe2 port 2 port1 vector 4 2u 0xffe8 port 1 ti...
MSP430微控制器的中斷
中斷是msp430微處理器的一大特色,有效地利用中斷可以簡化程式和提高執行效率。msp430的幾乎每個外圍模組都能夠產生中斷,為msp430針對事件 即外圍模組產生的中斷 進行的程式設計打下基礎。msp430在沒有事件發生時進入低功耗模式,事件發生時,通過中斷喚醒cpu,事件處理完畢後,cpu再次進...
MSP430F149 中斷及案例
msp430f149內部有三種型別中斷 系統復位中斷,不可遮蔽中斷,可遮蔽中斷 中斷過程 完成當前正在執行的指令 把pc暫存器內容入棧 把sr暫存器內容入棧 如果同時有多個中斷,則選擇優先順序最高的中斷 如果中斷是單源中斷,則中斷標誌位自動復位 如果中斷是多源中斷,則需要中斷服務程式復位 sr清零,...