學號:19011210554? ?姓名:袁博
轉(zhuǎn)載自:https://blog.csdn.net/QAQWE/article/details/84521152
【嵌牛導讀】:msp430的運用已經(jīng)十分常見耍鬓,今天我們就其IO口中斷進行學習了解盲镶。
【嵌牛鼻子】:msp430? ?IO中斷
【嵌牛提問】:msp430的IO口中斷怎么使用胧华,其詳細機制是什么樣的?
【嵌牛正文】:
MSP430中斷嵌套機制
(1) 430默認的是關(guān)閉中斷嵌套的,除非你在一個中斷程序中再次開總中斷EINT。
(2) 當進入中斷程序時童叠,只要不在中斷中再次開中斷,總中斷是關(guān)閉的课幕,此時來中斷不管是比當前中斷的優(yōu)先級高還是低都不執(zhí)行厦坛。
(3)若在中斷A中開了總中斷,剛可以響應后來的中斷B(不管B的優(yōu)先級比A高還是低)乍惊,B執(zhí)行完現(xiàn)繼續(xù)執(zhí)行杜秸。注意:進入中斷B生總中斷同樣也會關(guān)閉,如果B中斷程序執(zhí)行時需響應中斷C润绎,則此時也要開總中斷撬碟,若不需響應中斷,則不用開中斷莉撇,B執(zhí)行完后中跳出中斷程序進入A程序時呢蛤,總中斷會自動打開。
(4)若在中斷中開了總中斷稼钩,后來的中斷同時有多個顾稀,則會按優(yōu)先級來執(zhí)行达罗,即中斷優(yōu)先級只有在多個中斷同時到來才起做用坝撑!中斷服務不執(zhí)行搶先原則。
(5)對于單源中斷粮揉,只要響應中斷巡李,系統(tǒng)硬件自動清中斷標志位,對于TA/TB定時器的比較/捕獲中斷扶认,只要訪問TAIV/TBIV侨拦,標志位倍被自動清除;對于多源中斷要手動清標志位辐宾,比如P1/P2口中斷狱从,要手工清除相應的標志膨蛮,如果在這種中斷用“EINT();”開中斷季研,而在打開中斷前沒有清標志敞葛,就會有相同的中斷不斷嵌入,而導致堆棧溢出引起復位与涡,所以在這類中斷必須先清標志現(xiàn)打開中斷開關(guān)惹谐。關(guān)于CPU部分我這次主要著重講述下SR狀態(tài)寄存器各位功能作用,對于C語言寫已足夠用了。另外還會補充一部單片機全局性的資料驼卖。
MSP430的中斷分為3種:系統(tǒng)復位氨肌、不可屏蔽中斷、可屏蔽中斷酌畜。關(guān)于中斷相關(guān)狀態(tài)情況:
(1)系統(tǒng)復位的中斷向量為0xFFFE怎囚。
(2)不可屏蔽中斷的中斷向量為0xFFFC。響應不可屏蔽中斷時,硬件自動將OFIE檩奠、NMIE桩了、ACCVIE復位。軟件首先判斷中斷源并復位中斷標志,接著執(zhí)行用戶代碼埠戳。退出中斷之前需要置位OFIE井誉、NMIE、ACCVIE,以便能夠再次響應中斷整胃。需要特別注意點:置位OFIE颗圣、NMIE、ACCVIE后,必須立即退出中斷相應程序,否則會再次觸發(fā)中斷,導致中斷嵌套,從而導致堆棧溢出,致使程序執(zhí)行結(jié)果的無法預料屁使。
(3)可屏蔽中斷的中斷來源于具有中斷能力的外圍模塊,包括看門狗定時器工作在定時器模式時溢出產(chǎn)生的中斷在岂。每一個中斷都可以被自己的中斷控制位屏蔽,也可以由全局中斷控制位屏蔽。多個中斷請求發(fā)生時,響應最高優(yōu)先級中斷蛮寂。響應中斷時,MSP430會將不可屏蔽中斷控制位SR.GIE復位蔽午。因此,一旦響應了中斷,即使有優(yōu)先級更高的可屏蔽中斷出現(xiàn),也不會中斷當前正在響應的中斷,去響應另外的中斷。但SR.GIE復位不影響不可屏蔽中斷,所以仍可以接受不可屏蔽中斷的中斷請求酬蹋。
中斷響應的過程:
(1)如果CPU處于活動狀態(tài),則完成當前指令;
(2)若CPU處于低功耗狀態(tài),則退出低功耗狀態(tài);
(3)將下一條指令的PC值壓入堆棧;
(4)將狀態(tài)寄存器SR壓入堆棧;
(5)若有多個中斷請求,響應最高優(yōu)先級中斷;
(6)單中斷源的中斷請求標志位自動復位,多中斷源的標志位不變,等待軟件復位;
(7)總中斷允許位SR.GIE復位及老。SR狀態(tài)寄存器中的CPUOFF、OSCOFF范抓、SCG1骄恶、V、N匕垫、Z僧鲁、C位復位;
(8)相應的中斷向量值裝入PC寄存器,程序從此地址開始執(zhí)行。
中斷返回的過程:
(1)從堆棧中恢復PC值,若響應中斷前CPU處于低功耗模式,則可屏蔽中斷仍然恢復低功耗模式;
(2)從堆棧中恢復PC值,若響應中斷前CPU不處于低功耗模式,則從此地址繼續(xù)執(zhí)行程序。