DSP中断总结
1 中斷概述
中斷定義:由硬件或軟件驅動的信號,使DSP將當前的程序掛起,執行另一個稱為中斷服務子程序(ISR)的任務。C55x支持32個ISR。有些ISR可以由軟件或硬件觸發,有些只能由軟件觸發。
當CPU同時收到多個硬件中斷請求時,CPU會按照預先定義的優先級對它們做出響應和處理。 所有的軟件中斷都是不可屏蔽中斷
?DSP處理中斷的步驟: (1)接收中斷請求。軟件和硬件都要求DSP將當前程序掛起。
(2)響應中斷請求。CPU必須響應中斷。如果是可屏蔽中斷,響應必須滿足某些條件。如果是不可屏蔽中斷,則CPU立即響應。
(3)準備進入中斷服務子程序。
????? CPU要執行的主要任務有:
完成當前指令的執行,并沖掉流水線上還未解碼的指令
自動將某些必要的寄存器的值保存到數據堆棧和系統堆棧
從用戶實現設置好的向量地址獲取中斷向量,該中斷向量指向中斷服務子程序 (4)執行中斷服務子程序。
CPU執行用戶編寫的ISR。ISR以一條中斷返回指令結束,自動恢復步驟(3)中自動保存的寄存器值。
?? 注意:
?外部中斷只能發生在CPU退出復位后的至少3個周期后,否則無效;
?在硬件復位后,不論INTM位的設置和寄存器IER0、IER1的值如何,所有的中斷都被禁止,直到通過軟件初始化堆棧后才開放中斷。 ?
2 ?可屏蔽中斷
所有的可屏蔽中斷都是硬件中斷。無論硬件何時請求一個可屏蔽中斷,在一個中斷標志寄存器里就有相應的中斷標志置位。該標志一旦置位,相應的中斷還必須使能,否則不會得到處理。 當CPU在實時硬件仿真模式下暫停時,只能處理時間臨界中斷。 可屏蔽中斷標準處理流程: 1. 向CPU發送中斷請求。 2. 設置響應的IFR標志。CPU檢測到一個有效的可屏蔽中斷請求時,它設置并鎖上某個中斷標志寄存器的響應標志位,這個位保持鎖定,直到該中斷得到響應或者復位,才清楚 3. IER中斷使能?根據中斷使能寄存器是否使能,響應中斷。 4. INTM = 0?全局開放中斷,才響應 5. 跳轉到ISR服務程序, 6. 執行ISR服務程序 7, 返回。
3 不可屏蔽中斷
當CPU接收到一個不可屏蔽中斷請求時,立即無條件響應,并很快跳轉到相應的中斷服務子程序(ISR)C55x的不可屏蔽中斷有:
硬件中斷/RESET。如果引腳/RESET為低電平,則觸發了一個DSP硬件復位和一個中斷(迫使執行復位ISR)。
硬件中斷/NMI。如果引腳/NMI為低電平,則CPU必須執行相應的ISR。 /NMI提供了一種通用的無條件中斷DSP的硬件方法。
軟件中斷。
4 按鍵中斷
??? 按鍵中斷,屬于可屏蔽中斷,用戶自定義硬件中斷,當CPU響應按鍵后,檢查相關引腳中斷標記寄存器,若標志位為1,則響應該中斷。同時,清除中斷標志寄存器位.
5 c_int00
???? 當C環境被初始化時,啟動程序禁止中斷。?? 如果系統使用中斷,必須處理有關的中斷使能或屏蔽。
關于中斷的幾個要點:
中斷程序會執行任何其它函數執行的工作,包括訪問全局變量、為局部變量分配地址、調用其它函數。?? 需要處理任何特殊中斷屏蔽(通過IER0寄存器)。通過嵌入匯編語言語句可以使能或禁止中斷,也可以修改IER0寄存器而不會破壞C環境或C指針。
?? 中斷處理程序不能有參數,即使聲明了參數也會被忽略
???中斷處理程序不能被普通C代碼調用。 為了將中斷程序和中斷聯系起來,需要將分支程序放在合適的中斷向量中,通過.sect指令創建一個簡單的分支指令表就可以實現此操作。
?? 在匯編語言中,需要在中斷程序名前加下劃線,如_c_int00。
?? 分配堆棧到偶地址。
?? c_int00是系統復位中斷。當進入c_int00中斷時,運行時間堆棧并沒有被建立起來,因此不能為局部變量分配地址,也不能在運行時間堆棧中保存任何信息。 通過interrupt關鍵字可以用C函數直接處理中斷。
?interrupt關鍵字可以和定義為返回void并不含參數的函數一起使用。中斷函數體可以有局部變量,可以自由使用堆棧。
c_int00是C程序入口。這個名字被保存為系統重啟中斷。這個特殊的中斷程序初始化系統并調用了主函數。因為沒有調用者,所以c_int00不保存任何寄存器。????
例,
interrupt void isr()
{?????
?????? ...
}
?
中斷管理
??? 基于DSP/BIOS管理中的硬件中斷,DSP/BIOS為中斷提供了一個HWI調度程序,為ISR完成必要的開頭和結尾部分。如果不使用,則在調用任何DSP/BIOS對象的API之前,必須調用HWI_enter和HWI_exit匯編宏來完成ISR的開頭和結束。實際上,DSP/BIOS提供的調度程序,就包括這兩個宏。
為了正確響應硬件中斷,同時,也為了DSP/BIOS內核的穩定性,必須注意:
1 在一個硬件中斷ISR中,不要調用SWI_disable和SWI_enable。
2 在NMI(不可屏蔽)中斷中,不要調用硬件中斷使能/禁止函數。
3 當使用DSP/BIOS調度程序時,不要使用HWI_exit和HWI_enter匯編宏
4 中斷中,可以打開新中斷。
?
我們可以在中斷配置選項卡中,設置Interrupt Mask 來實現在DSP/BIOS調度程序執行前禁止某些中斷。
總結
- 上一篇: TMS320F28335之GPIO原理
- 下一篇: DSP F28335的SCI模块