基于DSP內(nèi)嵌PCI總線的衛(wèi)星信號仿真器設(shè)計
中斷響應(yīng)函數(shù)的關(guān)鍵代碼如下:本文引用地址:http://cafeforensic.com/article/191948.htm
PCI主機給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機能夠正確地捕獲到由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í)行而死機。因此,必須在中斷使能函數(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接收機的解算結(jié)果如圖8所示。
GG24接收機解算結(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)定,速度快(可達115 MB/s),采用WinDriver軟件工具包開發(fā)DSP6416內(nèi)嵌的PCI設(shè)備驅(qū)動程序,不但可以極大地縮短開發(fā)周期,而且還提高了衛(wèi)星信號仿真器的開發(fā)效率和整體性能。
評論