1 S3C4480X中斷系統
圖1所示為S3C44BOX的中斷系統結構框圖。中斷控制器的任務是在片內差模電感外圍和片外中斷源組成的多重中斷發生時,經過優先級判斷、選擇其中一個中斷;通過IRQ或FIQ向ARM7內核發出IRQ或FIQ中斷請求,ARM7內核從中斷控制器中獲取中斷信息,然后對中斷進行處理,控制中斷設備的操作過程。
當ARM7內核接收到中斷控制器的中斷請求時會自動執行以下幾步操作,以實現中斷環境保護和程序跳轉:
①將程序狀態寄存器CPSR的內容保存到將要執行的中斷模式的程序狀態保存寄存器SPSR中,以實現對處理器當前狀0603電感態、中斷屏蔽位和各條件標志位的保存。
②設置當前CPSR中的相應位,屏蔽相應中斷并切換處理器模式。
③將引起中斷指令的下一條指令的地址(斷點地址)保存到中斷模式的子程序鏈接寄存器LR中,使中斷服務程序執行完后能正確返回原程序。
④給程序計數器PC強制賦值,使程序從相應的向量地址開始執行中斷服務程序。
當中斷服務程序執行完后,需要執行以下幾步操作從中斷服務程序中返回:
①從中斷模式堆棧中恢復所有修改過的通用寄存器(RO~R12)。
②將中斷模式SPSR寄存器的內容復制到CPSR中,恢復被中斷模式程序的工作狀態。
③將LR的內容賦給PC,使PC返回到相應的指令處。
④清除CPSR中的中斷禁止標志位。
在中斷返回的過程中,②和③需要同時完成。
2 μC/OS-II中斷處理過程
μC/OS-II提供了函數OSIntEnter()和OSIntExit(),用于中斷處理。函數OSIntEnter()通知操作系統進入中斷服務程序,函數OSIntExit()在中斷服務程序返回時進行相應的處理。μC/OS-II的中斷響應過程如圖2所示。進入中斷服務程序時,首先將全部CPU寄存器存入當前任務棧,然后調用函數OSIntEnter(),或者將中斷嵌套層數計數器,即全局變量OSIntNesting直接加1,通知μC/OS-II進入中斷服務程序,執行用戶代碼進行中斷服務。中斷服務完成后調用函數OSIntExit(),將變量
OSIntNesting減1。當OSIntNesting減到O時,所有中斷執行完畢,此時μC/OS-II要判斷是否有優先級較高的任務被中斷服務程序喚醒。如果有優先級高的任務進入就緒態,μC/OS-II就返回到優先級高的任務執行;否則,返回到當前任務繼續執行。
通過對μC/OS-II中斷處理過程的分析可知,μC/OS-II只是提供繞行電感了簡單的中斷管理機制差模電感器,對于中斷進入時的中斷環境保護、中斷退出時的中斷環境恢復、中斷嵌套處理和堆棧分配等問題沒有給出具體的處理方法。另外,對于不同的處理器,其中斷處理的方法也不一樣,所以在不同的處理器上移植μC/OS-II后,要根據處理器的具體特點,進行中斷系統的設計。
3 中斷系統設計
在中斷系統設計過程中,所有的IRQ中斷納入操作系統的管理范圍,由操作系統統一管理;FIQ中斷獨立于操作系統之外,不受操作系統管理。因此,中斷系統的設計包括兩部分:IRQ中斷和FIQ中斷。
3.1 中斷系統結構
S3C44BOX提供了IRQ和FIQ兩種中斷方式。ARM中設計FIQ中斷是為了在快速處理的場合使用,但是進入操作系統進行管理的任何中斷都需做一些同樣的前期準備工作和后期結束工作,包括為被中一體電感器斷的任務保存環境等。如果把FIQ中斷納入操作系統進行管理,則FIQ中斷的優勢并不明顯,因此,在中斷系統的設計過程中沒有將FIQ中斷納入操作系統的管理范圍,而是由用戶單獨進行FIQ中斷服務程序的設計。
大功率電感廠家 |大電流電感工廠