多方會(huì)議技術(shù)在DSP中的實(shí)現(xiàn)
隨著企業(yè)對現(xiàn)代化通信系統(tǒng)的要求越來越高,電話會(huì)議系統(tǒng)在企業(yè)電話系統(tǒng)中的應(yīng)用越來越多,它可以極大地提高企業(yè)工作效率,改善企業(yè)的管理,提升企業(yè)的競爭力。一般傳統(tǒng)電話會(huì)議的實(shí)現(xiàn)均利用企業(yè)內(nèi)部交換機(jī)(pbx)的多方通話功能,但有很大的局限性,特別是參加會(huì)議的人數(shù)有限,一般交換機(jī)不能超過8方,并且操作煩瑣,在使用中有很多不便?;趥鹘y(tǒng)電話會(huì)議系統(tǒng)的這一局限性,本文采用ti公司的tms320c54x芯片來實(shí)現(xiàn)傳統(tǒng)交換機(jī)中的多方通話功能。
tms320c54x系列tms320c54x是ti公司于1996年推出的新一代定點(diǎn)數(shù)字信號處理器。它采用先進(jìn)的修正哈佛結(jié)構(gòu),片內(nèi)有8條總線(1條程序存儲器總線、3條數(shù)據(jù)存儲器總線和4條地址總線)、cpu、在片存儲器和在片外圍電路等硬件,加上高度專業(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ān)寄存器進(jìn)行配置。c54x還提供一個(gè)主機(jī)接口(hpi)。hpi是一個(gè)8位并行口,用來與主設(shè)備或主處理器接口。外部主機(jī)是hpi的主控者,它可以通過hpi直接訪問cpu的存儲空間,包括存儲器映象寄存器。hpi支持主設(shè)備與 c54x之間的高速傳送數(shù)據(jù)。
dsp所在單板dsp所在單板的總體結(jié)構(gòu)如圖1所示,mpc860作為單板的主處理器,用來管理單板的運(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í)鐘和幀同步信號。單板通過雙端口與背板進(jìn)行數(shù)據(jù)交換,通過dx1000與背板進(jìn)行鏈路交換。另外,單板還提供調(diào)試串口和網(wǎng)口?;镜墓ぷ髁鞒虨椋罕嘲逍盘柾ㄟ^隔離器進(jìn)入雙口ram,通過共享信箱的方式與主cpu通信。上電后,在boot flash的引導(dǎo)下完成系統(tǒng)的初始化。工作中,cpu從共享信箱接受命令后,發(fā)出指令,經(jīng)fpga作處理后到達(dá)dsp模塊,dsp模塊對數(shù)據(jù)進(jìn)行處理,處理后數(shù)據(jù)經(jīng)dx1000做交換后,送給背板。
多方會(huì)議的實(shí)現(xiàn) 在本文中僅使用多通道串口0和hpi來實(shí)現(xiàn)最多32方通話。首先要在dsp中開辟一個(gè)系統(tǒng)信箱,用于存放dsp與mpc860的握手聯(lián)絡(luò)字,以及對話音進(jìn)行疊加或比大處理的控制字n,n=0表示對所有與會(huì)通道進(jìn)行疊加處理,n≠0表示對所有與會(huì)通道進(jìn)行比大處理。所謂的多方會(huì)議功能就是通過把多個(gè)輸入話音通道疊加到一個(gè)輸出話音通道上來實(shí)現(xiàn)的。因此,每個(gè)輸出通道可以用兩個(gè)字(32比特)來控制相應(yīng)的32個(gè)輸入通道是否要疊加到該通道上來,1表示疊加(即參加會(huì)議),0表示不疊加(即不參加會(huì)議)。32個(gè)通道共64個(gè)字。如果相疊加的話音通道較多時(shí),dsp也可以選擇音量最大的發(fā)送。所以,用戶既可以聽到所有與會(huì)人員的話音,也可以選擇聽到話音最大成員,方便又靈活。 多方會(huì)議的數(shù)據(jù)來源為dsp的多通道串口0的接收寄存器drr10。每次數(shù)據(jù)到來時(shí),就會(huì)產(chǎn)生中斷rint0,因此,程序可以把從串口drr10讀出的數(shù)據(jù)存到緩沖區(qū)drr buf里面,每幀數(shù)據(jù)到來,讀取一下命令信箱,從而對該幀數(shù)據(jù)進(jìn)行處理。當(dāng)接收完一幀數(shù)據(jù)時(shí),主程序會(huì)自動(dòng)把數(shù)據(jù)送去處理,根據(jù)命令信箱所包含的時(shí)隙數(shù),完成對該語音信號的處理。依據(jù)多方會(huì)議中包含的成員所對應(yīng)的時(shí)隙數(shù),將一個(gè)會(huì)議中所包含的語音數(shù)據(jù)提取出來。如果控制字n為0,就把所有成員的話音疊加起來發(fā)送,如果控制字n不為0, 對它們進(jìn)行比大處理,把話音最大的發(fā)送。也就是說,一個(gè)用戶應(yīng)該聽到其他成員中話音最大的那一個(gè)。將處理后的數(shù)據(jù)填入發(fā)送數(shù)據(jù)緩沖區(qū)中。語音數(shù)據(jù)的發(fā)送采用與接收相同的方法。每次把準(zhǔn)備好的數(shù)據(jù)放到數(shù)據(jù)發(fā)送緩沖區(qū)dxr buf,每產(chǎn)生一次接收中斷xint0,就從緩沖區(qū)取出準(zhǔn)備好的數(shù)據(jù),送到dxr10,完成對pcm話音鏈路的數(shù)據(jù)發(fā)送。主要的處理流程如圖2:該處理流程首先對dsp及其串口進(jìn)行初始化,然后和通過hpi和主機(jī)握手,判斷是否接收完一幀數(shù)據(jù)。如果沒有接收完,返回繼續(xù)等待。如果接收完一幀數(shù)據(jù),則dsp查看命令信箱,調(diào)用process按照主機(jī)的命令字n對語音信號進(jìn)行處理。處理完以后返回等待,重復(fù)上一過程,直到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ù)塊頭指針