版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
精品文檔-下載后可編輯基于CPCI的伺服卡的DMA和中斷研究-基礎(chǔ)電子摘要:為簡(jiǎn)化當(dāng)前光電設(shè)備電子學(xué)系統(tǒng)的結(jié)構(gòu),本文提出了基于CPCI總線,以DSP和FPGA為控制的伺服控制卡結(jié)構(gòu),來(lái)取代原來(lái)的控制子系統(tǒng);在Windows2000下,利用DriverStudio為其開(kāi)發(fā)的WDM驅(qū)動(dòng)程序,采用DMA結(jié)合中斷的數(shù)據(jù)傳輸方式,使其與上位機(jī)的通信速率在突發(fā)模式下能達(dá)到26.3Mbytes/s,滿足了系統(tǒng)對(duì)伺服控制器的實(shí)時(shí)性要求。
引言
在當(dāng)前光電子學(xué)系統(tǒng)中,以PC104作為伺服控制分系統(tǒng),體積龐大,不便于系統(tǒng)管理。開(kāi)發(fā)具有伺服控制能力的處理卡,用一塊板卡替代原來(lái)的系統(tǒng),能簡(jiǎn)化系統(tǒng)結(jié)構(gòu),提高系統(tǒng)的集成度,使電子學(xué)系統(tǒng)終成為一個(gè)高度集成的控制平臺(tái)。
CPCI(CompactPCI)總線在PCI總線基礎(chǔ)之上,采用了歐洲卡結(jié)構(gòu),拋棄金手指式互連方式,改用2mm密度的針孔連接器,并具有可熱插拔性,使其具有了更高的可靠性和開(kāi)放性,并且能適應(yīng)惡劣的工作環(huán)境,在工業(yè)控制、航空航天等領(lǐng)域得到廣泛應(yīng)用。自行開(kāi)發(fā)的伺服控制卡基于CPCI總線,以DSP作為卡上控制CPU,與FPGA結(jié)合實(shí)現(xiàn)控制。本論文以該伺服控制卡為依托,在概述其硬件平臺(tái)結(jié)構(gòu)的基礎(chǔ)上,介紹了在Windows2000下CPCI設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)與開(kāi)發(fā),重點(diǎn)闡述了橋接芯片PCI9054的DMA數(shù)據(jù)傳輸實(shí)現(xiàn)及中斷處理機(jī)制。
1.伺服控制卡的系統(tǒng)結(jié)構(gòu)與硬件實(shí)現(xiàn)方案
伺服控制卡以TI公司的TMS320F2812DSP作為處理器,與FPGA結(jié)合來(lái)實(shí)現(xiàn)整個(gè)板卡的控制功能,通過(guò)CPCI總線完成與上位PC機(jī)的通信,其系統(tǒng)功能框圖如圖1所示:
圖1伺服控制卡硬件結(jié)構(gòu)圖
FPGA選用Altera公司的EPF10K30A,它內(nèi)嵌1536Byte的RAM,此RAM為主機(jī)與DSP共享,用于上位機(jī)與DSP之間的高速數(shù)據(jù)緩沖,F(xiàn)PGA負(fù)責(zé)接收上位機(jī)傳遞的命令和參數(shù)等數(shù)據(jù),經(jīng)處理后發(fā)送給DSP進(jìn)行相應(yīng)的控制操作,同時(shí)反饋信息給上位機(jī)。TMS32F2812的主要任務(wù)就是完成復(fù)雜的伺服控制算法,特別是位置控制和速度控制。
FPGA通過(guò)2812的外部中斷XINT1和XINT2來(lái)觸發(fā)2812接收控制命令和參數(shù),2812接收到命令后,根據(jù)自身定義的工作協(xié)議進(jìn)入相應(yīng)的工作狀態(tài)。
系統(tǒng)設(shè)計(jì)中采用PLX公司的PCI9054作為總線接口芯片,實(shí)現(xiàn)CPCI局部總線與FPGA的通信。PCI9054采用C模式,在該模式下,PCI的數(shù)據(jù)線與地址線是非復(fù)用的,設(shè)計(jì)時(shí)只需關(guān)注9054的本地端總線。
2.WDM驅(qū)動(dòng)程序設(shè)計(jì)
在Windows環(huán)境下,位于用戶態(tài)的應(yīng)用程序不能之間訪問(wèn)硬件資源,而要通過(guò)執(zhí)行核心態(tài)的驅(qū)動(dòng)程序來(lái)間接完成對(duì)硬件資源的訪問(wèn),因此,對(duì)于上位機(jī)上的應(yīng)用程序,要對(duì)伺服控制卡進(jìn)行訪問(wèn),必須要為其開(kāi)發(fā)驅(qū)動(dòng)程序。
WDM驅(qū)動(dòng)程序是一種Pnp驅(qū)動(dòng)程序,它能夠?qū)崿F(xiàn)Windows98與Windows2000、WindowsXP之間的源代碼級(jí)兼容。Windows2000性能穩(wěn)定,在調(diào)試自行開(kāi)發(fā)的板卡時(shí),仍然是的操作系統(tǒng)。在Windows2000中,所有對(duì)驅(qū)動(dòng)程序的I/O請(qǐng)求都轉(zhuǎn)化為I/O請(qǐng)求包(IRP)來(lái)表示,IRP是I/O管理器在響應(yīng)I/O請(qǐng)求時(shí)從非分頁(yè)系統(tǒng)內(nèi)存中分配的一個(gè)可變大小的數(shù)據(jù)結(jié)構(gòu),I/O管理器負(fù)責(zé)產(chǎn)生代表I/O操作的IRP,并將IRP傳至正確的設(shè)備驅(qū)動(dòng)程序,并通過(guò)分層的驅(qū)動(dòng)程序傳遞給物理設(shè)備。設(shè)備驅(qū)動(dòng)程序則接收IRP,執(zhí)行相應(yīng)的操作,完成后再將IRP傳送回I/O管理器,表示I/O操作的完成或者通過(guò)I/O管理器將其傳遞給其他的驅(qū)動(dòng)程序進(jìn)行進(jìn)一步的處理。
3.伺服控制卡的WDM驅(qū)動(dòng)程序設(shè)計(jì)與實(shí)現(xiàn)
驅(qū)動(dòng)程序的開(kāi)發(fā)環(huán)境常用的有微軟的DDK、Jungo的WinDriver和Numega的DriverStudio。DriverStudio把DDK封裝成類(lèi),包含完善的代碼生成和調(diào)試工具,并且提供對(duì)WDM驅(qū)動(dòng)的完全支持,利用它開(kāi)發(fā)的態(tài)驅(qū)動(dòng)程序運(yùn)行效率也很高。本系統(tǒng)在VC環(huán)境下利用DriverStudio開(kāi)發(fā)驅(qū)動(dòng)程序。
接口芯片PCI9054支持主模式、從模式和DMA模式三種數(shù)據(jù)傳輸方式。DMA傳輸不通過(guò)處理器,直接進(jìn)行數(shù)據(jù)交換,可以節(jié)省CPU資源;并且DMA模式還支持CPCI總線與本地總線之間的高效突發(fā)。
3.1DMA數(shù)據(jù)傳輸實(shí)現(xiàn)
PCI9054集成了兩個(gè)互相獨(dú)立的DMA通道,每一個(gè)通道由一個(gè)DMA控制器和一個(gè)專(zhuān)用雙向FIFO組成,都支持塊DMA和分散/集中DMA操作,這里選用DMA通道0,采用塊DMA方式實(shí)現(xiàn)傳輸。在DriverWorks中提供了三個(gè)類(lèi)來(lái)實(shí)現(xiàn)DMA傳輸,分別是KDmaAdapter類(lèi)、KDmaTransfer類(lèi)和KCommonDmaBuffer類(lèi)。
3.1.1.DMA適配器
對(duì)于DMA傳輸,驅(qū)動(dòng)程序需要?jiǎng)?chuàng)建一個(gè)DMA適配器,來(lái)表明一個(gè)DMA通道的特性和提供串行化訪問(wèn)的服務(wù)。KDmaAdapter類(lèi)實(shí)現(xiàn)對(duì)DMA適配器的操作。在它的初始化函數(shù)Initialize(PDEVICE_DESCRIPTIONpDesc,PDEVICE_OBJECTpPdo)中個(gè)參數(shù)是一個(gè)DEVICE_DESCRIPTION結(jié)構(gòu)的指針,這個(gè)參數(shù)用于對(duì)DMA通道的屬性進(jìn)行設(shè)置。
3.1.2.DMA控制器
采用DMA方式時(shí),CPU要放棄對(duì)系統(tǒng)總線的使用權(quán),主存儲(chǔ)器和外部設(shè)備是被控制的對(duì)象,它們之間沒(méi)有相互控制的能力,需要利用DMA控制器來(lái)代替CPU完成控制功能。
在用DriverWorks開(kāi)發(fā)驅(qū)動(dòng)時(shí),KDmaTransfer類(lèi)用于控制DMA的傳輸;它可以啟動(dòng)一個(gè)DMA傳輸,指定DMA傳輸?shù)姆较?,DMA傳輸數(shù)據(jù)緩沖區(qū)的物理地址和要傳輸?shù)淖止?jié)數(shù)。KDmaTransfer類(lèi)的Initiate()函數(shù)用于初始化一個(gè)KDmaTransfer對(duì)象;在成功初始化一個(gè)KDmaTransfer類(lèi)對(duì)象后,將會(huì)調(diào)用DMA準(zhǔn)備就緒回調(diào)例程O(píng)nDmaReady,在該例程中獲取要傳輸?shù)膬?nèi)存的地址和字節(jié)數(shù),并調(diào)用StartDMA例程開(kāi)始DMA傳輸。
與中斷結(jié)合的DMA傳輸在傳輸結(jié)束后會(huì)再次調(diào)用KDmaTransfer類(lèi)的Continue()函數(shù)發(fā)起下的DMA傳輸操作,直到傳輸完成。
3.1.3.DMA公共緩沖區(qū)
在DriverWorks中KCommonDmaBuffer類(lèi)實(shí)現(xiàn)對(duì)公用緩沖區(qū)的操作。在實(shí)際使用時(shí),聲明一個(gè)KCommonDmaBuffer類(lèi)對(duì)象并初始化。在傳輸結(jié)束后,釋放公共緩沖區(qū),以防止內(nèi)存丟失。
3.1.4.寄存器設(shè)置
PCI9054在DMA模式下傳輸,驅(qū)動(dòng)程序要通過(guò)I/O指令設(shè)置DMA控制器內(nèi)部的寄存器以實(shí)現(xiàn)兩總線間的數(shù)據(jù)傳送,需要設(shè)置的內(nèi)部寄存器及其具體功能如下表1所示:
3.2驅(qū)動(dòng)開(kāi)發(fā)中的中斷處理機(jī)制及實(shí)現(xiàn)
本系統(tǒng)的驅(qū)動(dòng)程序采用塊DMA與中斷結(jié)合的方式來(lái)實(shí)現(xiàn)主機(jī)與伺服控制卡之間的數(shù)據(jù)傳輸。以讀操作為例,每次DMA傳輸完后,都會(huì)產(chǎn)生一個(gè)DMA中斷,中斷處理程序應(yīng)答中斷,并獲取公共緩沖區(qū)中的數(shù)據(jù),通知主機(jī)端有數(shù)據(jù)到達(dá);可以看出,高效的DMA處理依賴(lài)于高效的中斷處理過(guò)程。
中斷處理完成CPU與I/O設(shè)備之間的信息交換,在為硬件板卡開(kāi)發(fā)驅(qū)動(dòng)程序時(shí)需要為中斷配置相應(yīng)的驅(qū)動(dòng)處理。在處理中斷之前要對(duì)中斷資源進(jìn)行配置,首先定義并初始化一個(gè)中斷對(duì)象,在初始化階段,提取IRP資源中的中斷級(jí)別、中斷模式、中斷向量、共享模式等信息。利用上面獲得的參數(shù)來(lái)連接中斷,連接中斷操作的主要目的是注冊(cè)設(shè)備驅(qū)動(dòng)的中斷服務(wù)例程(ISR),以便在中斷發(fā)生后中斷服務(wù)例程能夠被調(diào)用。在DriverWorks中用KInterrupt類(lèi)實(shí)現(xiàn)對(duì)硬件中斷的處理。
status=m_Irq.InitializeAndConnect(pResListTranslated,LinkTo(Isr_Irq),this)
當(dāng)硬件發(fā)生中斷時(shí),硬件抽象層(HAL)把中斷級(jí)別(IRQL)提升到合適的中斷級(jí)別,然后調(diào)用中斷服務(wù)例程(ISR)。CPCI總線是中斷共享的,因此,ISR首先確定是哪一個(gè)設(shè)備發(fā)生了中斷,如果不是當(dāng)前設(shè)備的中斷,立即返回FALSE,以便HAL把中斷發(fā)送給其他設(shè)備的驅(qū)動(dòng)程序。如果是當(dāng)前設(shè)備的中斷,則在清除該中斷,并做相應(yīng)的處理。中斷處理的整個(gè)過(guò)程如下圖2所示:
ISR執(zhí)行在高于DISPATCH_LEVEL的IRQL上,它凍結(jié)了其CPU上所有低于或等于該IRQL上的其他活動(dòng),為了提高系統(tǒng)性能,ISR例程應(yīng)該盡可能快的完成;此外,ISR中使用的所有代碼和數(shù)據(jù)必須存在于非分頁(yè)內(nèi)存中,能調(diào)用的內(nèi)核模式函數(shù)也十分有限。
圖2:中斷處理流程圖
Windows2000提供了延遲過(guò)程調(diào)用(DPC)機(jī)制來(lái)解決這個(gè)問(wèn)題,ISR決定當(dāng)前請(qǐng)求的完成并請(qǐng)求一個(gè)DPC,之后,內(nèi)核在DISPATCH_LEVEL級(jí)上調(diào)用這個(gè)DPC例程。當(dāng)有當(dāng)前設(shè)備的中斷到來(lái)時(shí),把一個(gè)DPC插入到DPC隊(duì)列中。實(shí)現(xiàn)代碼如下:
m_DpcFor_Irq.Setup(LinkTo(DpcFor_Irq),this);//創(chuàng)建一個(gè)DPCm_DpcFor_Irq.Request(NULL,NULL)//把一個(gè)DPC插入到DPC隊(duì)列等待執(zhí)行
4.應(yīng)用程序與驅(qū)動(dòng)程序的通信
4.1通信的實(shí)現(xiàn)策略
應(yīng)用程序采用Win32事件通知的方式與驅(qū)動(dòng)程序進(jìn)行通信:應(yīng)用程序調(diào)用API函數(shù)CreatFile打開(kāi)設(shè)備,調(diào)用CreateEvent創(chuàng)建事件句柄hEvent并置為無(wú)信號(hào)態(tài),把hEvent作為函數(shù)DeviceIoControl的參數(shù)傳遞給驅(qū)動(dòng)程序,同時(shí)調(diào)用CreateThread創(chuàng)建等待線程;WDM驅(qū)動(dòng)程序接收事件句柄hEven,初始化KEvent類(lèi)對(duì)象m_hEvent,當(dāng)中斷發(fā)生時(shí),在DPC中執(zhí)行m_hEvent-Set(),將事件設(shè)置為信號(hào)態(tài),喚醒應(yīng)用程序中的等待線程,然后調(diào)用DeviceIoControl完成數(shù)據(jù)傳輸。
4.2數(shù)據(jù)傳輸速率測(cè)量
在實(shí)際測(cè)量時(shí),采用了硬件測(cè)量法,應(yīng)用程序不斷向DSP處理卡發(fā)送數(shù)據(jù)/接收數(shù)據(jù),利用示波器來(lái)觀測(cè)BLAST#和ADS#信號(hào)的變化周期,得出每組數(shù)據(jù)的傳輸時(shí)間。該DSP卡本地端總線為8位,在DMA模式下,測(cè)得的發(fā)送/接收時(shí)的測(cè)量結(jié)果如下表2所示:
從以上結(jié)果可以看出,無(wú)限突發(fā)DMA模式傳輸速率,可達(dá)26.3Mbyte/s,若本地端總線為32位,則數(shù)據(jù)傳輸速率可以達(dá)到26.3*4=105.2Mbyte/s,接近32位PCI總線的極限傳輸速率133Mbyte/s,能夠滿足大部分高速數(shù)據(jù)傳輸要求。
5.結(jié)束語(yǔ)
自行開(kāi)發(fā)的伺服控制卡,基于高速的CPCI總線,以DSP作為卡上處理器,以FPGA實(shí)現(xiàn)邏輯處理,能夠作為一個(gè)獨(dú)立的單元替代原來(lái)的工控機(jī)子系統(tǒng),大大簡(jiǎn)化了當(dāng)前光電子學(xué)系統(tǒng)結(jié)構(gòu);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度棉紗行業(yè)質(zhì)量標(biāo)準(zhǔn)制定與實(shí)施合同4篇
- 2025版年會(huì)現(xiàn)場(chǎng)攝影攝像服務(wù)合同范本4篇
- 二零二五年度棉花病蟲(chóng)害防治與防治藥物供應(yīng)合同4篇
- 二零二五年度新能源汽車(chē)動(dòng)力電池研發(fā)合作合同
- 2025年度農(nóng)家樂(lè)景區(qū)旅游咨詢與導(dǎo)覽服務(wù)合同協(xié)議
- 二零二五年度美容院美容設(shè)備維護(hù)保養(yǎng)及備件供應(yīng)合同4篇
- 二零二五年度美甲店互聯(lián)網(wǎng)營(yíng)銷(xiāo)與電商平臺(tái)合作合同4篇
- 二零二五年度南寧市體育場(chǎng)館設(shè)施租賃合同及賽事組織協(xié)議3篇
- 2025年度個(gè)人二手車(chē)居間銷(xiāo)售合同示范文本2篇
- 二零二五年帳篷租賃及活動(dòng)策劃服務(wù)合同3篇
- 完整版秸稈炭化成型綜合利用項(xiàng)目可行性研究報(bào)告
- 油氣行業(yè)人才需求預(yù)測(cè)-洞察分析
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
- (2024)河南省公務(wù)員考試《行測(cè)》真題及答案解析
- 2025年河北省單招語(yǔ)文模擬測(cè)試二(原卷版)
- 工作計(jì)劃 2025年度醫(yī)院工作計(jì)劃
- 高一化學(xué)《活潑的金屬單質(zhì)-鈉》分層練習(xí)含答案解析
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評(píng)定規(guī)程
- 2024年內(nèi)蒙古中考英語(yǔ)試卷五套合卷附答案
- 2024年電工(高級(jí))證考試題庫(kù)及答案
- 2024年全國(guó)各地中考試題分類(lèi)匯編:古詩(shī)詞閱讀
評(píng)論
0/150
提交評(píng)論