www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于PCI Express總線的雷達(dá)數(shù)據(jù)記錄器驅(qū)動(dòng)程序開(kāi)發(fā)

1 引言
在數(shù)據(jù)采集系統(tǒng)中,大量的數(shù)據(jù)必須通過(guò)總線傳到計(jì)算機(jī)內(nèi)存中,傳統(tǒng)的PCI總線越來(lái)越不能滿(mǎn)足人們對(duì)帶寬增長(zhǎng)的需要。為解決這一矛盾,PC行業(yè)協(xié)會(huì)和外設(shè)廠商一起發(fā)布了PCI Express總線[1]規(guī)范,并且于2004年在標(biāo)準(zhǔn)臺(tái)式機(jī)上得到應(yīng)用。該技術(shù)可以有效地提高設(shè)備至計(jì)算機(jī)內(nèi)存的數(shù)據(jù)傳輸速率。相對(duì)于PCI總線,它最大的特點(diǎn)是實(shí)現(xiàn)點(diǎn)到點(diǎn)的數(shù)據(jù)傳輸[2],每個(gè)設(shè)備有自己專(zhuān)用的雙向數(shù)據(jù)通道,數(shù)據(jù)以包的形式串行傳輸,每個(gè)通道具有單方向250MB/S的數(shù)據(jù)傳輸速度。多個(gè)通道可以組合在一起形成x1(單通道)、x2、x4、x8、x12、x16和x32的信道以提高帶寬。
在合成孔徑雷達(dá)系統(tǒng)中,大量的回波數(shù)據(jù)需要實(shí)時(shí)記錄下來(lái)以便進(jìn)行事后成像處理。而PCI Express總線高帶寬的優(yōu)點(diǎn)可以很好的滿(mǎn)足高速雷達(dá)數(shù)據(jù)記錄的需要,而要充分發(fā)揮PCI Express總線的作用,驅(qū)動(dòng)程序設(shè)計(jì)是關(guān)鍵。本文介紹了在Windows XP系統(tǒng)下,雷達(dá)數(shù)據(jù)記錄器中PCI Express總線接口芯片PEX8311的驅(qū)動(dòng)程序開(kāi)發(fā)
2 雷達(dá)數(shù)據(jù)記錄器介紹
雷達(dá)數(shù)據(jù)記錄器由一臺(tái)服務(wù)器計(jì)算機(jī)、PCI Express接口卡、SCSI卡和SCSI硬盤(pán)四部分組成,其中PCI Express接口卡的軟硬件自行設(shè)計(jì),其它部分采用標(biāo)準(zhǔn)的外購(gòu)件。雷達(dá)數(shù)據(jù)
通過(guò)PCI Express接口卡傳入計(jì)算機(jī)內(nèi)存,計(jì)算機(jī)再將數(shù)據(jù)通過(guò)SCSI卡寫(xiě)在SCSI硬盤(pán)上。
PCI Express接口卡采用美國(guó)PLX公司推出的PEX8311作為本地總線和PCI Express總線的接口。PEX8311[3]是一款x1的PCI Express接口芯片,本地端總線頻率最高可達(dá)66MHZ,數(shù)據(jù)位寬32bit。PEX8311含有4KB的配置空間,其中前256字節(jié)是和PCI設(shè)備功能上是兼容的,其余是PCI Express擴(kuò)展配置空間。本文采用PEX8311的引腳LINTi#接收外部中斷信號(hào),使用DMA通道0進(jìn)行塊DMA方式讀數(shù)據(jù)。
接口卡的結(jié)構(gòu)框圖如圖1所示,利用差分轉(zhuǎn)換芯片先將外部差分信號(hào)轉(zhuǎn)換成單端信號(hào),兩塊FIFO的“乒乓”傳輸以實(shí)現(xiàn)數(shù)據(jù)的連續(xù)傳輸,單個(gè)FIFO容量為512KB。在CPLD的控制下,兩塊FIFO的數(shù)據(jù)輪流通過(guò)PEX8311的DMA通道0傳入計(jì)算機(jī)。
 500)this.style.width=500;" border="0" />
圖1  PCI Express接口卡框圖
具體工作過(guò)程:當(dāng)其中一個(gè)FIFO被寫(xiě)滿(mǎn)數(shù)據(jù)后,在CPLD控制下,外部數(shù)據(jù)繼續(xù)寫(xiě)入另一個(gè)FIFO,同時(shí),CPLD使PEX8311的LINTi#輸入為低電平,這會(huì)產(chǎn)生一個(gè)LINT#中斷,驅(qū)動(dòng)程序響應(yīng)中斷并啟動(dòng)DMA傳輸讀取FIFO中的數(shù)據(jù)到DMA緩存中。讀完后,驅(qū)動(dòng)程序通知應(yīng)用程序?qū)MA緩存的數(shù)據(jù)寫(xiě)到SCSI盤(pán)上。
3  WDM驅(qū)動(dòng)程序概述
WDM是一種分層驅(qū)動(dòng)程序模型[4],如圖2所示。系統(tǒng)啟動(dòng)時(shí),總線驅(qū)動(dòng)程序枚舉總線上的設(shè)備,并為每個(gè)設(shè)備創(chuàng)建一個(gè)物理設(shè)備對(duì)象(PDO);然后PnP管理器根據(jù)注冊(cè)表中的信息查找與這個(gè)PDO相關(guān)的過(guò)濾驅(qū)動(dòng)程序和功能驅(qū)動(dòng)程序,建立的過(guò)濾設(shè)備對(duì)象(FIDO)
 500)this.style.width=500;" border="0" />
圖2 WDM分層驅(qū)動(dòng)模型
和功能設(shè)備對(duì)象(FDO),最終,系統(tǒng)完成設(shè)備驅(qū)動(dòng)的裝入過(guò)程。設(shè)備擴(kuò)展對(duì)象是與設(shè)備對(duì)象關(guān)聯(lián)的另一種重要的數(shù)據(jù)結(jié)構(gòu),它是一塊未分頁(yè)的內(nèi)存,I/O管理器自動(dòng)把它分配給已建立的任何設(shè)備擴(kuò)展對(duì)象,可以用它來(lái)保存與設(shè)備關(guān)聯(lián)的任何信息,驅(qū)動(dòng)程序需要時(shí),只要在設(shè)備擴(kuò)展對(duì)象中取出這些資源使用即可。
IRP全名為IO Request Packet,即I/O請(qǐng)求包,是系統(tǒng)創(chuàng)建的一種數(shù)據(jù)結(jié)構(gòu)。當(dāng)應(yīng)用程序?qū)υO(shè)備操作時(shí),I/O管理器根據(jù)具體的請(qǐng)求建立相應(yīng)的IRP,IRP先被I/O管理器發(fā)送到最上層的驅(qū)動(dòng)程序處理,然后依次傳遞給下層的驅(qū)動(dòng)程序處理。每層驅(qū)動(dòng)程序可以不作任何事情而直接將IRP向下傳遞,也可以直接將該IRP設(shè)置為完成狀態(tài)。
4 PEX8311驅(qū)動(dòng)程序設(shè)計(jì)
微軟提供的驅(qū)動(dòng)程序開(kāi)發(fā)軟件包DDK(Device Driver Kits)提供了用于驅(qū)動(dòng)程序開(kāi)發(fā)的資源文件、編譯連接程序、開(kāi)發(fā)技術(shù)文檔等。第三方開(kāi)發(fā)工具有NuMega公司DriverStudio和Jungo公司的WinDriver,它們對(duì)DDK進(jìn)行了封裝,方便用戶(hù)進(jìn)行驅(qū)動(dòng)開(kāi)發(fā)。但效率方面不如DDK??紤]到雷達(dá)數(shù)據(jù)記錄的數(shù)據(jù)率較高,所以本文采用DDK開(kāi)發(fā)PEX8311的驅(qū)動(dòng)程序??偩€驅(qū)動(dòng)程序由系統(tǒng)提供,過(guò)濾驅(qū)動(dòng)程序是可選的。所以本文只設(shè)計(jì)了PEX8311的功能驅(qū)動(dòng)程序(以下簡(jiǎn)稱(chēng)驅(qū)動(dòng)程序),它主要由驅(qū)動(dòng)程序初始化、數(shù)據(jù)傳輸初始化、數(shù)據(jù)傳輸模塊三部分組成。其基本思想是:應(yīng)用程序與驅(qū)動(dòng)程序共享DMA緩存,當(dāng)驅(qū)動(dòng)程序接收到一個(gè)LINT#中斷時(shí),啟動(dòng)DMA讀取FIFO中的數(shù)據(jù)存在DMA緩存中,每次讀完后,驅(qū)動(dòng)程序通過(guò)事件通知應(yīng)用程序取出DMA緩存中的數(shù)據(jù)存在SCSI硬盤(pán)上。
4.1 驅(qū)動(dòng)程序初始化
DriverEntry是驅(qū)動(dòng)程序的入口函數(shù),負(fù)責(zé)初始化驅(qū)動(dòng)程序?qū)ο蟆O到y(tǒng)啟動(dòng)時(shí),如果檢測(cè)到PEX8311的存在,I/O管理器會(huì)建立一個(gè)未初始化的驅(qū)動(dòng)程序?qū)ο蟛⑺鳛橐粋€(gè)參數(shù)傳給DriverEntry。DriverEntry把驅(qū)動(dòng)程序其它例程的函數(shù)指針裝入到驅(qū)動(dòng)程序?qū)ο罄锩?。?dāng)一個(gè)IRP被發(fā)送到設(shè)備時(shí),I/O管理器使用該IRP關(guān)聯(lián)的驅(qū)動(dòng)程序?qū)ο笳业秸_的驅(qū)動(dòng)程序例程處理。初始化的主要函數(shù)指針有:AddDevice、DriverUnload、DispatchCreate、DispatchClose、DispatchIoControl、DispatchCleanup、DispatchPnp、DispatchPower。[!--empirenews.page--]
AddDevice是WDM驅(qū)動(dòng)程序另一個(gè)入口函數(shù),當(dāng)DriverEntry初始化成功后,PnP管理器會(huì)調(diào)用AddDevice創(chuàng)建一個(gè)FDO,然后把總線驅(qū)動(dòng)程序創(chuàng)建的PDO連接到FDO上,同時(shí)還會(huì)創(chuàng)建一個(gè)設(shè)備擴(kuò)展對(duì)象。本文在設(shè)備擴(kuò)展對(duì)象中保存了DMA緩存地址、設(shè)備寄存器地址和一些標(biāo)志位。AddDevice還寄存了一個(gè)設(shè)備接口,以便應(yīng)用程序打開(kāi)設(shè)備。
接著,PnP管理器向驅(qū)動(dòng)程序堆棧發(fā)送一個(gè)PnP啟動(dòng)消息,它是一個(gè)主功能代碼為IRP_MN_START_DEVICE的IRP。驅(qū)動(dòng)程序并不處理該IRP,只是將它傳遞給總線驅(qū)動(dòng)程序處理并等待該IRP的處理結(jié)果,總線驅(qū)動(dòng)程序?qū)@得的設(shè)備資源(中斷、DMA通道、內(nèi)存和I/O資源等)保存在IRP中并通知驅(qū)動(dòng)程序取出這些信息保存在設(shè)備擴(kuò)展對(duì)象中。于是,驅(qū)動(dòng)程序就可以根據(jù)這些信息對(duì)PEX8311進(jìn)行操作了。
4.2 數(shù)據(jù)傳輸初始化
數(shù)據(jù)傳輸初始化是在DispatchIoControl派遣例程中實(shí)現(xiàn)的。功能驅(qū)動(dòng)程序正常裝入后,應(yīng)用程序就可以發(fā)出DeviceIoControl請(qǐng)求初始化數(shù)據(jù)傳輸。初始化包括接收用戶(hù)程序傳來(lái)的事件句柄、分配DMA緩存、設(shè)置中斷寄存器。
驅(qū)動(dòng)程序采用事件方式與應(yīng)用程序進(jìn)行通信。應(yīng)用程序中用CreateEvent創(chuàng)建事件hEvent,再調(diào)用DeviceIoControl函數(shù)將它傳給驅(qū)動(dòng)程序,驅(qū)動(dòng)程序響應(yīng)該請(qǐng)求,從輸入緩沖區(qū)中取出這個(gè)事件句柄存在設(shè)備擴(kuò)展對(duì)象中。當(dāng)驅(qū)動(dòng)程序?qū)⒃撌录O(shè)置為信號(hào)狀態(tài)時(shí),應(yīng)用程序就可以得到通知。
驅(qū)動(dòng)程序通過(guò)函數(shù)AllocateCommonBuffer分配的一段非分頁(yè)、連續(xù)的DMA緩存,用于緩存從PEX8311傳來(lái)的雷達(dá)數(shù)據(jù)。為了使應(yīng)用程序能夠直接訪問(wèn)DMA緩存,本文通過(guò)函數(shù)MmMapLockedPages把這段內(nèi)存映射到應(yīng)用程序。每次DMA讀取512KB數(shù)據(jù),本文分配了60段512KB的連續(xù)DMA緩存,驅(qū)動(dòng)程序依次將每次讀取的數(shù)據(jù)存在這些連續(xù)的緩存中,而應(yīng)用程序按相同的順序取出數(shù)據(jù)存在SCSI硬盤(pán)上。即使應(yīng)用程序在下次LINT#中斷到來(lái)時(shí)還沒(méi)及時(shí)將緩存中數(shù)據(jù)寫(xiě)到SCSI硬盤(pán)上,驅(qū)動(dòng)程序也會(huì)啟動(dòng)DMA將新數(shù)據(jù)存在下一段緩存中,不會(huì)丟失數(shù)據(jù)。
驅(qū)動(dòng)程序設(shè)置PEX8311的中斷寄存器,允許LINT#中斷和PCI中斷。允許LINT#中斷可以使LINT#信號(hào)處于可用狀態(tài),而允許PCI中斷可以將LINT#中斷和DMA中斷路由到計(jì)算機(jī)系統(tǒng),操作系統(tǒng)就能調(diào)用中斷服務(wù)程序響應(yīng)中斷。
4.3 數(shù)據(jù)傳輸模塊
數(shù)據(jù)傳輸模塊主要包括中斷服務(wù)例程(ISR)和DPC例程(DpcForIrq)。前者響應(yīng)LINT#中斷和DMA中斷,后者啟動(dòng)DMA傳輸并在數(shù)據(jù)傳完后通知應(yīng)用程序讀取DMA緩存中的數(shù)據(jù)。因?yàn)镮SR運(yùn)行于較高的硬件中斷級(jí)別[5](DISPATCH_LEVEL),它會(huì)阻塞所有的進(jìn)程,而DpcForIrq運(yùn)行在軟件中斷級(jí)別,不會(huì)阻塞所有進(jìn)程,所以應(yīng)該盡量減少I(mǎi)SR的運(yùn)行時(shí)間,而在DpcForIrq中完成耗時(shí)的操作。本文在ISR中只判斷中斷類(lèi)型,ISR的流程如圖3所示:
 500)this.style.width=500;" border="0" />
圖3  ISR流程圖
在調(diào)試中發(fā)現(xiàn):當(dāng)PEX8311的LINT#中斷信號(hào)有效時(shí)間超過(guò)8us時(shí),會(huì)造成死機(jī)。但系統(tǒng)繁忙時(shí),計(jì)算機(jī)會(huì)因?yàn)橹袛嘤行r(shí)間太短而響應(yīng)不了中斷。為解決這一問(wèn)題,使LINT#的有效時(shí)間加長(zhǎng)到32us,驅(qū)動(dòng)程序在剛進(jìn)入ISR時(shí),先禁止PCI中斷,LINT#中斷便不能傳到計(jì)算機(jī)系統(tǒng),也就不會(huì)造成死機(jī),ISR也有足夠的時(shí)間讀中斷寄存器的值進(jìn)行判斷。
數(shù)據(jù)傳輸初始化工作完成后,當(dāng)有LINT#中斷時(shí),系統(tǒng)調(diào)用ISR。ISR中先判斷是LINT#中斷,于是將標(biāo)志m_LINT設(shè)置為true,接著調(diào)用IoRequestDpc ()將一個(gè)DPC對(duì)象放入DPC隊(duì)列中,最后,中斷服務(wù)程序退出。
然后,系統(tǒng)取出DPC對(duì)象,在DISPATCH_LEVEL的級(jí)別下執(zhí)行DpcForIrq。因?yàn)閙_LINT為true,說(shuō)明是FIFO存滿(mǎn)數(shù)據(jù),DpcForIrq設(shè)置DMA參數(shù)并啟動(dòng)DMA讀數(shù)據(jù)。然后DpcForIrq退出。當(dāng)PEX8311完成DMA傳輸后會(huì)產(chǎn)生DMA中斷,中斷服務(wù)程序按相同的方式執(zhí)行,此時(shí)m_LINT被設(shè)置為false,說(shuō)明是PEX8311完成DMA傳輸而產(chǎn)生的DMA中斷,驅(qū)動(dòng)程序在DpcFor_Irq中用事件通知應(yīng)用程序讀取DMA緩存中的數(shù)據(jù)寫(xiě)到SCSI硬盤(pán)上。如果應(yīng)用程序不退出,驅(qū)動(dòng)程序會(huì)一直按上述方式循環(huán)運(yùn)行。當(dāng)應(yīng)用程序退出時(shí),驅(qū)動(dòng)程序關(guān)閉中斷并釋放DMA緩存。
4.4 驅(qū)動(dòng)程序調(diào)試
本文采用Microsoft隨DDK一起發(fā)布的調(diào)試工具WinDbg調(diào)試驅(qū)動(dòng)程序。WinDbg是一種內(nèi)核模式和用戶(hù)模式調(diào)試器,可以用來(lái)分析故障轉(zhuǎn)儲(chǔ)文件和執(zhí)行驅(qū)動(dòng)程序代碼。調(diào)試需要兩臺(tái)計(jì)算機(jī):目標(biāo)機(jī)(雷達(dá)數(shù)據(jù)記錄器)和主機(jī)(運(yùn)行Windbg的機(jī)器),它們用串口線連接,主機(jī)控制和監(jiān)視目標(biāo)機(jī)上的活動(dòng)。設(shè)置好主機(jī)和目標(biāo)機(jī)后,通過(guò)WinDbg的命令窗口可以設(shè)置斷點(diǎn)、觀察調(diào)試輸出信息或分析目標(biāo)機(jī)藍(lán)屏后產(chǎn)生的故障轉(zhuǎn)儲(chǔ)文件。
測(cè)試時(shí):外部中斷頻率可以提高到200Hz以上,每次中斷讀取512KB數(shù)據(jù)。通過(guò)分析,測(cè)試數(shù)據(jù)完全正確。經(jīng)反復(fù)測(cè)試,記錄器穩(wěn)定記錄速度可達(dá)100MB/S以上。
由于只采用了兩個(gè)SCSI硬盤(pán)以及系統(tǒng)運(yùn)行效率的限制,數(shù)據(jù)記錄速度沒(méi)有達(dá)到PEX8311的理論傳輸速度。若增加SCSI硬盤(pán)數(shù)量和升級(jí)硬件,記錄速度還有很大提升空間。
5 總結(jié)
本文詳細(xì)的介紹了基于PCI Express總線的雷達(dá)數(shù)據(jù)記錄器驅(qū)動(dòng)程序的開(kāi)發(fā)。本文創(chuàng)新點(diǎn)為:針對(duì)雷達(dá)數(shù)據(jù)記錄器和PEX8311的特點(diǎn)設(shè)計(jì)了高效的驅(qū)動(dòng)程序,它具有易操作、移植性強(qiáng)的優(yōu)點(diǎn)。該驅(qū)動(dòng)程序已成功地應(yīng)用于某雷達(dá)原始數(shù)據(jù)記錄器中。
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

上海2022年9月20日 /美通社/ -- 近日,在長(zhǎng)江之歌學(xué)術(shù)周功能學(xué)與影像學(xué)高峰論壇上,波士頓科學(xué)血管內(nèi)超聲系統(tǒng)Polaris(以下簡(jiǎn)稱(chēng)"Polaris")巡回上市會(huì)正式啟動(dòng)。這是繼實(shí)現(xiàn)國(guó)產(chǎn)化之后...

關(guān)鍵字: POLAR 超聲系統(tǒng) PCI 影像

東京2022年8月29日 /美通社/ -- NIPPON EXPRESS HOLDINGS株式會(huì)社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團(tuán)公司NX國(guó)際物流(中國(guó))有限公司(Nippon Ex...

關(guān)鍵字: CHINA EXPRESS NI IP

東京2022年8月12日   /美通社/ -- NIPPON EXPRESS HOLDINGS株式會(huì)社集團(tuán)子公司Nippon Express Italia S.p.A.(以下簡(jiǎn)稱(chēng)"NX Italy&q...

關(guān)鍵字: EXPRESS NI IP PS

東京2022年7月13日 /美通社/ -- Nippon Express Holdings株式會(huì)社于7月1日成立了Global Business Headquarters(以下簡(jiǎn)稱(chēng)GBHQ),以鞏固和加強(qiáng)全球業(yè)務(wù)治理。...

關(guān)鍵字: EXPRESS HOLDING NI IP

- 與BCP一致的服務(wù)旨在避開(kāi)北美西海岸的港口擁堵 東京2022年7月12日 /美通社/ -- Nippon Express Holdings株式會(huì)社(Nippon Express Holdings, Inc.)旗下的...

關(guān)鍵字: EXPRESS NI IP PS

-成為第一家與擁有豐富疫苗運(yùn)輸經(jīng)驗(yàn)的EMBALL'ISO合作的日本物流公司- 東京2022年6月21日 /美通社/ -- Nippon Express Holdings株式會(huì)社旗下的集團(tuán)公司日本通運(yùn)株式會(huì)社推出了一項(xiàng)新...

關(guān)鍵字: ISO PS WIRE EXPRESS

一直以來(lái),控制器都是大家的關(guān)注焦點(diǎn)之一。因此針對(duì)大家的興趣點(diǎn)所在,小編將為大家?guī)?lái)運(yùn)動(dòng)控制器的相關(guān)介紹,詳細(xì)內(nèi)容請(qǐng)看下文。

關(guān)鍵字: 運(yùn)動(dòng)控制器 控制器 總線

東京2022年6月9日 /美通社/ -- Nippon Express Holdings株式會(huì)社(Nippon Express Holdings, Inc.)的集團(tuán)公司日本通運(yùn)株式會(huì)社(Nippon Express Co...

關(guān)鍵字: 溫控 溫度 EXPRESS WIRE

東京2022年6月7日 /美通社/ -- Nippon Express Holdings株式會(huì)社旗下子公司Nippon Express (Belgium) N.V./S.A.在比利...

關(guān)鍵字: EXPRESS NI LG IP

上海2022年5月28日 /美通社/ -- 今日,在由上海市醫(yī)學(xué)會(huì)、上海市醫(yī)學(xué)會(huì)心血管專(zhuān)科分會(huì)主辦的"第十六屆東方心臟病學(xué)會(huì)議(OCC 2022)"上,全球領(lǐng)先的醫(yī)療科技公司波士頓科學(xué)(NYSE:BS...

關(guān)鍵字: PCI 成功率 BSP MICRO

嵌入式教程

6897 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉