基于DSP內(nèi)嵌PCI總線的衛(wèi)星信號(hào)仿真器設(shè)計(jì)
中斷響應(yīng)函數(shù)的關(guān)鍵代碼如下:本文引用地址:http://butianyuan.cn/article/191948.htm
PCI主機(jī)給DSP發(fā)中斷是通過(guò)將HDCR寄存器的DSPINT位置1實(shí)現(xiàn)的,要注意產(chǎn)生該中斷的有效前提條件是PCI的中斷使能寄存器(PCIIEN)HOSTSW位被使能,即HOSTSW=1。
為了便于使用PCI的驅(qū)動(dòng)函數(shù)和以后驅(qū)動(dòng)程序發(fā)布的需要,將驅(qū)動(dòng)函數(shù)封裝在動(dòng)態(tài)鏈接庫(kù)DLL中,它們中主要函數(shù)的關(guān)鍵代碼如下:
為了使PC機(jī)能夠正確地捕獲到由DSP傳來(lái)的中斷,在動(dòng)態(tài)鏈接的DSP6416_IntEnable()函數(shù)中,必須設(shè)置內(nèi)核模式下的中斷傳輸命令,因?yàn)樗膬?yōu)先級(jí)比用戶(hù)模式下的中斷響應(yīng)函數(shù)高,因而一旦DSP產(chǎn)生中斷,首先執(zhí)行的是內(nèi)核模式下的中斷傳輸命令。由于DSP6416內(nèi)嵌PCI產(chǎn)生的中斷屬于電平敏感中斷,如果不清除中斷它將一直有效,這將會(huì)導(dǎo)致中斷響應(yīng)函數(shù)不斷執(zhí)行而死機(jī)。因此,必須在中斷使能函數(shù)設(shè)置中斷傳輸命令。在該例中,先從HSR中讀取一個(gè)DWORD,然后在中斷傳輸命令中設(shè)置CMD_MASK位。如果前面從HSR中讀出的值為0x04,則屏蔽DSP所產(chǎn)生的中斷,否則不執(zhí)行屏蔽命令,然后在中斷傳輸命令中向DSP的RSTSRC寫(xiě)入0x10清除中斷。圖6中用到的關(guān)閉中斷使能和關(guān)閉設(shè)備2個(gè)函數(shù)可分別通過(guò)調(diào)用WinDriver中 WDC_IntDisable(),WDC_PciDe_viceClose(),WDC_DriverClose()的函數(shù)等實(shí)現(xiàn)。此外,調(diào)用這些函數(shù)之前要判斷中斷是否存在,設(shè)備是否打開(kāi),否則會(huì)出現(xiàn)嚴(yán)重錯(cuò)誤。
3.4 衛(wèi)星信號(hào)仿真器實(shí)驗(yàn)驗(yàn)證
設(shè)置衛(wèi)星信號(hào)仿真器場(chǎng)景:用戶(hù)位置為北緯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è)置的場(chǎng)景,即北緯60°00'00,東經(jīng)100°00'00,高程300 m相當(dāng)吻合。因此,這說(shuō)明了仿真器的正確性和有效性。
4 結(jié) 語(yǔ)
在此設(shè)計(jì)的基于DSP6416內(nèi)嵌PCI數(shù)據(jù)傳輸硬件平臺(tái)和驅(qū)動(dòng)開(kāi)發(fā)方案已用于多模衛(wèi)星信號(hào)仿真器中,該方案數(shù)據(jù)傳輸穩(wěn)定,速度快(可達(dá)115 MB/s),采用WinDriver軟件工具包開(kāi)發(fā)DSP6416內(nèi)嵌的PCI設(shè)備驅(qū)動(dòng)程序,不但可以極大地縮短開(kāi)發(fā)周期,而且還提高了衛(wèi)星信號(hào)仿真器的開(kāi)發(fā)效率和整體性能。
評(píng)論