基于DSP內(nèi)嵌PCI總線的衛(wèi)星信號(hào)仿真器設(shè)計(jì)
3.2 WinDriver的工作原理
圖5是WinDriver的體系結(jié)構(gòu)圖,陰影部分是WinDriver提供的組件。WinDriver提供以WinDrvr6.sys為底層的驅(qū)動(dòng)棧層,直接與硬件交互,避免了用戶對(duì)硬件操作的復(fù)雜性,用戶開發(fā)驅(qū)動(dòng)只需在應(yīng)用程序中調(diào)用WinDriver用戶模式的API函數(shù)。這些用戶模式的函數(shù)調(diào)用 WinDriver的Kernel Module函數(shù)實(shí)現(xiàn)對(duì)硬件的訪問。對(duì)于某些要求比較高的硬件驅(qū)動(dòng)(如要求響應(yīng)中斷的速度足夠快),如果用戶模式開發(fā)的驅(qū)動(dòng)無法達(dá)到要求,開發(fā)者可以將用戶模式下調(diào)試好的代碼放入到WinDriver的Kernel Plugin模塊中,使得驅(qū)動(dòng)開發(fā)可以在用戶模式下進(jìn)行,而開發(fā)的驅(qū)動(dòng)的效率完全可與內(nèi)核模式下的驅(qū)動(dòng)相媲美。本文引用地址:http://www.ex-cimer.com/article/191948.htm
圖6為用WinDriver開發(fā)PCI驅(qū)動(dòng)內(nèi)部的API函數(shù)調(diào)用關(guān)系。
通常情況下,在應(yīng)用程序中不直接調(diào)用這些API函數(shù),而是通過二次開發(fā),將這些API函數(shù)封裝在動(dòng)態(tài)鏈接庫DLL中,然后應(yīng)用程序調(diào)用DLL中封裝好的函數(shù)。
3.3 衛(wèi)星信號(hào)仿真器應(yīng)用程序框圖及相應(yīng)PCI驅(qū)動(dòng)的關(guān)鍵代碼分析
根據(jù)仿真器的總體設(shè)計(jì),需要在PC機(jī)上實(shí)現(xiàn)二個(gè)功能模塊;
數(shù)字信號(hào)處理模塊該模塊是仿真器的核心模塊,實(shí)時(shí)仿真導(dǎo)航電文,計(jì)算衛(wèi)星偽距、各通道的頻率字和碼控制字等。
通信模塊 該模塊主要是將PC機(jī)計(jì)算得到的相關(guān)信息通過PCI傳遞給DSP。
考慮到整個(gè)仿真器數(shù)據(jù)要求的實(shí)時(shí)性,通過中斷函數(shù)實(shí)現(xiàn)PC機(jī)中的程序傳輸數(shù)據(jù),當(dāng)DSP需要數(shù)據(jù)時(shí),通過RSTSRC寄存器INTREQ位寫1產(chǎn)生一個(gè)中斷信號(hào)發(fā)送給PC機(jī),但要使該中斷有效,必須要求主機(jī)狀態(tài)寄存器(HSR)中的INTAM位為0。因此在上位機(jī)程序中,初始化階段必須把該中斷使能位打開。應(yīng)用程序的結(jié)構(gòu)如圖7所示。
中斷處理步驟如下:
(1)應(yīng)用程序打開中斷使能,系統(tǒng)等待中斷;
(2)如果中斷到來,則清除中斷標(biāo)志,取消中斷源;
(3)在中斷函數(shù)中執(zhí)行數(shù)據(jù)傳輸;
(4)數(shù)據(jù)傳輸完后給DSP發(fā)中斷,實(shí)現(xiàn)與DSP的握手;
(5)重新開啟中斷源。
第(2)步和第(5)步在中斷使能函數(shù)中實(shí)現(xiàn)。
評(píng)論