基于DSP內(nèi)嵌PCI總線的衛(wèi)星信號(hào)仿真器設(shè)計(jì)
2 DSP6416內(nèi)嵌PCI關(guān)鍵寄存器及其中斷機(jī)制
DSP6416的PCI接口支持通過(guò)主/從總線接口連接DSP到PCI主機(jī),PCI接口端通過(guò)EDMA內(nèi)部硬件與DSP相連,它支持四種類型PCI數(shù)據(jù)交換:從模式讀,即外部PCI主設(shè)備通過(guò)PCI接口寫(xiě)數(shù)據(jù)到DSP;從模式寫(xiě),即外部PCI主設(shè)備通過(guò)PCI接口從設(shè)備讀數(shù)據(jù);主模式讀,即DSP主設(shè)備通過(guò)PCI接口讀數(shù)據(jù)到外部PCI從設(shè)備;主模式寫(xiě),即DSP主設(shè)備通過(guò)PCI接口寫(xiě)數(shù)據(jù)到外部PCI從設(shè)備。
PCI寄存器主要包括3類:PCI配置寄存器、PCII/O寄存器、映射在DSP存儲(chǔ)空間作為外設(shè)的PCI寄存器。前兩類寄存器只能被外部主機(jī)訪問(wèn),而第三類寄存器可以被DSP和外部PCI主機(jī)訪問(wèn)。
PCI配置寄存器包含標(biāo)準(zhǔn)的PCI配置信息(設(shè)備標(biāo)識(shí),廠商標(biāo)識(shí),分類代碼,基址等);PCI I/O寄存器位于PCI主機(jī)的I/O空間,主機(jī)只能在:Base1和Base2訪問(wèn)它們,PCI I/O寄存器包括HSR,HDCR,DSPP。如圖3所示,HSR寄存器表明主機(jī)的狀態(tài),它的INTSRC位和INTAM位對(duì)于中斷處理至關(guān)重要。 INTAM位為1時(shí),它可以屏蔽DSP發(fā)送的中斷,當(dāng)該位為0時(shí),只要。DSP設(shè)置RSTSRC字段中的INTREQ位時(shí),可以使能PINTA,即主機(jī)在這時(shí)可以響應(yīng)中斷。當(dāng)INTSRC位讀為0時(shí),表示PINTA自上次清除后無(wú)效,當(dāng)讀為1時(shí),表示PINTA處于使能狀態(tài),該位寫(xiě)0無(wú)效,寫(xiě)1清除 PINTA的使能狀態(tài)。對(duì)于HDCR來(lái)說(shuō),PC機(jī)通過(guò)將DSPINT位置1產(chǎn)生主機(jī)中斷。DSPP主要和Base0一起定義一段存儲(chǔ)空間。
PCI內(nèi)存映射外圍寄存器主要用于控制PCI接口,它可以被主機(jī)和DSP訪問(wèn),在該寄存器中,較重要的是RSTSRC寄存器,如圖4所示。
DSP通過(guò)將RSTSRC寄存器中的INTREQ置1產(chǎn)生中斷;PC機(jī)和DSP通過(guò)將INTRST置1清除中斷,這一點(diǎn)在驅(qū)動(dòng)開(kāi)發(fā)中至關(guān)重要,因?yàn)镈SP 產(chǎn)生的中斷屬于電平中斷類型,如果不清除中斷,它將一直有效.這將會(huì)導(dǎo)致中斷響應(yīng)函數(shù)不斷的調(diào)用,從而導(dǎo)致死機(jī)。
PCI端口通過(guò)3種基址寄存器可以完全訪問(wèn)DSP的存儲(chǔ)器映射。
Base0:4 MB的可預(yù)存取空間,通過(guò)設(shè)置DSP頁(yè)寄存器映射所有DSP存儲(chǔ)器空間,預(yù)取讀使所有的字節(jié)有效。
Base1:8 MB非預(yù)取地址映射對(duì)應(yīng)于所有的DSP存儲(chǔ)空間,非預(yù)取支持字節(jié)使能。
Base2:PCI的16MB I/O包括I/O寄存器。
這3種寄存器屬于PCI配置寄存器,PCI主機(jī)可以訪問(wèn)映射在PCI存儲(chǔ)器空間4 MB的DSP存儲(chǔ)器,PCI端口包含一個(gè)PCI I/O寄存器(DSPP寄存器)從PCI地址到DSP地址的映射。當(dāng)DSP作為PCI本地總線從屬時(shí),使用該映射模式;當(dāng)DSP上的PCI基地址寄存器被配置成一個(gè)8 MB不可預(yù)取區(qū)域時(shí),該存儲(chǔ)空間映射為DSP內(nèi)存映射寄存器(0180 0000h)。PCI地址的22:0位與一個(gè)固定偏移相連,將Base 1訪問(wèn)映射到內(nèi)存寄存器;基地址寄存器2配置16 B I/O空間,使PCI主機(jī)用于訪問(wèn)PCI I/O寄存器。
3 仿真器程序及驅(qū)動(dòng)程序的開(kāi)發(fā)
3.1 驅(qū)動(dòng)工具的選擇
對(duì)于開(kāi)發(fā)wDM型PCI驅(qū)動(dòng),常用的開(kāi)發(fā)工具有三種。一是直接使用Windows DDK或者WDK工具;二是使用DriverStudio;三是使用WinDriver。第一種方式要求掌握Windows的體系結(jié)構(gòu)、設(shè)備驅(qū)動(dòng)的體系結(jié)構(gòu)等知識(shí),開(kāi)發(fā)難度較大;第二種方式對(duì)DDK進(jìn)行了封裝,難度雖然降低了些,但依然不小,而且由于封裝問(wèn)題,可能帶來(lái)一些Bug,有可能導(dǎo)致項(xiàng)目失?。坏谌N方式克服了傳統(tǒng)開(kāi)發(fā)工具開(kāi)發(fā)驅(qū)動(dòng)周期長(zhǎng),效率低,需具有DDK和核心態(tài)程序開(kāi)發(fā)經(jīng)驗(yàn)等缺點(diǎn),大大簡(jiǎn)化了ISA-BUS,PCIBUS等硬件設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)過(guò)程,而且WinDriver還提供核心插件(Kerneal Plu-gin)功能,使開(kāi)發(fā)者在用戶模式下調(diào)試代碼,然后將調(diào)試無(wú)誤的代碼搬到內(nèi)核模式(Kernel Mode)中,因而使用WinDriver,具有簡(jiǎn)單、快速、高效的特點(diǎn)。
評(píng)論