基于DSP內(nèi)嵌PCI總線的衛(wèi)星信號仿真器設(shè)計
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ū)動無法達到要求,開發(fā)者可以將用戶模式下調(diào)試好的代碼放入到WinDriver的Kernel Plugin模塊中,使得驅(qū)動開發(fā)可以在用戶模式下進行,而開發(fā)的驅(qū)動的效率完全可與內(nèi)核模式下的驅(qū)動相媲美。本文引用地址:http://cafeforensic.com/article/191948.htm
圖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機上實現(xiàn)二個功能模塊;
數(shù)字信號處理模塊該模塊是仿真器的核心模塊,實時仿真導(dǎo)航電文,計算衛(wèi)星偽距、各通道的頻率字和碼控制字等。
通信模塊 該模塊主要是將PC機計算得到的相關(guān)信息通過PCI傳遞給DSP。
考慮到整個仿真器數(shù)據(jù)要求的實時性,通過中斷函數(shù)實現(xiàn)PC機中的程序傳輸數(shù)據(jù),當(dāng)DSP需要數(shù)據(jù)時,通過RSTSRC寄存器INTREQ位寫1產(chǎn)生一個中斷信號發(fā)送給PC機,但要使該中斷有效,必須要求主機狀態(tài)寄存器(HSR)中的INTAM位為0。因此在上位機程序中,初始化階段必須把該中斷使能位打開。應(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)。
評論