基于DSP內(nèi)嵌PCI總線的衛(wèi)星信號仿真器設(shè)計
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清除中斷,這一點(diǎn)在驅(qū)動開發(fā)中至關(guān)重要,因?yàn)镈SP 產(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)驗(yàn)等缺點(diǎn),大大簡化了ISA-BUS,PCIBUS等硬件設(shè)備驅(qū)動程序的開發(fā)過程,而且WinDriver還提供核心插件(Kerneal Plu-gin)功能,使開發(fā)者在用戶模式下調(diào)試代碼,然后將調(diào)試無誤的代碼搬到內(nèi)核模式(Kernel Mode)中,因而使用WinDriver,具有簡單、快速、高效的特點(diǎn)。
評論