1 引言 多路實時數字音頻系統采用TI公司的TMS320C5402數字信號處理芯片來實現,由于該系列芯片采用了改進的哈佛結構,擁有專用的硬件乘法器和專為數字信號處理而設計的指令系統,快速的指令周期和良好的多DSP并行運行特性,使得DSP芯片非常適合于實時數字信號處理,廣泛應用于無線通信、語音識別、工業控制、自動化儀器等領域。該系統用TMS320C5402芯片外接一個2X4路的A/D芯片Maxl25CEAX實現對多路數字音頻的實時處理,然后將處理數據通過PCI2040傳送到PC機進行后繼處理并保存,或從PC機接受命令進行相應操作,實現PC機和DSP之間的數據傳送,需要DSP程序、應用程序、驅動程序三者相互協調工作。 2 WindOWS管理體系 Win98體系結構支持4種基本程序:管理程序、win32應用程序、winl6應用程序和DOS應用程序,每種程序在不同的執行環境中運行。(1)管理程序在Ring0層(核心態)中的保護模式下運行,所以能訪問和控制實際硬件環境,管理程序是在實際機器上,而不是在虛擬機上運行,在所有構成win98的組件中,只有VMM和驅動程序在管理程序的環境中執行,可以直接對硬件進行操作。(2)Win32應用程序和Winl6應用程序都在Ring3層(用戶態)的保護模式下運行,Win32應用程序可以訪問4GB的虛擬內存,而Winl6應用程序只能訪問16MB的虛擬內存。(3)DOS應用程序運行在V86模式下,它也運行在Ring3層的訪問級別上,硬件訪問和中斷被隱藏和虛擬,該系統編寫的是32位應用程序,它運行在虛擬環境之下,它對I/o端口的查詢,對一個內存映射的外圍設備的查詢以及可能導致傳送到虛擬機之外的操作都會被Windows捕獲,所以其本身并不能直接訪問硬件和系統數據,而需要通過驅動程序來完成。 即插即用(PnP)是微軟公司為了使新的硬件設備更加方便使用而采取的一種策略,PnP設備能夠自身識別、自動提出資源要求,并且可以在運行時接受資源分配。該系統開發中的PCI總線就是即插即用的。在即插即用的系統中的配置管理是由配置管理器來控制。配置管理器使用設備節點、設備節點樹、注冊表來保持數據;配置管理器由枚舉器、仲裁器、設備安裝器、設備驅動器4個主要軟件來工作;配置管理器的工作流程如圖1所示。 3 設備內存映射方法 盡管驅動程序運行在核心層,但它所見的是平面內存,只能用線性地址進行訪問。所有驅動程序對內存的訪問都必須經過頁表將線性地址轉換成物理地址。因此,驅動程序在訪問一個特殊的內存映射硬件之前,必須先配置頁表,保證設備的物理地址與一個線性地址相聯系。這個線性地址可以用作指針。驅動程序不能控制頁表,它必須調用虛擬機管理器提供的服務。 對老式非即插即用設備,只要給出設備內存的物理地址和字節長度,獲取一般在硬件上手動設置,然后調用MapPhysToLinear()函數獲取此物理地址的線性地址,就可進行訪問。 對即插即用設備,其物理地址可以通過調用函數CM_Get_Alloc_Log_Conf()獲取,但因為在Windows運行期間,即插即用的物理地址可能改變,而MapPhys-ToLinear()函數返回的線性地址所對應的物理地址不變,這樣就會造成訪問錯誤。對于物理地址可變的動態配置設備,驅動程序必須將內存映射過程分成3步。 (1)使用PageReserve()函數,分配一塊線性地址空間。此空間并不和具體的物理地址相關聯,僅是線性地址的頁表進入項。 (2)使用PageCommitPhys()函數,將線性地址映射到設備的物理地址,此時對線性地址的操作就是在相應的物理地址之上操作。 (3)使用LinPageLock()函數,阻止虛擬內存管理器將這些頁交換到磁盤空間,以保證在硬件中斷期間,這些地址都是有效的。 當設備卸載時,驅動程序可以調用LinPageUnLock(),PageDecommit(),PageFree()來解除設備的內存映射,這里每一個調用都是上述3步調用的反過程。 4 PCI配置寄存器訪問 根據PCI總線規范要求,任何PCI設備都必須提供256字節的配置空間,用來完成對設備的安裝、配置、引導和設備再定位等功能。在該系統中要求將HPI控制標志和狀態寄存器以及HPI控制空間映射到PC機內存,所以必須對PCI2040配置寄存中的命令寄存器進行修改,從而實現設備內存映射。這需要通過32位配置地址端口(占用IO地址OxOcf8~OxOcfb)和32位配置數據端口(占用IO地址OxOcfc~OxOcff)訪問PCI配置寄存器。其中位于0xcf8的IO端口的寄存器相當于一個地址寄存器,位于0xcfc端口的寄存器相當于數據寄存器。配置數據端口中存放著配置地址端口中的配置地址所指向的內存的內容。配置地址端口寄存器各位的意義見表1。 因為PCI設備的總線號和PCI2040的功能號一般為0,所以只需變化設備號來尋找硬件的位置。圖2是基于Vtoolsd使用VC++6.0具體對PCI配置寄存器的訪問程序框圖。 5 HPI(Host Port Interface)寄存器介紹 PCI2040橋控制器可方便實現一個PCI插槽與4片C54x或C6x系列的DSP之間的通信,它提供了兩種數據傳輸的方式:一是通過HPI口傳輸,另一種是通過GPBUS總線傳輸。其中GPBUS總線傳輸方式比較簡單但傳輸速率低,通過HPI口的傳輸可以實現高速的數據通信,所以在該系統中采用了HPI口傳輸的通信方式。Win98先獲取HPI寄存器的物理地址進行映射,然后用映射得到的線性地址就可以對HPI口進行訪問。 (1)HPI控制寄存器(HPIC)。可以被PC機和DSP訪問,它是一個16位的寄存器,其高8位和低8位表示的意義相同,低8位所表示的意義見表2。 (2)HPI地址寄存器(HPIA)。只可由PC機訪問,寄存器中保存了當前要訪問的DSP的片內存儲器地址,它們可以被PC機映射,其映射空間大小為2K。 (3)HPI數據寄存器(HPID)。只可由PC機訪問,它的值隨HPIA變化而變化,它保存HPIA中地址所指向的DSP內存數據的值。通過對它的讀寫,可以訪問相應的DSP內存的值,也可以設置成自增方式。這樣,每對它讀寫一次,HPIA的數據就自動加1,HPID相應保存內存中下一個16位數據。 6 驅動、應用及DSP程序的設計 6.1 總體設計思想 為實現應用程序和DSP程序在工作中的同步問題,將在DSP與PC機映射的內存區間建立了一個公共標志數據區,用來傳送DSP和PC機的工作狀態和控制字。設有以下幾個公共標志數據區: (1)DSP狀態字(16位)。用來標識數據在傳送中DSP的工作狀態和命令(命令由DSP和PC機約定)。 (2)PC機狀態字(16位)。用來標識數據傳送中PC機的工作狀態和命令。 (3)數據起始位置字(16位)。用來標識數據傳送中,數據存放的起始位置。 (4)數據長度字(16位)。用來標識存放數據的長度。 (5)頻率設置字(16位)。用來控制輸入輸出頻率。 (6)保留字空間。用于以后擴展。 DSP與PC機之間采用中斷的通信方式,每次中斷發送之前,都先訪問以上的這些控制字,這樣就為PC機和DSP之間通信的協調帶來了很多的方便。整體設計框圖如圖3。 6.2 應用程序設計 應用程序要調用驅動程序來完成兩件事,一是獲取DSP采集的數據,二是將自己的數據發送給DSP。應用程序整體功能框架如圖4。 應用程序只需通過CreateFile()函數來加載驅動程序,加載成功之后,應用程序就可以通過調用Devi-ceIoControl()函數與驅動程序通信。 6.3 驅動程序設計 驅動程序在系統中起紐帶作用,它響應DSP中斷,并向DSP發送中斷,傳送或讀取數據給應用程序。 6.3.1 響應DSP硬件中斷 Vtoolsd提供中斷類,可以方便地完成對中斷的響應工作。其硬件中斷信號處理函數如下: BOOL MyHwInt::OnSharedHardwareInt(VMHANDLE hVM) { //清除DSP上的中斷寄存器,加人中斷處理代碼。 //讀取公共數據區的數據,按要求進程操作。 sendPhysicalEOI0; //完成中斷服務,打開中斷, //準備接受下一次中斷。 return FALSE; //因為中斷號是共享的, //此時必須返回FALSE。 } 6.3.2 與應用程序通信 在Vtoolsd中使用VDevice類中的OnW32Devi-ceIoControl()函數響應應用程序發送的消息。同時驅動程序通過異步調用函數VWIN32 -QueueUserApc()向應用程序傳送數據。驅動程序運行過程框架如圖5,其中虛線框的工作由DSP程序或應用程序完成。 6.4 DSP程序設計 DSP程序實現多路數字音頻信號實時處理,通過對定時器和Maxl25CEAX芯片的設置,實現采樣率可以變化的多路輸入輸出,通過向PC機發送中斷和響應中斷,實現PC機保存數據和實時處理數據。DSP在內存中開設兩個數據區,數據存放在兩個數據區中交替進行。DSP的運行框架如圖6。 7 結束語 多路數字音頻系統已經調試通過,并成功地在盲源信號實時分離系統中獲得應用。利用TMS320C54x系列DSP的實時信號處理能力,實現PC機與DSP通信在多路實時數字音頻系統、智能機器人等領域中有廣闊的應用前景。 |