楊 帥,席志紅
(哈爾濱工程大學(xué) 信息與通信工程學(xué)院,黑龍江 哈爾濱 150001)
基于VxWorks的Compact PCI總線中斷機(jī)制研究
楊 帥,席志紅
(哈爾濱工程大學(xué) 信息與通信工程學(xué)院,黑龍江 哈爾濱 150001)
Compact PCI總線具有熱插拔的特性,而使得CPU訪問(wèn)擴(kuò)展設(shè)備的機(jī)制與非熱插拔系統(tǒng)有較大不同,尤其是中斷機(jī)制較為復(fù)雜,研發(fā)人員不僅需深入了解硬件中斷結(jié)構(gòu),更需要掌握PCI設(shè)備驅(qū)動(dòng)程序及中斷服務(wù)的實(shí)現(xiàn)方法。本文針對(duì)中斷的軟硬件內(nèi)容進(jìn)行了分析研究,以設(shè)計(jì)的Compact PCI設(shè)備卡為例,討論了利用中斷方式和CPU運(yùn)行的VxWorks操作系統(tǒng)進(jìn)行數(shù)據(jù)通信的程序設(shè)計(jì)要點(diǎn),從底層全面分析了Compact PCI中斷處理機(jī)制,旨在為開發(fā)人員提供理論指導(dǎo)和編程思想。
Compact PCI;中斷;VxWorks;PCI9030
Compact PCI是PICMG提出的一種基于PICMG2.0規(guī)范的總線接口標(biāo)準(zhǔn),在完全兼容PCI總線的基礎(chǔ)上,Compact PCI總線采用歐卡標(biāo)準(zhǔn),使其結(jié)構(gòu)更加堅(jiān)固,且具有較好的散熱性和抗震性。連接方式由傳統(tǒng)的IPC金手指改為2 mm密度真空連接器,也使氣密性和防腐性進(jìn)一步提高。Compact PCI總線更加優(yōu)越的性能使其廣泛應(yīng)用于航空、醫(yī)療和科學(xué)研究等領(lǐng)域。
然而,隨著Compact PCI總線性能的不斷提高,其結(jié)構(gòu)變得更加復(fù)雜,接口電路要求更高,這使得開發(fā)人員的研究也面臨著更多問(wèn)題,尤其是Compact PCI中斷的處理,其是CPU與外設(shè)完成數(shù)據(jù)交互的重要手段,中斷處理的好壞,直接影響著系統(tǒng)性能。文中針對(duì)Compact PCI中斷機(jī)制進(jìn)行了分析研究,以VxWorks操作系統(tǒng)和X86架構(gòu)PC機(jī)為軟硬件平臺(tái),選用PLX公司生產(chǎn)的PCI9030作為Compact PCI板卡總線接口芯片,從PCI中斷硬件組成結(jié)構(gòu)到軟件的中斷服務(wù)程序給予了詳細(xì)分析,實(shí)驗(yàn)分析驗(yàn)證了研究成果的正確性。
Compact PCI中斷流程圖如圖1所示[1]。
圖1 Compact PCI中斷流程圖
中斷可分為以下4個(gè)步驟:(1)本地事件發(fā)生,觸發(fā)中斷引腳LINTi1,通過(guò)設(shè)置PCI9030內(nèi)部中斷控制狀態(tài)寄存器使其有效,中斷輸出引腳INTA#有效,產(chǎn)生PCI中斷。(2)上電時(shí),POST(Power On Self Test)軟件進(jìn)行初始化,并根據(jù)系統(tǒng)資源使用情況對(duì)PCI設(shè)備進(jìn)行配置,包括分配I/O地址、存儲(chǔ)器地址、分配中斷并將中斷線與中斷控制器未使用的一個(gè)IRQi引腳相連,在PCI9030配置空間寫入配置信息。(3)POST軟件對(duì)PCI設(shè)備進(jìn)行配置后,載入VxWorks操作系統(tǒng),由VxWorks進(jìn)行接后續(xù)控制。(4)若CPU運(yùn)行的VxWorks開中斷,則響應(yīng)中斷,進(jìn)入中斷服務(wù)程序執(zhí)行相應(yīng)處理工作。通過(guò)了解和掌握以下3方面內(nèi)容,可實(shí)現(xiàn)系統(tǒng)中斷:1)了解X86架構(gòu)PC機(jī)的PCI中斷結(jié)構(gòu)。2)掌握PCI9030配置空間及其中斷機(jī)制。3)掌握VxWorks下PCI設(shè)備驅(qū)動(dòng)程序及其中斷程序的設(shè)計(jì)要點(diǎn)。
PCI中斷結(jié)構(gòu)如圖2所示[2]。
圖2 PCI中斷結(jié)構(gòu)
由圖可知PCI中斷結(jié)構(gòu)由可編程中斷路由器和中斷控制器兩部分構(gòu)成,PCI總線上有INTA#~I(xiàn)NTD#4個(gè)中斷請(qǐng)求引腳,對(duì)于單功能PCI設(shè)備僅可使用INTA#,而多功能PCI設(shè)備則沒(méi)有限制要求。對(duì)于X86架構(gòu)的PC機(jī),主板研發(fā)人員通過(guò)可編程路由器將PCI插槽的各個(gè)中斷引腳與兩個(gè)8259A組成的中斷控制器中(IRQ0~I(xiàn)RQ15)未被使用的引腳相連[3]。系統(tǒng)上電后,POST軟件進(jìn)行初始化和系統(tǒng)配置,寫中斷路由信息到中斷線寄存器,在PCI設(shè)備配置空間中,該寄存器的值表明PCI4個(gè)中斷引腳與中斷控制器哪個(gè)引腳相連。當(dāng)9030的LINTi1觸發(fā)中斷后,9030的INTA#向中斷控制器提出中斷請(qǐng)求,通過(guò)相應(yīng)的判斷與處理,向運(yùn)行VxWorks的CPU提出中斷請(qǐng)求。CPU接收中斷請(qǐng)求,響應(yīng)中斷后進(jìn)入中斷服務(wù)程序執(zhí)行后續(xù)處理工作。
3.1 PCI設(shè)備配置空間
每個(gè)PCI設(shè)備都對(duì)應(yīng)一個(gè)配置空間,配置空間包含的頭標(biāo)區(qū)前16 Byte對(duì)于所有PCI設(shè)備的定義均相同,后48 Byte的定義根據(jù)不同功能設(shè)備布局也不同[4-5],配置空間頭標(biāo)區(qū)如圖3所示。
圖3 配置空間頭標(biāo)區(qū)定義
PCI設(shè)備的硬件及其初始化軟件信息的交換通過(guò)配置空間得以完成。PCI設(shè)備通過(guò)它可向軟件反映其狀態(tài)和要求,而軟件則可通過(guò)其對(duì)PCI設(shè)備進(jìn)行配置、控制等操作。上電時(shí),POST軟件進(jìn)行初始化和系統(tǒng)配置,查看PC機(jī)中是否安裝PCI設(shè)備以及設(shè)備所需空間等信息,然后根據(jù)系統(tǒng)資源的實(shí)際情況為其自動(dòng)分配。當(dāng)PC機(jī)運(yùn)行的VxWorks系統(tǒng)要訪問(wèn)設(shè)備的存儲(chǔ)器空間和I/O空間時(shí),只需通過(guò)相應(yīng)的基地址加上偏移地址即可實(shí)現(xiàn)訪問(wèn)。
3.2 PCI9030的配置空間
PCI9030配置空間的頭標(biāo)區(qū)與圖3所示相同,中斷線寄存器在偏移地址0x3C處,系統(tǒng)自動(dòng)配置其值,以表示9030的INTA#和中斷控制器的哪個(gè)輸入引腳相連,通過(guò)查詢?cè)摷拇嫫骺色@得中斷號(hào)[5]。中斷引腳寄存器在偏移地址0x3D處,其值表明使用PCI設(shè)備的哪個(gè)中斷引腳,文中9030為單功能設(shè)備,僅使用INTA#,故其值為1時(shí),初始化軟件才會(huì)將INTA#引接到系統(tǒng)中斷控制器的某個(gè)IRQi上,INTB#~I(xiàn)NTD#對(duì)應(yīng)值為2、3、4。
PCI9030還有用于對(duì)自身進(jìn)行配置和管理的本地配置空間。如圖3所示,通過(guò)獲取本地配置寄存器映射到存儲(chǔ)空間的基地址,加上偏移地址即可實(shí)現(xiàn)對(duì)9030本地配置寄存器相應(yīng)位置進(jìn)行讀寫。如本地配置空間中偏移地址0x4C處為中斷控制/狀態(tài)寄存器INTCSR,通過(guò)配置INTCSR才可使能9030中斷。
3.3 PCI9030中斷機(jī)制
PCI9030的INTCSR格式如圖4所示,其中13~31位保留位,位2和位5為只讀位,其余位均可讀寫[6]。
圖4 INTCSR格式
位0/3:置1使能LINTi1/2中斷,否則禁止LINTi1/2中斷;
位1/4:設(shè)置LINT1/2電平觸發(fā)方式,置0低電平觸發(fā),否則高電平觸發(fā);
位2/5:只讀位,“1”表示中斷源LINT1/2有效,否則無(wú)效;
位6:置1使能PCI中斷,否則禁止中斷;
位7:置1產(chǎn)生軟中斷;
位8/9:置0表示電平觸發(fā),否則上升沿觸發(fā);
位10/11:置1清除LINT1/2邊沿觸發(fā)方式產(chǎn)生的中斷;
位12:置1使能ISA模式。
由以上可知,為產(chǎn)生PCI中斷,除了配置中斷源LINTi1引腳有效外,還需使能PCI中斷,這些均要通過(guò)VxWorks程序的軟件部分實(shí)現(xiàn)。
首先在Wind River Workbench 3.0軟件環(huán)境下編寫PCI設(shè)備驅(qū)動(dòng)程序,然后在VxWorks操作系統(tǒng)下通過(guò)PCI設(shè)備驅(qū)動(dòng)程序訪問(wèn)硬件資源,其中包括PCI中斷的訪問(wèn)及處理。
驅(qū)動(dòng)程序包括初始化、接口函數(shù)和中斷服務(wù)程序ISR這3部分。初始化主要完成硬件初始化,為硬件分配所需系統(tǒng)資源。接口函數(shù)主要根據(jù)設(shè)備需求,添加注冊(cè)設(shè)備的創(chuàng)建、刪除、讀寫、打開、控制函數(shù)[7-8]。中斷服務(wù)程序主要是響應(yīng)外部中斷,為保證VxWorks操作系統(tǒng)的實(shí)時(shí)性,中斷處理操作應(yīng)該在最短時(shí)間內(nèi)完成。在ISR中不能調(diào)用引起系統(tǒng)阻塞的函數(shù),如semTake()或I/O操作函數(shù)。
獲得PCI設(shè)備的廠商號(hào)和設(shè)備號(hào)是訪問(wèn)該設(shè)備的前提,文中選用可在Windows XP平臺(tái)下運(yùn)行的編寫驅(qū)動(dòng)程序的WinDriver軟件獲取,可直觀地看到PCI設(shè)備的廠商號(hào)為0x10b5和設(shè)備號(hào)為0x30c1。通過(guò)VxWorks提供的pciFindDevice()函數(shù)能找到指定設(shè)備并獲取設(shè)備相關(guān)信息。在X86架構(gòu)下的PC機(jī),BIOS可自動(dòng)配置內(nèi)存基地址和I/O基地址,通過(guò)調(diào)用pciConfigInLong()讀設(shè)備基地址寄存器,進(jìn)行存儲(chǔ)器空間映射。通過(guò)調(diào)用pciConfigInByte()得到設(shè)備中斷號(hào)[9-10]。文中PCI設(shè)備沒(méi)有要訪問(wèn)的I/O空間,所以沒(méi)有涉及到I/O空間的映射和操作。
通過(guò)寫入9030中INTCSR的值,使能PCI中斷以及使能LINTi1中斷輸入,設(shè)置該引腳為電平觸發(fā),低電平有效。
圖5為PCI中斷服務(wù)實(shí)現(xiàn)流程圖,在正確完成以上操作后,整個(gè)系統(tǒng)的PCI中斷得以正確運(yùn)行。
圖5 PCI中斷服務(wù)實(shí)現(xiàn)流程圖
如圖6所示,在PC機(jī)運(yùn)行的Windows XP系統(tǒng)下通過(guò)WinDriver軟件查看PCI設(shè)備的廠商號(hào)0x10B5、設(shè)備號(hào)0x30C1、系統(tǒng)分配的中斷號(hào)0xA、中斷線寄存器的值0x1、PCI基地址0起始地址為0xFE9FFC00和PCI基地址2起始地址為0xFE9FC000。
圖6 PCI設(shè)備配置信息
VxWorks操作系統(tǒng)運(yùn)行時(shí)顯示的中斷提示信息如圖7所示。
圖7 VxWorks運(yùn)行時(shí)中斷提示信息
圖中提示信息“the CPCI Board is detected”用于表示VxWorks發(fā)現(xiàn)板卡并初始化完成。BaseAddress[0]為0xfe9ffc00、BaseAddress[2]為0xfe9fc000、“interrupt num is 0xa”即中斷號(hào)為0xa,這與圖6獲取的信息完全符合。demo函數(shù)用于注冊(cè)添加接口函數(shù)和中斷服務(wù)函數(shù)ISR,“succeed in connecting to the ISR”表示ISR添加完成。“interrupt:acknowledging interrupt”和“interrupt:semGive(semint_id)”為在中斷服務(wù)函數(shù)中通過(guò)logMsg函數(shù)打印的提示信息,其中兩次出現(xiàn)的“interrupt:”為VxWorks系統(tǒng)中斷提供的字符,而并非直接輸入的提示符。以上實(shí)驗(yàn)證明,整個(gè)中斷系統(tǒng)實(shí)現(xiàn)正確。
文中從X86架構(gòu)PC機(jī)硬件和VxWorks軟件相結(jié)合的角度分析了基于Compact PCI總線的中斷處理機(jī)制,給出了VxWorks下中斷處理程序的編程要點(diǎn),且通過(guò)實(shí)驗(yàn)部分驗(yàn)證了設(shè)計(jì)的正確性。
[1] 馬鳴錦,趙秋霞,曾光裕.高性能個(gè)人計(jì)算機(jī)硬件結(jié)構(gòu)及接口[M].北京:國(guó)防工業(yè)出版社,2001.
[2] 胡剛,石亞偉.PCI的中斷處理技術(shù)[J].計(jì)算機(jī) 自動(dòng)測(cè)量與控制,2001,9(6):55-56.
[3] 周啟平,張揚(yáng).VxWorks下設(shè)備驅(qū)動(dòng)程序及 BSP開發(fā)指南[M].北京:中國(guó)電力出版社,2004.
[4] 李貴山,陳金鵬.PCI局部總線及其應(yīng)[M].西安:西安電子科技大學(xué)出版社,2003.
[5] 卞紅雨,曹明明,桑恩方.VxWorks下PCI總線設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)[J].聲學(xué)與電子工程,2005(2):42-44.
[6] PLX Technology,Inc.PCI9030 data book version1.4[EB/OL].(2002-05)[2013-06-11]http://www.plxtech.com.
[7] 陳智育,溫彥軍,陳琪.VxWorks程序開發(fā)實(shí)踐[M].北京:人民郵電出版社,2004.
[8] 程敬原.VxWorks軟件開發(fā)項(xiàng)目實(shí)例完全解析[M].北京:中國(guó)電力出版社,2005.
[9] 周啟平,張楊.VxWorks程序員速查手冊(cè)[M].北京:機(jī)械工業(yè)出版社,2005.
[10]張楊,于銀濤.VxWorks內(nèi)核、設(shè)備驅(qū)動(dòng)與BSP開發(fā)詳解[M].北京:人民郵電出版社,2009.
Research on the VxWorks-based Compact PCI Interruption Mechanism
YANG Shuai,XI Zhihong
(School of Information and Communication Engineering,Harbin Engineering University,Harbin 150001,China)
The compact PCI is a type of standard computer bus with the characteristics of hot-plugging.This result in the fact that the CPU accesses the extend device in a different way from the non-hot-plugging system,especially that the mechanism of interruption is very complex.Researchers not only need to understand the hardware interruption structure well,but also master the drivers of the PCI device and the implementation of the interruption service.This article analyzes both the software and hardware of interruption,and takes Compact PCI board as an example in the discussion of the programming essentials of communicating information with the CPU which runs VxWorks via interruption,the purpose of which is to have a thorough understanding of the Compact PCI-based interruption mechanism,and to provide theoretical guidance and programming ideas for developers.
Compact PCI;interrupt;VxWorks;PCI9030
2014- 08- 31
楊帥(1988—),男,碩士研究生。研究方向:信息系統(tǒng)與網(wǎng)絡(luò)通信技術(shù)。E-mail:ys_0206@163.com。席志紅(1965—),女,教授,博士生導(dǎo)師。研究方向:圖像處理與應(yīng)用,視覺(jué)目標(biāo)探測(cè)與識(shí)別,信號(hào)檢測(cè)與估計(jì),DSP和ARM嵌入式系統(tǒng)開發(fā)等。
10.16180/j.cnki.issn1007-7820.2015.04.036
TP336;TN91
A
1007-7820(2015)04-135-04