?? avr中斷嵌套.txt
字號:
AVR中斷嵌套
昨天寫了個AVR的紅外的遙控的鬧鐘程序,開發板要個綜合程序.就隨便寫了個.
主程序開了兩個中斷,一個輸入捕獲中斷,供紅外使用.另外開了個定時中斷,為系統其他地方使用,如蜂鳴器,鍵盤掃描,軟件定時器等使用.
捕獲中斷接收到數據就壓入一個隊列中,然后在10ms的系統中斷函數中處理隊列的數據.發現接收很不穩定,有時行,有時不行.但是將隊列處理函數放在程序主循環中,接收就特別穩定.后來在10ms的定時中斷服務函數中將全局中斷使能打開,再隊列處理函數放在10ms里邊,這樣接收也很穩定.問題解決.
AVR中斷優先級以及中斷嵌套處理
1.AVR中斷的優先級由該中斷向量在中斷向量區中的位置確定,處于低地址的中斷向量所對應的中斷擁有高優先級,所以,系統復位RESET擁有最高優先級。
2.當兩個中斷同時發生申請中斷時,MCU先響應中斷優先級高的中斷。低優先級的中斷一般將保持中斷標志位的狀態(外部低電平中斷除外),等待MCU響應處理。
3.MCU響應一個中斷后,在進入中斷服務前已由硬件自動清零全局中斷允許位。因此此時即使有更高優先級的中斷請求發生,MCU也會不響應,要等執行到RETI指令,從本次中斷返回,并執行了一條指令后,才能繼續響應中斷。所以,在缺省情況下,AVR的中斷不能嵌套。AVR中斷的優先級只是在有多個中斷同時發生時才起作用,此時MCU將首先響應高優先級的中斷。
4.AVR中斷嵌套處理是通過軟件方式實現的。如在B中斷服務中,如需要MCU能及時的響應A中斷(不是等本次中斷返回后再響應),B中斷的服務程序應這樣設計:(1)B中斷的現場保護;(2)屏蔽除A以外其它的中斷允許標志;(3)用指令SEI開放允許全局中斷;(4)B中斷服務;(5)用指令CLI禁止全局中斷(6)恢復在本中斷程序被屏蔽的中斷允許標志;(7)B中斷現場恢復;(8)B中斷返回。
5.采用軟件方式實現中斷嵌套處理的優點,是能夠讓程序員可以根據不同的實際情況和需要來決定中斷的重要性,有更加靈活的手段處理中斷響應和中斷嵌套,如讓低優先級的中斷(此時很重要)打斷高優先級中斷的服務等,但同時也增加了編寫中斷服務程序的復雜性。
6.由于AVR的指令執行速度比較高,因此在一般情況下,不建議使用中斷嵌套的處理方法。當然,這還需要用戶在編寫中斷處理服務程序中,應遵循中斷服務程序盡量要短的原則。
中斷中關總中斷 最后出中斷時硬件自動開總中斷的
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -