靜網PWA視頻評論

VxWorks下龍芯3A中斷控制技術的研究

2023年10月29日

- txt下載

徐騫
摘 要: 中斷控制是嵌入式作業系統VxWorks正常運行的基礎,是其具有高實時性的保障。針對VxWorks系統下中斷控制驅動開發難度大、應用廣等特點,首次提出了VxWorks系統中斷控制驅動分層模型。基於該模型提出了VxWorks下中斷控制驅動軟體的設計方法,並基於該方法實現了VxWorks下國產龍芯3A處理器中斷控制驅動軟體的開發。最後提出一種優化龍芯3A中斷控制性能的方法,大大縮短了中斷響應時間,提高了系統的性能。
關鍵詞: 中斷控制; VxWorks; 龍芯3A; 驅動軟體
中圖分類號: TN876?34; TP311.1 文獻標識碼: A 文章編號: 1004?373X(2017)14?0036?04
Abstract: Interrupt control is the base of normal running of the embedded operating system VxWorks and is a safeguard of high real?time performance. A drive hierarchical model of interrupt control on VxWorks is proposed aiming at the characteristics that the drive development of interrupt control on the embedded operating system VxWorks has great difficulty and its wide application. According to this model, a design method of interrupt control drive software based on VxWorks is put forward. The interrupt control drive software of Loongson 3A have was developed successfully with the method. A method to optimize the Loongson 3A interrupt control performance is presented. It greatly shortens the interrupt response time, and improves the performance of the system.
Keywords: interrupt control; VxWorks; Loongson 3A; drive software
VxWorks作業系統是風河公司推出的一種嵌入式實時作業系統, 以其高性能、高可靠性、高實時性等特點成為實時作業系統中最具特色的系統之一。其廣泛地應用在通信、軍事、航空、航天等高端技術及實時性、擴展性要求極高的領域中[1]。龍芯系列處理器晶片是龍芯中科技術有限公司研發的具有自主智慧財產權的處理器晶片,產品包括龍芯1號、龍芯2號和龍芯3號三個系列[2]。龍芯3A處理器是龍芯3號處理器的第一款產品,主要面向高性能計算機、伺服器和高端桌面應用,是一款實現64位M地址S Ⅲ指令集的高性能四核處理器晶片,片內集成了HT控制器、PCI/PCIX等接口,最高工作主頻[3]可以達到1 GHz。VxWorks作為一個實時嵌入式作業系統,通常採用中斷的方式來滿足系統實時性的要求。因此,中斷控制驅動的實現對於VxWorks作業系統的開發是至關重要的[4]。本文在研究VxWorks系統中斷控制技術的基礎之上,描述了VxWorks下龍芯3A中斷控制驅動的設計方法和實現過程,並對其中斷控制性能進行了優化。
1 龍芯3A的中斷控制
龍芯3A的中斷通路示意圖如圖1所示。南橋的中斷控制器在接收到外部設備的中斷申請後,發出中斷請求,經過PCIE根控制器轉化後發送到HT總線上,然後被HT控制器得知,HT控制器根據接收到的中斷信息來設置自己的中斷狀態寄存器,之後按照既定的配置發出中斷信號至CPU的中斷路由配置模塊,最後按照中斷路由模塊的設置將中斷信號送到某個CPU核上[5]。
2 VxWorks下的中斷控制
2.1 中斷控制驅動分層模型
VxWorks下中斷控制有一個層次的劃分,一些中斷控制器的輸入是其他中斷控制器的輸出,因此可以將中斷控制驅動抽象為三層,具體情況如圖2所示。
圖2中,第一層為CPU指定的中斷控制驅動,與CPU的體系架構密切相關,主要包括CPU一級與中斷相關的配置,如中斷路由等;第二層中斷控制器直接與第一層CPU中斷路由模塊相連,並作為其中斷輸入,最常見的如8259中斷控制器[5];第三層中斷控制作為第二層的中斷輸入,一般與外部設備密切相關,主要實現了中斷服務程序的掛接和中斷的響應處理,如傳統的PCI設備中斷控制就屬於該層[6]。
2.2 中斷控制驅動設計方法
基於VxWorks下中斷控制驅動分層模型,本文提出了VxWorks下中斷控制驅動的設計方法,主要包括中斷路由配置、初始化中斷控制器、掛接中斷服務程序和中斷響應處理四個部分,具體流程如圖3所示。
3 龍芯3A中斷控制驅動的實現
根據VxWorks下中斷控制驅動的設計方法,可以將龍芯3A中斷控制驅動的實現主要分為四個步驟,配置中斷路由、初始化中斷控制器、掛接中斷程序以及中斷響應處理。
3.1 配置中斷路由
龍芯3A下通過配置中斷路由模塊來確定中斷信號最終分配到哪個CPU核上[7?8],中斷路由模塊示意圖如圖4所示。
圖4中,中斷路由配置模塊有32個外部中斷源,以統一方式進行管理。龍芯3A集成了4個處理器核,任意一個中斷源都可以通過軟體配置選擇期望中斷的目標處理器核,進一步中斷源可以選擇路由到處理器核4個中斷INT0~INT3中的任意一個,即圖4所示的CORE0~CORE3的地址0~地址3。在32個中斷源中,最重要的是與HT總線相關的中斷源,龍芯3A下絕大部分外部中斷都是通過HT中斷引腳輸入至CPU,通過設置相關的中斷路由寄存器可以對這些中斷源進行路由配置,部分相關代碼如下:
STATUS sysIntRouteSet()
{ /*將HT0相關中斷路由至CPU CORE0 INT1*/
M地址S_SB64 _IO_base_regs_addr(HT0_INT0_ADDR,0x21);
M地址S_SB64 _IO_base_regs_addr(HT0_INT1_ADDR,0x21);

/*將HT1相關中斷路由至CPU CORE0 INT1*/
M地址S_SB64 _IO_base_regs_addr(HT1_INT0_ADDR,0x21);
M地址S_SB64 _IO_base_regs_addr(HT1_INT1_ADDR,0x21);
…}
3.2 初始化中斷控制器
龍芯3A下,中斷控制器位於南橋上,默認配置為8259模式,初始化中斷控制器主要包括設置中斷控制器和使能中斷控制器兩個部分。
3.2.1 設置中斷控制器
龍芯3A中斷控制器可用的中斷輸入有8個,INTA#~
INTH#,輸出的中斷號為irq0~irq15,每個中斷輸入與輸出中斷號的映射關係可以通過設置相關寄存器來完成,如圖5所示。
圖5中,可以先往0xC00寫入一個值表示配置哪個中斷輸入,然後寫0xC01表示將中斷輸入映射至哪個irq號。例如要把INTC#對應的中斷號設置為irq6,則操作為:先往0xC00寫入2,再往0xC01寫入1即可。
3.2.2 使能中斷控制器
中斷配置寄存器都是以位的形式對相應的中斷線進行控制。中斷控制器使能的配置主要有三個寄存器:Intenset,Intenclr和Inten。Intenset設置中斷使能,Intenset寄存器寫1的位對應的中斷被使能;Intenclr清除中斷使能,Intenclr寄存器寫1的位對應的中斷被清除;Inten寄存器讀取當前各中斷使能的情況。
3.3 掛接中斷服務程序
VxWorks系統下,需要實現類函數func{vxbIntCtlrConnect}為硬體配置指定的中斷並搭接相應的中斷服務程序以及中斷輸入,該函數主要通過調用系統函數intCtrlISRAdd()完成相關工作[9]。龍芯3A中斷控制驅動中實現的類函數名為vxbMipsSbIntCtlrConnect,其部分代碼如下:
LOCAL STATUS vxbMipsSbIntCtlrConnect()
{ …
/* 獲取中斷輸入並確認其有效 */
if(ERROR == intCtlrPinFind(pDev,index,pIntCtlr,&isrHandle))
return (ERROR);
/*為指定的中斷分配中斷服務程序和參數*/
if (intCtlrISRAdd(&pVxbPMipsSbIntCtlrDrvCtrl?>isrHandle, inputPin,pIsr, pArg) != OK)
return (ERROR);
… }
3.4 中斷響應處理
龍芯3A處理中斷的流程,從外部中斷請求到內核軟體對中斷的處理,其過程都是一樣的,如圖6所示。
中斷髮生時,CPU會設置Cause寄存器的Excode域及相關的地址位[10]。進而進入軟體處理過程,軟體通過查詢Excode域來確定是哪一種類型的異常,並選擇使用何種異常處理例程。如果是外部硬體中斷,就會進入相應的中斷分發函數。中斷分發函數再根據Cause寄存器的地址位來進行一級中斷分發,然後再根據中斷號的位域來進行二次分發,最後執行具體的中斷操作處理程序[11]。
4 驅動測試與優化
4.1 驅動測試
基於龍芯3A的硬體平台,對中斷控制驅動進行測試,能夠成功運行VxWorks系統,如圖7所示。
4.2 驅動優化
在驅動開發的設置中斷控制器環節,默認配置情況下,龍芯3A平台的設備中斷輸入與中斷號的映射關係如表1所示。
從表1中可以看出,中斷號irq6對應的中斷輸入過於集中,即掛接在中斷輸入INTC上的設備過多,這樣會導致系統中斷響應的時間過長,從而影響系統的性能。可以在驅動軟體設置控制器的環節對其進行優化,將其中的USB設備包括OHCI和EHCI進行分流,將這些設備映射到其他中斷號上。修改後的軟體經過測試,系統的中斷響應時間大大縮短,性能顯著提升,測試結果如表2所示。
5 結 語
本文提出一種VxWorks系統中斷控制驅動分層模型,基於該模型給出了VxWorks下中斷控制驅動軟體的設計方法,並通過該方法實現了VxWorks下國產龍芯3A處理器中斷控制驅動軟體的開發。另外,本文還提出了一種優化VxWorks下龍芯3A中斷控制性能的方法,通過該方法可以大大縮短系統中斷響應時間,提高系統的性能。目前,VxWorks下龍芯3A中斷控制驅動軟體已成功應用於某通信系統項目中,在應用的過程中,驅動程序工作穩定,性能可靠,滿足實際應用的需求。
參考文獻
[1] 陳懷民,王哲,程鵬飛,等.VxWorks下設備驅動程序開發技術研究[J].現代電子技術,2015,38(10):38?41.
[2] HU Weiwu,ZHANG Fuxin,LI Zusong. Microarchitecture of the Godson?2 processor [J]. Journal of computer science and technology,2005, 20(2): 243?249.
[3] 中科院計算技術研究所.龍芯3A處理器數據手冊[M].北京:龍芯中科技術服務中心有限公司,2010.
[4] 王迪.基於X86體系結構VxWorksSMP調度和中斷機制研究與優化[D].長沙:國防科技大學,2009.
[5] 李祖松,許先超,胡偉武,等.龍芯2號處理器的同時多線程設計[J].計算機學報,2009,32(11):2265?2273.
[6] 徐立松,於淼,李佩玥,等.基於VxWorks的VME從板驅動設計與實現[J].現代電子技術,2013,36(6):79?82.
[7] 金浩,韓江洪,李陽銘.基於ARM的嵌入式系統中斷處理機制研究[J].現代電子技術,2005,28(22):1?3.
[8] 周啟平,張揚.VxWorks下設備驅動程序及BSP開發指南[M].北京:中國電力出版社,2004.
[9] 付月生,王麗.基於VxBus的驅動程序架構分析[J].計算技術與自動化,2012,31(2):98?102.
[10] Wind River. VxWorks device driver developer′s guide Vlolume2 [M]. US: Wind River, 2008.
[11] Wind River. VxWorks architecture supplement, 6.7 [M]. US: Wind River, 2008.

收藏

相關推薦

清純唯美圖片大全

字典網 - 試題庫 - 元問答 - 简体 - 頂部

Copyright © cnj8 All Rights Reserved.