VoIP(Voice over IP)由于其在IP網(wǎng)絡(luò)中實(shí)現(xiàn)語(yǔ)音通信,促進(jìn)了網(wǎng)絡(luò)資源的利用,,降低了語(yǔ)音業(yè)務(wù)成本,,在全球范圍內(nèi)得到了迅速的發(fā)展。802.11無(wú)線局域網(wǎng)(WLAN) 將用戶從有線的網(wǎng)絡(luò)連接中解放出來(lái),。在企業(yè)中部署WLAN網(wǎng)絡(luò)之后建立VoIP的應(yīng)用,,并不需要對(duì)現(xiàn)有的網(wǎng)絡(luò)進(jìn)行改造就能滿足在企業(yè)內(nèi)部進(jìn)行語(yǔ)音通信的需求,并且滿足下一代移動(dòng)通信應(yīng)用在單一網(wǎng)絡(luò)內(nèi)進(jìn)行數(shù)據(jù),、語(yǔ)音,、多媒體的傳輸?shù)陌l(fā)展方向。本文將VoIP和WLAN(Wireless LAN)結(jié)合到一起,,在MIPS(Microprocessor without Interlocked PipelineStages)架構(gòu)的處理器ADM5120上實(shí)現(xiàn)了在無(wú)線局域網(wǎng)內(nèi)進(jìn)行IP通話的功能,。系統(tǒng)以終端的形式進(jìn)行通信,可移動(dòng)性強(qiáng),。
1 系統(tǒng)硬件的設(shè)計(jì)
1.1 硬件的整體架構(gòu)
系統(tǒng)硬件的整體架構(gòu)設(shè)計(jì)如圖1所示。系統(tǒng)硬件主要由五部分組成:ADM5120 主處理器部分、通話控制部分,、無(wú)線子卡部分,、存儲(chǔ)部分和外設(shè)連接部分。通話控制部分采用Infineon公司語(yǔ)音芯片VINETIC- 2CPE,,Version 2.1(PEB3322)為子處理器,,外接A/D,D/A轉(zhuǎn)換功能的用戶接口電路SLIC-DC PEB4268,,與存儲(chǔ)部分一起構(gòu)成語(yǔ)音實(shí)時(shí)處理骨架,;無(wú)線子卡部分采用Atheros公司的WMIA-165G 802.11g Mini PCI模塊,并用Madwifi驅(qū)動(dòng)無(wú)線子卡,;存儲(chǔ)部分使用2塊SDRAM存儲(chǔ)器和1塊NOR FLASH存儲(chǔ)器,;外設(shè)連接部分包括一個(gè)WAN口和四個(gè)LAN口、Mini-PCI接口,、輸出模擬電話信號(hào)的RJ-11接口,,以及用于調(diào)試的RS 232串口。
1.2 ADM5120主處理器
德國(guó)Infineon公司的 ADM5120是一款基于哈佛體系結(jié)構(gòu)的SoC(片上系統(tǒng))的嵌入式處理器,,具有5級(jí)流水線,,并使用了32位MIPS指令集。同時(shí)ADM5120還是一款典型的寄存器型微處理器,,其配置了32個(gè)通用寄存器和一對(duì)存儲(chǔ)64位數(shù)據(jù)的寄存器Hi和Lo以及異常PC寄存器,,其中Hi和Lo寄存器用于存放定點(diǎn)乘法的結(jié)果。ADM5120中還內(nèi)置了32/16位MIPS32 4KEC處理器,,其采用TLB(TranslationLookaside Buffer)實(shí)現(xiàn)了內(nèi)存管理和流水線中的異常處理功能,,并使用馮·諾依曼結(jié)構(gòu)在內(nèi)存和寄存器之間傳輸數(shù)據(jù),提高了數(shù)據(jù)的傳輸效率,,加快了程序的執(zhí)行速度,。另外,ADM5120還集成了多種外圍部件,,主要有:PCI(Peripheral Component Interconnect)總線接口,,5個(gè)100 Mb/s的以太網(wǎng)接口,并且還配置了ADM5120內(nèi)置的PHY芯片,,內(nèi)嵌了16 MB/85 MHzSDRAM存儲(chǔ)器,,給系統(tǒng)設(shè)計(jì)提供了很大的方便。
在本系統(tǒng)中,,微控制器接口(非緩沖接口)與VINETIC,,F(xiàn)ALSH- RAM,SDRAM并行連接,,并分別使用8 B,,16 B,,32 B的總線寬度。ADM5120通過(guò)微控制器接口控制與之相連的VINETIC并將語(yǔ)音數(shù)據(jù)從WLAN接口傳給VINETIC,,反之亦然,。ADM5120的通用輸入/輸出端口GPIOs控制VINETIC的復(fù)位信號(hào)并為VINETIC生成片選信號(hào),同時(shí)GPIOs還作為VINETIC準(zhǔn)備功能和中斷信號(hào)的輸入,。而連接到ADM5120的LED指示燈顯示W(wǎng)AN口和LAN口連接狀態(tài)以及模擬輸出接口的模擬線路狀態(tài),。
1.3 VINETIC語(yǔ)音模塊
VINETIC(Voice and Internet EnhanceTelephony Interface Circuit)是Infineon公司的一款語(yǔ)音處理模塊,它將編解碼器和語(yǔ)音處理功能集成在一起,,能達(dá)到與傳統(tǒng)語(yǔ)音服務(wù)相同的語(yǔ)音質(zhì)量,。 VINETIC處理模擬電話信號(hào),語(yǔ)音壓縮包,,并提供實(shí)時(shí)壓縮包的緩沖,,具有自適應(yīng)回聲抵消,靜音檢測(cè),,DTMF信號(hào)產(chǎn)生,、譯碼等功能。
VINETIC 芯片的主接口電路如圖2所示,。其中4和5為片選輸入端,;AD0~AD7:雙向的輸入/輸出信號(hào),相應(yīng)的引腳有3種運(yùn)行狀態(tài):低電平,、高電平或高阻抗,,當(dāng) CSQ為高電平時(shí),DOUT呈高阻狀態(tài),,此時(shí)需要外接10 kΩ的上拉電阻,;28和29輸出數(shù)字電平,漏極開(kāi)路,,相應(yīng)的引腳有2種運(yùn)行狀態(tài):低電平有效或三態(tài),,并允許多個(gè)設(shè)備共享為線或。芯片供電電路部分:66外接鎖相環(huán)路,,此鎖相環(huán)重要地影響到芯片的總性能,,因此應(yīng)特別注意對(duì)鎖相環(huán)供電的濾波器;64將鎖相環(huán)接地,。
1.4 存儲(chǔ)模塊
系統(tǒng)存儲(chǔ)模塊包括1塊NOR FLASH芯片MX29LV320和2塊SDRAM芯片W986432DH,。MX29LV320的引腳分布如圖3所示。
其中A0~A20: 地址輸入,;DQ0~DQ14:數(shù)據(jù)輸入/輸出,;DQ15/A-1:DQ15(按字模式進(jìn)行數(shù)據(jù)的輸入/輸出),A-1(按字節(jié)模式進(jìn)行最低有效位地址輸入),;CE:切片啟動(dòng)輸入,;WE:寫啟動(dòng)輸入,;OE:輸出啟動(dòng)輸入;RESET:硬件重啟引腳,,低電平有效,;RY/BY:讀/忙輸出,連接到主處理器ADM5120的RDY引腳以提高速度,。
W986432DH的引腳分布如圖4所示。其中A0~A10:地址引腳,;BS0和 BS1:存儲(chǔ)體選擇,;DQ0~DQ31:數(shù)據(jù)輸入/輸出的復(fù)用引腳;RAS:行地址選通,;CAS:列地址選通,;WE:允許寫入,命令輸入,,當(dāng)在RAS時(shí)鐘上升沿取樣時(shí),,CAS和WE確定操作將被執(zhí)行;DQM0~DQM3:輸入/輸出掩碼,,當(dāng)DQM在讀周期高電平采樣時(shí)輸出緩沖區(qū)置于高阻抗(2個(gè)時(shí)延),,而在寫周期采樣將零時(shí)延地阻止寫操作;CLK:在時(shí)鐘上升沿抽樣輸入,;CKE:時(shí)鐘啟動(dòng),,當(dāng)CKE為低時(shí),進(jìn)入掉電模式,、暫停模式或自我充電模式,。
2 系統(tǒng)軟件的設(shè)計(jì)與實(shí)現(xiàn)
系統(tǒng)軟件設(shè)計(jì)的整體架構(gòu)如圖5所示,其在無(wú)線局域網(wǎng)內(nèi)實(shí)現(xiàn)了基于ADM5120的UDP方式點(diǎn)對(duì)點(diǎn)通訊和廣播通訊,。UDP(User Datagram Protocol,,用戶數(shù)據(jù)報(bào)協(xié)議)主要用來(lái)支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用例如網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)等都需要使用UDP協(xié)議,。UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層,,屬于網(wǎng)絡(luò)協(xié)議中的傳輸層協(xié)議。由于UDP協(xié)議不需建立連接,,具有效率高,、速度快和占用資源少等優(yōu)點(diǎn),應(yīng)用于消息通信和實(shí)時(shí)系統(tǒng)中可以提高系統(tǒng)傳輸數(shù)據(jù)的效率,。UDP具有組播和廣播功能,,是分發(fā)信息的一個(gè)理想?yún)f(xié)議。本系統(tǒng)還移植了一種基于 ADM5120的嵌入式Web服務(wù)器boa,,實(shí)現(xiàn)了對(duì)VoIP系統(tǒng)進(jìn)行基于B/S方式的Web配置,。
2.1 點(diǎn)對(duì)點(diǎn)通訊的實(shí)現(xiàn)
在本系統(tǒng)中,,在一個(gè)網(wǎng)段內(nèi)的任意兩個(gè)應(yīng)用程序之間可以進(jìn)行全雙工通信,每個(gè)應(yīng)用程序既可做為服務(wù)器又可做為客戶端,。其UDP編程步驟如圖6所示,,以下是兩個(gè)應(yīng)用程序A和B之間進(jìn)行點(diǎn)對(duì)點(diǎn)通訊的具體實(shí)現(xiàn)過(guò)程:
(1)雙方分別建立socket,調(diào)用socket函數(shù):
s=socket(PF_INET,,SOCK_DGRAM,,0)
SOCK_DGRAM 表示套接字類型為數(shù)據(jù)報(bào)套接字,即采用UDP協(xié)議進(jìn)行通信,。
(2)綁定已設(shè)置好的自己的地址和端口信息,,調(diào)用bind函數(shù):
bind(s, (struct sockaddr*)&my_addr,,sizeof(structsockaddr))
(3)將select 函數(shù)置于阻塞狀態(tài),,直到監(jiān)視文件描述符集合rfds中某個(gè)文件描述符發(fā)生變化為止:
select(pCtrl->rwd+1,&rfds,,IFX_NULL,,IFX_NULL,NULL)
(4) 數(shù)據(jù)傳輸:sendto()和recvfrom()用于在無(wú)連接的數(shù)據(jù)報(bào)socket方式下進(jìn)行數(shù)據(jù)傳輸,。由于本地socket并沒(méi)有與遠(yuǎn)端機(jī)器建立連接,,所以在發(fā)送數(shù)據(jù)時(shí)應(yīng)指明目的地址。如圖6所示,,A作為發(fā)送方,,通過(guò)其套接字用函數(shù)sendto()將其服務(wù)請(qǐng)求數(shù)據(jù)發(fā)送到接收方B的指定端口,B通過(guò)其套接字用函數(shù)recvfrom()接收數(shù)據(jù),,處理好服務(wù)請(qǐng)求后又將服務(wù)應(yīng)答發(fā)回A,,此時(shí)A便成了接收方,A接收應(yīng)答后還可繼續(xù)發(fā)送數(shù)據(jù)給B,。
2.2 廣播通訊的實(shí)現(xiàn)
廣播和多播都用于實(shí)現(xiàn)向多個(gè)接收者發(fā)送UDP數(shù)據(jù)報(bào),,但是廣播不像多播那樣在接收端有復(fù)雜的控制過(guò)程,因而實(shí)現(xiàn)比多播簡(jiǎn)單的多,。以下廣播通訊的實(shí)現(xiàn)均在點(diǎn)對(duì)點(diǎn)通訊的基礎(chǔ)上實(shí)現(xiàn)的,。
在發(fā)送方,只需要設(shè)置套接字socket的選項(xiàng)為允許發(fā)送廣播,,然后在發(fā)送時(shí)指定目的IP為廣播地址即可,。具體地,允許socket廣播通過(guò)setsockopt函數(shù)設(shè)置廣播選項(xiàng)來(lái)實(shí)現(xiàn),,當(dāng)setsockopt參數(shù)optname 為SO_BROADCAST時(shí),,表示打開(kāi)或禁止從該socket廣播,當(dāng)參數(shù)optval為1時(shí)允許廣播,為0時(shí)禁止廣播,。
系統(tǒng)編程實(shí)現(xiàn)廣播的部分源碼為:
int bBroadcast="1":
setsockopt(pCtrl-->nAdminSocket,,SOL_SOCKET,SO_BROADCAST,,&bBroadcast,,sizeof(bBroadcast));
setsockopt(pConn-->nUsedSocket,,SOL_SOCKET,,SO_BROADCAST,&bBroadcast,,sizeof(bBroadcast)),;
tO_addr.sin_addr.s_addr=inet_addr(WIRLESS_IP_BROADCAST);
?。?WIRLESS_ IP_BROADCAST 為廣播地址,其值是將網(wǎng)絡(luò)接口(本系統(tǒng)為ath0)IP地址的主機(jī)ID部分設(shè)置為全1,,網(wǎng)絡(luò)ID部分不變而得到*/
tO_addr.sin_family=AF_INET,;
據(jù)文獻(xiàn)[7]所講,在接收方,,一般不需做任何改動(dòng)即可收到廣播,。但在本系統(tǒng)實(shí)現(xiàn)的實(shí)驗(yàn)過(guò)程中,當(dāng)將socket綁定到非INADDR_ANY的IP地址時(shí),,接收方無(wú)法收到廣播,,并且沒(méi)有任何錯(cuò)誤指示,即需要綁定本地端口地址到通配地址INADDR_ANY才可接收廣播:
my_addr.sin_addr.s_addr=htonl(INADDR_ANY),;
另外,,本系統(tǒng)還實(shí)現(xiàn)了廣播強(qiáng)插功能,即不管用戶當(dāng)前處于摘機(jī),、撥號(hào)狀態(tài),,還是處于通話狀態(tài),當(dāng)有廣播來(lái)電時(shí),,都斷開(kāi)原來(lái)的連接而與廣播主叫建立新的連接(用戶不用掛機(jī)),。為了防止通話混亂,本系統(tǒng)設(shè)定同一時(shí)刻只有擁有廣播控制權(quán)的用戶有發(fā)言權(quán),,而其他用戶能聽(tīng)不能說(shuō),,當(dāng)其他用戶想發(fā)言時(shí),只要按下“*”鍵就搶到了廣播控制權(quán),,最后只有當(dāng)擁有廣播控制權(quán)的用戶掛機(jī)時(shí),,廣播才停止,而任一其他用戶掛機(jī),,不影響廣播通訊繼續(xù)進(jìn)行,。
系統(tǒng)編程實(shí)現(xiàn)廣播強(qiáng)插的部分源碼見(jiàn)表1和表2,。
3 結(jié) 語(yǔ)
該系統(tǒng)設(shè)計(jì)完成后,成功地應(yīng)用于常德市某一電廠,,進(jìn)行生產(chǎn)調(diào)度,,系統(tǒng)能實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通訊和廣播通訊,并且通話質(zhì)量良好,,基本無(wú)雜音和抖動(dòng),。
本系統(tǒng)因自帶無(wú)線網(wǎng)卡可以自組織網(wǎng)絡(luò),它可以作為一種無(wú)線指令調(diào)度機(jī)被應(yīng)用到通信蔽塞的工廠,,另外還可外接喇叭自動(dòng)接聽(tīng)電話,,機(jī)器操作員不用停下手中的工作就可照指令進(jìn)行相應(yīng)的操作。另外,,本系統(tǒng)應(yīng)用可拓展性好,,如:系統(tǒng)可通過(guò)PCM通道進(jìn)行FXO連接從而實(shí)現(xiàn)與傳統(tǒng)PSTN互通(見(jiàn)圖1);在本系統(tǒng)上移植SIP協(xié)議棧便可實(shí)現(xiàn)與WIFI手機(jī)互通,;將本系統(tǒng)整合到Ad Hoc網(wǎng)絡(luò)中,,基于Ad Ioc網(wǎng)絡(luò)的各類移動(dòng)終端設(shè)備便可應(yīng)運(yùn)而生,因此本系統(tǒng)具有廣闊的市場(chǎng)前景,。