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