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