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