《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于DSP內(nèi)嵌PCI總線的衛(wèi)星信號仿真器設(shè)計
基于DSP內(nèi)嵌PCI總線的衛(wèi)星信號仿真器設(shè)計
第二炮兵工程學(xué)院 楊家勝 劉光斌 范志良
摘要: 衛(wèi)星信號仿真器在衛(wèi)星導(dǎo)航的研究開發(fā)中占有重要地位,特別是多模接收機(jī)和高動態(tài)接收機(jī)的研發(fā)。多模衛(wèi)星仿真器中涉及到大量的數(shù)據(jù)傳輸,,為了保證PC機(jī)和DSP之間數(shù)據(jù)傳輸?shù)膶崟r性和準(zhǔn)確性,選擇基于PCI總線接口進(jìn)行數(shù)據(jù)傳輸,。常用的PCI開發(fā)是采用專門的PCI接口芯片,,但這樣系統(tǒng)就會多一塊芯片,,性價比低,而TI公司TMS320C6416系列的DSP擁有內(nèi)置PCI接口,,使得硬件開發(fā)難度降低和主機(jī)對DSP資源訪問更加透明,。提出一種基于TMS320C6416系列DSP的PCI總線衛(wèi)星信號發(fā)生器的硬件平臺以及相應(yīng)的PCI接口電路設(shè)計。
關(guān)鍵詞: DSP PCI總線 TI
Abstract:
Key words :

 

      衛(wèi)星信號仿真器在衛(wèi)星導(dǎo)航的研究開發(fā)中占有重要地位,,特別是多模接收機(jī)和高動態(tài)接收機(jī)的研發(fā),。多模衛(wèi)星仿真器中涉及到大量的數(shù)據(jù)傳輸,為了保證PC機(jī)和title="DSP">DSP之間數(shù)據(jù)傳輸?shù)膶崟r性和準(zhǔn)確性,,選擇基于PCI總線接口進(jìn)行數(shù)據(jù)傳輸,。常用的PCI開發(fā)是采用專門的PCI接口芯片,但這樣系統(tǒng)就會多一塊芯片,,性價比低,,而TI公司TMS320C6416系列的DSP擁有內(nèi)置PCI接口,使得硬件開發(fā)難度降低和主機(jī)對DSP資源訪問更加透明,。提出一種基于TMS320C6416系列DSP的PCI總線衛(wèi)星信號發(fā)生器的硬件平臺以及相應(yīng)的PCI接口電路設(shè)計,。

  1 系統(tǒng)結(jié)構(gòu)與實現(xiàn)方案

  1.1 系統(tǒng)總體結(jié)圖

  圖1是仿真器的總體結(jié)構(gòu)框圖,其核心器件包括DSP6416,,SDRRAM,,F(xiàn)LASH,F(xiàn)PGA,,D/A,,時鐘以及PC機(jī)。其中,,D/A完成數(shù)字信號到模擬信號的轉(zhuǎn)換,;SDRAM作為外設(shè)存儲器存儲由PC機(jī)傳來的數(shù)據(jù);FLASH用于在系統(tǒng)掉電后保存DSP的運行程序,;FP-GA作為仿真器的另一核心部件,,主要完成與DSP的通信、信號的合成和D/A的控制;PC機(jī)主要完成仿真器的數(shù)字信號處理與計算好的數(shù)據(jù)在PCI接口和DSP間的傳遞,。DSP作為主機(jī)和FPGA之間的通信橋梁,,主要完成兩方面的工作:一是定時接收PC機(jī)計算的各種控制字和電文,按照時序要求,,將各通道的控制字發(fā)送給FPGA,;二是由于PC機(jī)計算是雙精度浮點型的,而FPGA中只能以整型數(shù)據(jù)計算,,這樣必然會造成兩者相位累加值的差異,,隨著時間的流逝,誤差會越來越大,,必須加以校正,;但如果要將FPGA累加的數(shù)據(jù)再返回到PC機(jī)進(jìn)行比較校正,在實時性上得不到保證,,因此需要在DSP中實現(xiàn)對頻率字的校正,。

  在設(shè)計中,將SDRAM作為DSP的片外存儲器,,配置在EMIFA的CE0空間內(nèi),,F(xiàn)PGA與DSP通過EMI-FA接口交互數(shù)據(jù),它配置在EMIFA的CE1和CE2空間內(nèi),。EMIFB的CE1配置成異步8位通信方式與FLASH通信,。

  1.2 DSP與PCI接口電路連接設(shè)計

  由于DSP TMS320C6416內(nèi)部集成PCI接口,所以不需要橋接芯片,,只需要設(shè)計與PCI母板之間的接口,,不需要設(shè)計PCI與DSP本身之間的接口。由于仿真器是一個多電源系統(tǒng),,可以提供5 V,,3.3 V,12 V的電源,,所以對連接器采用多電源供電,。此外,由于DSP是3.3 V系統(tǒng),,雖然它的PCI口能承受5 V電壓,,但考慮到系統(tǒng)的穩(wěn)定性,在DSP的PCI口和連接器之間加3個電壓轉(zhuǎn)換芯片IDTQS32X2245,,將5 V電壓轉(zhuǎn)換成3.3 V電壓,。由于DSP是集成的PCI接口,其電路設(shè)計較簡單,,將DSP PCI接口的地址和數(shù)據(jù)總線直接連到IDTQS32X2245芯片的B管腳部分,,將銅手指上的地址和數(shù)據(jù)總線連接到IDTQS32X2245芯片的A管腳部分,仲裁信號REQ,GNT,、錯誤報告信號PERR,,SERR、字節(jié)使能信號C/BE[3:O],、接口控制信號FRAM,,IRDY,STOP,, IDSEL,,DEVESEL也都按相同的方法連接在相應(yīng)的位置上。限于篇幅,,這里僅給出DSP PCI接口部分與連接器的連接示意圖,,如圖2所示。

  2  DSP6416內(nèi)嵌PCI關(guān)鍵寄存器及其中斷機(jī)制

  DSP6416的PCI接口支持通過主/從總線接口連接DSP到PCI主機(jī),,PCI接口端通過EDMA內(nèi)部硬件與DSP相連,,它支持四種類型PCI數(shù)據(jù)交換:從模式讀,,即外部PCI主設(shè)備通過PCI接口寫數(shù)據(jù)到DSP,;從模式寫,即外部PCI主設(shè)備通過PCI接口從設(shè)備讀數(shù)據(jù),;主模式讀,,即DSP主設(shè)備通過PCI接口讀數(shù)據(jù)到外部PCI從設(shè)備;主模式寫,,即DSP主設(shè)備通過PCI接口寫數(shù)據(jù)到外部PCI從設(shè)備,。

  PCI寄存器主要包括3類:PCI配置寄存器、PCII/O寄存器,、映射在DSP存儲空間作為外設(shè)的PCI寄存器,。前兩類寄存器只能被外部主機(jī)訪問,而第三類寄存器可以被DSP和外部PCI主機(jī)訪問,。

  PCI配置寄存器包含標(biāo)準(zhǔn)的PCI配置信息(設(shè)備標(biāo)識,,廠商標(biāo)識,分類代碼,,基址等),;PCI I/O寄存器位于PCI主機(jī)的I/O空間,主機(jī)只能在:Base1和Base2訪問它們,,PCI I/O寄存器包括HSR,,HDCR,DSPP,。如圖3所示,,HSR寄存器表明主機(jī)的狀態(tài),它的INTSRC位和INTAM位對于中斷處理至關(guān)重要。 INTAM位為1時,,它可以屏蔽DSP發(fā)送的中斷,,當(dāng)該位為0時,只要,。DSP設(shè)置RSTSRC字段中的INTREQ位時,,可以使能PINTA,即主機(jī)在這時可以響應(yīng)中斷,。當(dāng)INTSRC位讀為0時,,表示PINTA自上次清除后無效,當(dāng)讀為1時,,表示PINTA處于使能狀態(tài),,該位寫0無效,寫1清除 PINTA的使能狀態(tài),。對于HDCR來說,,PC機(jī)通過將DSPINT位置1產(chǎn)生主機(jī)中斷。DSPP主要和Base0一起定義一段存儲空間,。 

  PCI內(nèi)存映射外圍寄存器主要用于控制PCI接口,,它可以被主機(jī)和DSP訪問,在該寄存器中,,較重要的是RSTSRC寄存器,,如圖4所示。

  DSP通過將RSTSRC寄存器中的INTREQ置1產(chǎn)生中斷,;PC機(jī)和DSP通過將INTRST置1清除中斷,,這一點在驅(qū)動開發(fā)中至關(guān)重要,因為DSP 產(chǎn)生的中斷屬于電平中斷類型,,如果不清除中斷,,它將一直有效.這將會導(dǎo)致中斷響應(yīng)函數(shù)不斷的調(diào)用,從而導(dǎo)致死機(jī),。

  PCI端口通過3種基址寄存器可以完全訪問DSP的存儲器映射,。

  Base0:4 MB的可預(yù)存取空間,通過設(shè)置DSP頁寄存器映射所有DSP存儲器空間,,預(yù)取讀使所有的字節(jié)有效,。

  Base1:8 MB非預(yù)取地址映射對應(yīng)于所有的DSP存儲空間,非預(yù)取支持字節(jié)使能,。

  Base2:PCI的16MB I/O包括I/O寄存器,。

  這3種寄存器屬于PCI配置寄存器,PCI主機(jī)可以訪問映射在PCI存儲器空間4 MB的DSP存儲器,,PCI端口包含一個PCI I/O寄存器(DSPP寄存器)從PCI地址到DSP地址的映射,。當(dāng)DSP作為PCI本地總線從屬時,,使用該映射模式;當(dāng)DSP上的PCI基地址寄存器被配置成一個8 MB不可預(yù)取區(qū)域時,,該存儲空間映射為DSP內(nèi)存映射寄存器(0180 0000h),。PCI地址的22:0位與一個固定偏移相連,將Base 1訪問映射到內(nèi)存寄存器,;基地址寄存器2配置16 B I/O空間,,使PCI主機(jī)用于訪問PCI I/O寄存器。

3 仿真器程序及驅(qū)動程序的開發(fā)

 

  3.1 驅(qū)動工具的選擇

  對于開發(fā)wDM型PCI驅(qū)動,,常用的開發(fā)工具有三種,。一是直接使用Windows DDK或者WDK工具;二是使用DriverStudio,;三是使用WinDriver,。第一種方式要求掌握Windows的體系結(jié)構(gòu)、設(shè)備驅(qū)動的體系結(jié)構(gòu)等知識,,開發(fā)難度較大,;第二種方式對DDK進(jìn)行了封裝,難度雖然降低了些,,但依然不小,,而且由于封裝問題,可能帶來一些Bug,,有可能導(dǎo)致項目失??;第三種方式克服了傳統(tǒng)開發(fā)工具開發(fā)驅(qū)動周期長,,效率低,需具有DDK和核心態(tài)程序開發(fā)經(jīng)驗等缺點,,大大簡化了ISA-BUS,,PCIBUS等硬件設(shè)備驅(qū)動程序的開發(fā)過程,而且WinDriver還提供核心插件(Kerneal Plu-gin)功能,,使開發(fā)者在用戶模式下調(diào)試代碼,,然后將調(diào)試無誤的代碼搬到內(nèi)核模式(Kernel Mode)中,因而使用WinDriver,,具有簡單,、快速、高效的特點,。

  3.2 WinDriver的工作原理

  圖5是WinDriver的體系結(jié)構(gòu)圖,,陰影部分是WinDriver提供的組件。WinDriver提供以WinDrvr6.sys為底層的驅(qū)動棧層,,直接與硬件交互,,避免了用戶對硬件操作的復(fù)雜性,,用戶開發(fā)驅(qū)動只需在應(yīng)用程序中調(diào)用WinDriver用戶模式的API函數(shù)。這些用戶模式的函數(shù)調(diào)用 WinDriver的Kernel Module函數(shù)實現(xiàn)對硬件的訪問,。對于某些要求比較高的硬件驅(qū)動(如要求響應(yīng)中斷的速度足夠快),,如果用戶模式開發(fā)的驅(qū)動無法達(dá)到要求,開發(fā)者可以將用戶模式下調(diào)試好的代碼放入到WinDriver的Kernel Plugin模塊中,,使得驅(qū)動開發(fā)可以在用戶模式下進(jìn)行,,而開發(fā)的驅(qū)動的效率完全可與內(nèi)核模式下的驅(qū)動相媲美。

 圖6為用WinDriver開發(fā)PCI驅(qū)動內(nèi)部的API函數(shù)調(diào)用關(guān)系,。

 

 

  通常情況下,,在應(yīng)用程序中不直接調(diào)用這些API函數(shù),而是通過二次開發(fā),,將這些API函數(shù)封裝在動態(tài)鏈接庫DLL中,,然后應(yīng)用程序調(diào)用DLL中封裝好的函數(shù)。

  3.3 衛(wèi)星信號仿真器應(yīng)用程序框圖及相應(yīng)PCI驅(qū)動的關(guān)鍵代碼分析

  根據(jù)仿真器的總體設(shè)計,,需要在PC機(jī)上實現(xiàn)二個功能模塊,;

  數(shù)字信號處理模塊該模塊是仿真器的核心模塊,實時仿真導(dǎo)航電文,,計算衛(wèi)星偽距,、各通道的頻率字和碼控制字等。

  通信模塊 該模塊主要是將PC機(jī)計算得到的相關(guān)信息通過PCI傳遞給DSP,。

  考慮到整個仿真器數(shù)據(jù)要求的實時性,,通過中斷函數(shù)實現(xiàn)PC機(jī)中的程序傳輸數(shù)據(jù),當(dāng)DSP需要數(shù)據(jù)時,,通過RSTSRC寄存器INTREQ位寫1產(chǎn)生一個中斷信號發(fā)送給PC機(jī),,但要使該中斷有效,必須要求主機(jī)狀態(tài)寄存器(HSR)中的INTAM位為0,。因此在上位機(jī)程序中,,初始化階段必須把該中斷使能位打開。應(yīng)用程序的結(jié)構(gòu)如圖7所示,。

 

 

  中斷處理步驟如下:

 

  (1)應(yīng)用程序打開中斷使能,,系統(tǒng)等待中斷;

 

  (2)如果中斷到來,,則清除中斷標(biāo)志,,取消中斷源;

 

  (3)在中斷函數(shù)中執(zhí)行數(shù)據(jù)傳輸,;

 

  (4)數(shù)據(jù)傳輸完后給DSP發(fā)中斷,,實現(xiàn)與DSP的握手;

 

  (5)重新開啟中斷源,。

 

  第(2)步和第(5)步在中斷使能函數(shù)中實現(xiàn),。 

  中斷響應(yīng)函數(shù)的關(guān)鍵代碼如下:

  PCI主機(jī)給DSP發(fā)中斷是通過將HDCR寄存器的DSPINT位置1實現(xiàn)的,,要注意產(chǎn)生該中斷的有效前提條件是PCI的中斷使能寄存器(PCIIEN)HOSTSW位被使能,即HOSTSW=1,。

  為了便于使用PCI的驅(qū)動函數(shù)和以后驅(qū)動程序發(fā)布的需要,,將驅(qū)動函數(shù)封裝在動態(tài)鏈接庫DLL中,它們中主要函數(shù)的關(guān)鍵代碼如下:

  為了使PC機(jī)能夠正確地捕獲到由DSP傳來的中斷,,在動態(tài)鏈接的DSP6416_IntEnable()函數(shù)中,,必須設(shè)置內(nèi)核模式下的中斷傳輸命令,因為它的優(yōu)先級比用戶模式下的中斷響應(yīng)函數(shù)高,,因而一旦DSP產(chǎn)生中斷,,首先執(zhí)行的是內(nèi)核模式下的中斷傳輸命令。由于DSP6416內(nèi)嵌PCI產(chǎn)生的中斷屬于電平敏感中斷,,如果不清除中斷它將一直有效,,這將會導(dǎo)致中斷響應(yīng)函數(shù)不斷執(zhí)行而死機(jī)。因此,,必須在中斷使能函數(shù)設(shè)置中斷傳輸命令,。在該例中,先從HSR中讀取一個DWORD,,然后在中斷傳輸命令中設(shè)置CMD_MASK位,。如果前面從HSR中讀出的值為0x04,則屏蔽DSP所產(chǎn)生的中斷,,否則不執(zhí)行屏蔽命令,,然后在中斷傳輸命令中向DSP的RSTSRC寫入0x10清除中斷。圖6中用到的關(guān)閉中斷使能和關(guān)閉設(shè)備2個函數(shù)可分別通過調(diào)用WinDriver中 WDC_IntDisable(),,WDC_PciDe_viceClose(),,WDC_DriverClose()的函數(shù)等實現(xiàn)。此外,,調(diào)用這些函數(shù)之前要判斷中斷是否存在,,設(shè)備是否打開,否則會出現(xiàn)嚴(yán)重錯誤,。

  3.4 衛(wèi)星信號仿真器實驗驗證

  設(shè)置衛(wèi)星信號仿真器場景:用戶位置為北緯60°00'00",東經(jīng)100°00'00",,高程300 m,,靜止?fàn)顟B(tài)。GG24接收機(jī)的解算結(jié)果如圖8所示,。

  GG24接收機(jī)解算結(jié)果是北緯59°59'59.867 52",,東經(jīng)99°59'57.636 24",高程為308.02 m,,與設(shè)置的場景,,即北緯60°00'00",,東經(jīng)100°00'00",高程300 m相當(dāng)吻合,。因此,,這說明了仿真器的正確性和有效性。

  4 結(jié) 語

  在此設(shè)計的基于DSP6416內(nèi)嵌PCI數(shù)據(jù)傳輸硬件平臺和驅(qū)動開發(fā)方案已用于多模衛(wèi)星信號仿真器中,,該方案數(shù)據(jù)傳輸穩(wěn)定,,速度快(可達(dá)115 MB/s),采用WinDriver軟件工具包開發(fā)DSP6416內(nèi)嵌的PCI設(shè)備驅(qū)動程序,,不但可以極大地縮短開發(fā)周期,,而且還提高了衛(wèi)星信號仿真器的開發(fā)效率和整體性能。

 
 
來源:現(xiàn)代電子技術(shù)
此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。