多方會(huì)議技術(shù)在DSP中的實(shí)現(xiàn)
隨著企業(yè)對(duì)現(xiàn)代化通信系統(tǒng)的要求越來(lái)越高,電話會(huì)議系統(tǒng)在企業(yè)電話系統(tǒng)中的應(yīng)用越來(lái)越多,它可以極大地提高企業(yè)工作效率,改善企業(yè)的管理,提升企業(yè)的競(jìng)爭(zhēng)力。一般傳統(tǒng)電話會(huì)議的實(shí)現(xiàn)均利用企業(yè)內(nèi)部交換機(jī)(pbx)的多方通話功能,但有很大的局限性,特別是參加會(huì)議的人數(shù)有限,一般交換機(jī)不能超過(guò)8方,并且操作煩瑣,在使用中有很多不便?;趥鹘y(tǒng)電話會(huì)議系統(tǒng)的這一局限性,本文采用ti公司的tms320c54x芯片來(lái)實(shí)現(xiàn)傳統(tǒng)交換機(jī)中的多方通話功能。
tms320c54x系列tms320c54x是ti公司于1996年推出的新一代定點(diǎn)數(shù)字信號(hào)處理器。它采用先進(jìn)的修正哈佛結(jié)構(gòu),片內(nèi)有8條總線(1條程序存儲(chǔ)器總線、3條數(shù)據(jù)存儲(chǔ)器總線和4條地址總線)、cpu、在片存儲(chǔ)器和在片外圍電路等硬件,加上高度專業(yè)化的指令系統(tǒng),使"c54x具有功耗小、高度并行等優(yōu)點(diǎn),可以滿足實(shí)時(shí)處理的要求,目前已經(jīng)廣泛地應(yīng)用在電信領(lǐng)域中。c54x提供高速雙向多通道帶緩沖串口mcbsp。它可以與其它c(diǎn)54x器件、編碼器、或其它串口器件通訊。c54x芯片中只有三款有mcbsp串口功能,分別是c5402有2個(gè)、c5410有3個(gè)、c5420有6個(gè)。每個(gè)mcbsp有128個(gè)通道,可以通過(guò)相關(guān)寄存器進(jìn)行配置。c54x還提供一個(gè)主機(jī)接口(hpi)。hpi是一個(gè)8位并行口,用來(lái)與主設(shè)備或主處理器接口。外部主機(jī)是hpi的主控者,它可以通過(guò)hpi直接訪問(wèn)cpu的存儲(chǔ)空間,包括存儲(chǔ)器映象寄存器。hpi支持主設(shè)備與 c54x之間的高速傳送數(shù)據(jù)。
dsp所在單板dsp所在單板的總體結(jié)構(gòu)如圖1所示,mpc860作為單板的主處理器,用來(lái)管理單板的運(yùn)行,控制各外設(shè)的操作。dsp作為單板的協(xié)處理器,負(fù)責(zé)多方通話程序的運(yùn)行,也可以同時(shí)實(shí)現(xiàn)雙音多頻、fsk等功能。第一片fpga主要實(shí)現(xiàn)單板的一些控制邏輯,如hpi接口控制邏輯、雙斷口總線仲裁邏輯、中斷定時(shí)邏輯等。第二片fpga(dx1000)主要實(shí)現(xiàn)單板與背板的pcm鏈路交換,同時(shí)產(chǎn)生單板所需2m時(shí)鐘和幀同步信號(hào)。單板通過(guò)雙端口與背板進(jìn)行數(shù)據(jù)交換,通過(guò)dx1000與背板進(jìn)行鏈路交換。另外,單板還提供調(diào)試串口和網(wǎng)口。基本的工作流程為:背板信號(hào)通過(guò)隔離器進(jìn)入雙口ram,通過(guò)共享信箱的方式與主cpu通信。上電后,在boot flash的引導(dǎo)下完成系統(tǒng)的初始化。工作中,cpu從共享信箱接受命令后,發(fā)出指令,經(jīng)fpga作處理后到達(dá)dsp模塊,dsp模塊對(duì)數(shù)據(jù)進(jìn)行處理,處理后數(shù)據(jù)經(jīng)dx1000做交換后,送給背板。
多方會(huì)議的實(shí)現(xiàn) 在本文中僅使用多通道串口0和hpi來(lái)實(shí)現(xiàn)最多32方通話。首先要在dsp中開(kāi)辟一個(gè)系統(tǒng)信箱,用于存放dsp與mpc860的握手聯(lián)絡(luò)字,以及對(duì)話音進(jìn)行疊加或比大處理的控制字n,n=0表示對(duì)所有與會(huì)通道進(jìn)行疊加處理,n≠0表示對(duì)所有與會(huì)通道進(jìn)行比大處理。所謂的多方會(huì)議功能就是通過(guò)把多個(gè)輸入話音通道疊加到一個(gè)輸出話音通道上來(lái)實(shí)現(xiàn)的。因此,每個(gè)輸出通道可以用兩個(gè)字(32比特)來(lái)控制相應(yīng)的32個(gè)輸入通道是否要疊加到該通道上來(lái),1表示疊加(即參加會(huì)議),0表示不疊加(即不參加會(huì)議)。32個(gè)通道共64個(gè)字。如果相疊加的話音通道較多時(shí),dsp也可以選擇音量最大的發(fā)送。所以,用戶既可以聽(tīng)到所有與會(huì)人員的話音,也可以選擇聽(tīng)到話音最大成員,方便又靈活。 多方會(huì)議的數(shù)據(jù)來(lái)源為dsp的多通道串口0的接收寄存器drr10。每次數(shù)據(jù)到來(lái)時(shí),就會(huì)產(chǎn)生中斷rint0,因此,程序可以把從串口drr10讀出的數(shù)據(jù)存到緩沖區(qū)drr buf里面,每幀數(shù)據(jù)到來(lái),讀取一下命令信箱,從而對(duì)該幀數(shù)據(jù)進(jìn)行處理。當(dāng)接收完一幀數(shù)據(jù)時(shí),主程序會(huì)自動(dòng)把數(shù)據(jù)送去處理,根據(jù)命令信箱所包含的時(shí)隙數(shù),完成對(duì)該語(yǔ)音信號(hào)的處理。依據(jù)多方會(huì)議中包含的成員所對(duì)應(yīng)的時(shí)隙數(shù),將一個(gè)會(huì)議中所包含的語(yǔ)音數(shù)據(jù)提取出來(lái)。如果控制字n為0,就把所有成員的話音疊加起來(lái)發(fā)送,如果控制字n不為0, 對(duì)它們進(jìn)行比大處理,把話音最大的發(fā)送。也就是說(shuō),一個(gè)用戶應(yīng)該聽(tīng)到其他成員中話音最大的那一個(gè)。將處理后的數(shù)據(jù)填入發(fā)送數(shù)據(jù)緩沖區(qū)中。語(yǔ)音數(shù)據(jù)的發(fā)送采用與接收相同的方法。每次把準(zhǔn)備好的數(shù)據(jù)放到數(shù)據(jù)發(fā)送緩沖區(qū)dxr buf,每產(chǎn)生一次接收中斷xint0,就從緩沖區(qū)取出準(zhǔn)備好的數(shù)據(jù),送到dxr10,完成對(duì)pcm話音鏈路的數(shù)據(jù)發(fā)送。主要的處理流程如圖2:該處理流程首先對(duì)dsp及其串口進(jìn)行初始化,然后和通過(guò)hpi和主機(jī)握手,判斷是否接收完一幀數(shù)據(jù)。如果沒(méi)有接收完,返回繼續(xù)等待。如果接收完一幀數(shù)據(jù),則dsp查看命令信箱,調(diào)用process按照主機(jī)的命令字n對(duì)語(yǔ)音信號(hào)進(jìn)行處理。處理完以后返回等待,重復(fù)上一過(guò)程,直到32路都處理完。process的處理流程如圖3。
附 process的源程序:process:
stm #82h,ar4 ;地址82h中存放
命令控制字n
ld *ar4,a
bc add_process,aeq
cmp_process:
dld *ar1+,a ;ar1指向通道控
制字,加載控制字
nop
nop
xc 2,aeq
st #0,*ar3+%
nop
bc one_over,aeq
ld r_ptr,b ;r_ptr為接收數(shù)
據(jù)塊頭指針