64+的中斷系統和以往的不同,中斷是基于事件的。整個硬件CPU接收15個中斷,但中斷源可以支持最多128個。64+將中斷源視為事件"Event",128個事件可以分別通過配置連接到15個CPU中斷。而128個事件每連續32個可以合并到四個固定的事件中,即Event0(對應事件號0-31)、Event1(對應事件號32-63)、Event2(對應事件號64-95)、Event3(對應事件號96-127)(實際最大有效中斷源為124個)。這樣可以通過數量有限的CPU中斷來管理大量的中斷源,使用靈活。
DSP/BIOS默認將Event0-3分別對應到HWI_INT7-10四個中斷號。TI驅動通過注冊Event到這四個事件,進而對應到相應中斷。在中斷HWI_INT7-10服務函數中再去判斷具體是哪個事件觸發的中斷。
另外還有幾個中斷是系統硬件復位中斷、NMI中斷、預保留中斷及仿真通訊中斷。HWI_INT4-6、HWI_INT13、HWI_INT15這5個中斷是未使用中斷。用戶增加中斷服務的話,可以將事件號對應到這5個中斷來實現。
以T1高32位定時中斷為例,介紹一下DM6437應用中如何在DSP/BIOS操作系統中實現硬件中斷。首先用戶需要將T1配置為雙32位定時器,T1高32位定時器中斷服務函數為 T1HIsr()。將事件對應到中斷HWI_INT5。
1 在DSP/BIOS圖形配置界面下打開"Scheduling"->"HWI-Hardware Interrupu Service"。
2 下拉表中有15個中斷。觀察各中斷使用情況。右鍵點擊"HWI_INT5",彈出下拉菜單中選"Properties"進入中斷屬性編輯欄。在"General"欄中,"interrpu selection number"項填入事件號"7"(6437數據手冊中有中斷源對應的事件號)。"function"項填入中斷服務函數名"_T1HIsr"(需在C語言編寫的函數前加下劃線)。然后點"應用","確定"即可退出。
注:一些人說還要在"Dispatcher"中勾選"Use Dispatcher"前的復選框。那是復合事件Event0-3才需要的,所以HWI_INT7-10四個中斷里的"Use Dispatcher"需要勾上。如果用戶定義的新中斷不是使用復合事件而是使用單一事件觸發的話不需要勾選。但勾選的話不會影響使用。因為新中斷未使用Event0-3。
3 在應用程序中使能中斷。如"C64_enableIER( 1 << 5 )" 使能中斷HWI_INT5。
4 編寫中斷服務函數"void T1HIsr()"。
注。仿真器通訊中斷可能對新中斷有影響,有可能導致中斷表現不正常。可以在"release"下編譯,以減少仿真引起的大量中斷。
|