孫豐祥,許學芳,程玉偉
( 國電南京自動化股份有限公司, 南京 210061)
?
Spartan6芯片μC/OS-II的可搶占式嵌套中斷控制方法
孫豐祥,許學芳,程玉偉
( 國電南京自動化股份有限公司, 南京 210061)
介紹了Spartan6芯片搭載MicroBlaze軟核的硬件平臺,以及集成了μC/OS-II操作系統的軟件平臺;給出了在此軟硬件平臺上的可搶占、可嵌套的中斷機制的實現方法;靈活地運用面向底層硬件代碼與操作系統代碼之間的參數傳遞,協調了中斷處理與任務調度之間的關系。闡述了方案的原理,給出了程序流程圖;通過試驗,驗證了可搶占、可嵌套的中斷機制的正確性與可行性。
Spartan6;μC/OS-II;中斷搶占;中斷嵌套
Xilinx公司推出了32位軟核MicroBlaze,用來替代片上的微控制器,可以有效地縮小PCB板的面積和器件數量,降低整個系統的成本。MicroBlaze采用 32位哈佛RISC架構,32位獨立的地址總線和數據總線。Spartan6 FPGA為Xilinx公司的低成本、低功耗FPGA。第6代Spartan系列含最多150 000個邏輯單元、高級儲存器支持、250 MHz DSP Slice和3.125 Gbps低功耗收發器。本設計中首次采用Spartan6芯片搭載MicroBlaze軟核作為硬件平臺應用于保護裝置中,在此硬件平臺上開發適用于對穩定性要求苛刻的電力自動化技術產品。
Spartan6芯片搭載MicroBlaze軟核的保護裝置的硬件平臺開發中[1],需求分析中明確要求,硬件平臺需要提供定時器中斷、串口中斷、CAN總線中斷、以太網接口中斷以及A/D采樣中斷等多個中斷信號。基于Spartan6芯片開發的平臺首次在保護裝置中應用;Spartan6芯片是Xilinx公司的一款FPGA芯片,此款芯片資源豐富,性能可靠,具有PFGA所特有的可靈活配置的特性,各項指標滿足在非電量保護裝置中應用。但是芯片原有的中斷控制器資源與所選用μC/OS-II操作系統配合,不支持中斷間的搶占與嵌套[2];如果不同優先級的中斷同時被觸發,原有的中斷機制無法區分中斷優先級的高低。雖然原有中斷控制器上面可以設置多中斷的優先級,但是匯編代碼中卻缺乏相應的處理機制,使之前設置的中斷優先級失去意義;應用過程中只能盡量地縮短中斷服務程序代碼,力爭把中斷服務程序時間縮到最短;但是實際運用中仍然無法避免多個中斷被同時觸發的情況發生,嚴重時可能會導致系統死機。因此有必要開發一種可搶占的并且可嵌套的中斷處理機制,解決上述問題。
對于本硬件平臺在多中斷同時響應時不能區分中斷優先級高低的問題,通過硬件工程修改設置、改變參數等常規方法都無法解決。由于本硬件平臺移植了μC/OS-II操作系統,因此只能在μC/OS-II操作系統關于中斷處理的相關底層代碼中加入我們自主研發的中斷控制方法,來解決上述問題。根據μC/OS-II操作系統的特點,μC/OS-II操作系統每次是在中斷退出時通過調用中斷級的任務調度函數,從而實現多任務的切換。因此需要在中斷嵌套時禁止任務切換,保證系統運行穩定。Spartan6芯片的軟核Microblaze中的中斷控制器提供了硬件上的中斷優先級設置,但是驅動程序以及μC/OS-II中并沒有區分優先級,使硬件設置的優先級失去作用[3]。因此本方案中通過查表獲得當前運行任務最高的優先級后,屏蔽所有低優先級任務。每次清除上述最高優先級中斷后立刻開放此中斷,保證中斷可以嵌套。
在主函數中首先初始化中斷向量表;當中斷被觸發后跳入匯編代碼,跳入匯編程序后首先進行壓棧處理進行保護現場操作;同時考慮到μC/OS-II中的任務調度是在中斷退出時執行的,因此在中斷嵌套的過程中不進行任務調度;所以此處采用計數器統計進入中斷次數;如果進入中斷,計數器加1,如退出中斷計數器減1;通過計數器的值作為判斷條件,判斷是否允許任務調度,從而確保中斷嵌套時禁止任務調度。隨后讀取中斷使能寄存器與中斷向量寄存器的值,獲取當前被觸發的中斷中的最高的優先級。通過查表處理屏蔽比當前中斷優先級低的所有中斷,并開放比當前中斷優先級高的所有中斷,從而實現在多中斷同時被觸發時,優先級高的首先得到執行,并且可搶占其他正在運行的低優先級的中斷;同時,允許比當前中斷優先級高的中斷對當前中斷的搶占。然后清除當前中斷的標志位,使其重新開放,實現中斷的可嵌套;然后跳轉出匯編程序,將當前最高優先級的中斷參數傳遞到C代碼中的中斷處理函數以及操作系統中的任務調度函數,C代碼獲得此最高優先級中斷參數后,會進入相應的中斷處理函數;同時μC/OS-II操作系統進行任務切換并重新調用匯編程序,恢復中斷現場;C代碼會清除中斷為下一次進入中斷做好準備。 軟件流程框圖如圖1所示。

圖1 軟件流程圖
在硬件平臺中設置定時器每1 ms發生一次中斷,定時器的中斷優先級較高。串口不定時地接收到數據,接收到一次數據發生一次串口接收中斷,定時器中斷優先級高于串口接收中斷優先級。當中斷被觸發后相應的中斷信號的電平由低變高,中斷處理函數完成中斷相關處理后,中斷信號由高電平回復為低電平。將定時器中斷信號與串口接收中斷信號分別引出,并接示波器觀察。圖2中,示波器通道1是定時器中斷波形,通道2是串口接收中斷波形。如圖1所示,定時器中斷先被觸發,串口中斷后被觸發,CPU處理完定時器中斷后才去處理串口中斷的處理程序。圖3中,示波器通道1是定時器中斷波形,通道2是串口接收中斷波形。如圖2所示,串口接收中斷先被觸發,定時器中斷后被觸發,CPU中止串口中斷處理程序而轉入定時器中斷的處理程序,定時器中斷處理程序執行結束后,繼續執行串口中斷的處理程序。

圖2 低優先級中斷不能搶占高優先級中斷示意圖
由圖2和圖3可以明確得出結論,低優先級中斷不能打斷高優先級中斷,需要高優先級中斷處理結束后,才處理低優先級中斷;反之高優先級中斷可以打斷低優先級中斷。也就是說中斷的可搶占功能得到了充分的驗證。由于示波器無法明確捕捉到中斷嵌套的實現,因此在中斷程序代碼中加標志位計數,進入中斷時,標志位加1,退出時標志位減1;并將標志位的數值打印出來,以檢測進入同一中斷的的次數。打印信息證明,中斷嵌套可以正確穩定地實現,實際運用中結合工程實際情況,兼顧系統穩定與運行效率,把嵌套次數設置為3,既能滿足現場運行的需要又能防止中斷嵌套占用過多的資源。

圖3 高優先級中斷可以搶占低優先級中斷示意圖

[1] 何賓, 王瑜. 基于Xilinx MicroBlaze多核嵌入式系統的設計[J]. 電子設計工程,2011,19(13):141-144.
[2] 劉艷軍. 嵌人式操作系統μC/OS-II面向數控系統的改進[J].現代電子技術,2011,34(12):83-86.
[3] 劉釗,杜永鋒,許知博. 基于Xilinx-Spartan6 FPGA的MultiBoot設計的實現[J].電子科技,2012,25(3):28-32.
孫豐祥(工程師),從事繼電保護平臺研究。
◆ USB掛起指示。
◆ 時鐘輸出。
◆ LED變化顯示數據傳輸。
◆ 脈沖或邊沿觸發計數。
◆ 遠程喚醒。
在評估你的USB橋接器芯片設置時,要選擇可以提供完整橋接器產品組合解決方案的半導體供應商,他們支持幾乎所有主流的通信接口。確保選擇的固定功能的通信橋接器具有免晶振USB操作、片內調壓器、片內可編程存儲器和小尺寸封裝選項。為下一個嵌入式應用選擇合適的橋接芯片最終能夠為你節省大量的開發工作和費用,并且有助于縮短產品設計上市時間。
表1對比了10種采用常見通信接口的Silicon Labs橋接器產品的特征參數。
表1 常見通信橋接器


(責任編輯:楊迪娜 收稿日期:2014-04-18)
Interrupt Preemption and Nesting Method Based on Spartan6 and μC/OS-II
Sun Fengxiang, Xu Xuefang, Cheng Yuwei
(Guodian Nanjing Automation Co., Ltd., Nanjing 210061,China)
The hardware Platform based on MicroBlaze was introduced, and the software Platform of the μC/OS-II was integrated in the hardware platform .The method of designing the interrupt which can be preempted and nested was provided;parameters were transferred between the underlying code and the operating system code flexibly. The relationship of interrupt processing and task scheduling was coordinated; the theory of the scheme was recounted, and the software program flow chart was provideding, validating the rightness and feasibility of the theory.
Spartan6;μC/OS-II;interrupt preemption;interrupt nesting
TP399
A
珍
2013-12-17)