傳統的語音通信是以公共交換電話網(PSTN)為語音系統進行話音交流,該系統以電路交換為通信基礎,信道利用率低、通信資費較高。而隨著通信技術和網絡的快速發展,越來越多的用戶采用IP網絡進行語音通信與視頻通話,該通信系統采用分組交換為基礎,具有靈活的業務擴展能力和低廉的話費價格。從2013年開始到如今,工信部已經發放了兩批虛擬運營商牌照,此舉必然會進一步推動國內市場的網絡語音發展。 本文采用嵌入式處理器、以太網控制芯片、音頻處理芯片設計出一款語音通信終端,該終端通過音頻采集、播放語音、處理器進行數據處理,通過網卡進行數據傳送與接收,從而實現終端的語音通信功能。 1 硬件電路設計 網絡語音終端系統硬件由微處理器、以太網通信模塊、音頻處理模塊、電源等模塊組成。該終端系統各個模塊之間進行數據交互的示意圖如圖1所示。 圖1 系統模塊數據交互圖 網絡語音終端啟動音頻模塊后,從麥克風拾取語音進行A/D轉換采集,把語音信號轉換為數字信號,經I2S總線送給處理器處理,并通過以太網通信模塊把數據發送到IP網絡上;從IP網絡上把數據取出,經處理器處理后,由I2S總線送給音頻模塊進行D/A轉換,然后把語音信號送給揚聲器播放語音。 系統采用S3C2440微處理器實現數據處理,利用DM9000CEP以太網控制芯片來實現與IP網交互,并且采用UDA1341TS音頻芯片進行語音采集及播放。其他接口電路比較常見,這里不再贅述。 1.1 以太網通信模塊 主控芯片采用三星公司的S3C2440通用32位微處理器,該處理器采用ARM920內核,具有低功耗、處理計算能力強等特點。以太網控制芯片采用DAVICOM(聯杰)公司的DM9000CEP芯片。該芯片支持16位數據傳輸,集成10/100M自適應收發器,可以自動協調功能將自動完成配置以最大限度地適合其線路帶寬,且支持IEEE802.3x全雙工流量控制。 為實現DM9000CEP與S3C2440的連接,對兩者間的數據、地址、控制三大總線進行連接和轉換。由于S3C2440是32位微處理器,可尋址1G的地址空間,但其只有27根地址線,理論上只能尋址2的27次方(即128M)的地址范圍。所以引出了8根BANK線(對應nGCS0~nGCS7),用這8根線來選通和關閉不同的存儲器,實現1G地址空間的尋址。本文DM9000與S3C2440之間數據交換,是通過NGCS4線選擇基址為0x2000 0000來實現的。圖2給出了S3C2440與DM9000CEP的連接方法。 圖2 DM9000CEP與S3C2440的接口圖 1.2 音頻處理模塊 音頻處理芯片選用Philips公司的UDA1341TS音頻芯片,該芯片內部集成了立體聲的ADC、DAC,可以實現模擬信號和數字信號的相互轉換,并可用可編程增益控制(PGA)和自動增益控制(AGC)來對模擬信號進行控制,該芯片還提供數字信號處理功能。微處理器通過L3總線接口對音頻芯片進行控制。其與處理器連接圖如圖3所示。 圖3 UDA1341TS與S3C2440的接口圖 UDA1341TS音頻芯片提供一組I2S總線接口和一組L3總線接口。其中,I2S總線接口包括音頻系統時鐘線(SYSCLK)、位時鐘輸入信號線(BCK)、字選擇輸入線(WS)、數據輸出信號線(DATAO)、數據輸入信號線(DATAI)。而L3總線接口由時鐘線、數據線以及模式選擇線組成。S3C 2440處理器通過這兩組總線接口實現與UDA1341TS芯片之間的音頻數據交互及控制。 2 軟件實現 網絡語音終端系統軟件部分主要由系統初始化、語音采集播放模塊、網絡通信模塊等部分構成。 2.1 系統初始化 使用UDA1341TS芯片與I)M9000CEP芯片之前,需要對芯片內部的寄存器進行初始化。 DM9000CEP芯片的初始化設置工作方式:通過CMD與ADDR2引腳相連,高電平時為數據端口,低電平時為地址端口。CS與NGCS4引腳相連,選擇DM9000CEP的端口基址為0x2000 0000,偏移300個單位。發送給DM9000的地址信息固定放在0x2000 0300上,把存放在該地址的數據放在0x2000 0304,采用此方式可對DM9000CEP內部的寄存器進行操作,如啟動、復位、TX控制、RX控制以及MAC地址初始化等。其代碼如下: UDA1341TS芯片的初始化工作需要與L3的總線連接,該L3總線是MCU通過GPB2、GPB3、GPB4三個引腳來模擬控制,用于處理器配置UDA1341內部的寄存器。UDA1341有兩種模式:地址模式和數據傳輸模式。地址模式表示傳輸的是地址信息,它的高6位永遠是000101,低兩位用來表明模式是狀態模式、數據0模式還是數據1模式,其中狀態模式主要用于配置UDA1341的各類初始狀態:采用頻率、ADC、DAC等;數據模式主要用于改善音頻輸入、輸出的效果、音量大小調節等。 此外,要初始化S3C2440芯片內部的特殊寄存器,對I2S、DMA、中斷相關的各個寄存器進行初始化設置,以及各個引腳功能的設置,如把GPF7引腳設置為EINT7外部中斷功能引腳,當以太網網卡接收到數據,此引腳電平就會因中斷跳變以使程序進入網卡中斷接收處理函數。 2.2 語音采集播放模塊 完成實時語音通話,UDA1341TS芯片在錄音同時也必須完成放音功能。數據傳輸使用兩個DMA通道。其錄音過程為:音頻芯片從麥克風中拾取聲音信號進行采樣、量化、編碼,把采集到的數據通過I2S總線傳給DMA1通道,并通過內部總線傳到內存緩沖區中,之后送給處理器處理。放音:內存從處理器中獲取數據,通過內部總線傳給DMA2通道,之后通過I2S總線把數據傳給音頻芯片送給揚聲器播音。通過采用DMA通道數據傳輸方式,處理器不需要花大量時間參與數據的傳輸,有充足的時間來處理其他事件。 本設計需要實現全雙工語音通信功能,本終端采用雙緩存的設計方法,緩存處理機制以錄音為例,系統在使用緩存2來存放音頻設備量化好的數據時,CPU則處理緩存1的數據,當設備填充完緩存2,則轉向緩存1進行填充,此時CPU處理緩存2的數據,如此不斷循環交替,其處理過程如圖4所示。 圖4 雙緩存處理過程 其錄音與播放過程都采用雙緩存設計方案,以錄音為例,程序流程圖如圖5所示。 圖5 錄音程序流程圖 2.3 網絡通信模塊 處理器首先將從麥克風采樣的數據信號封裝成規定格式(其封裝步驟如圖6所示,封裝到14字節以太網層),然后把封裝好的數據交給DM 9000CEP驅動部分的發送函數dm_tran_packet(unsigned char*datas,intlength),通過設置TCR的發送請求位將數據發送出去,數據發送過程就是對數據打包的過程。而數據的接收是通過DM9000CEP的網絡中斷函數DM9000ISR()進行的,網卡每接到一個數據包將會產生一個中斷,進入中斷處理函數,按規定的格式從數據包中取出其語音數據,之后數據經處理器處理送到揚聲器上播放外音。網絡各層數據封裝如圖6所示。 圖6 數據封裝示意圖 語音數據進行封裝之后,不管是發送數據幀還是接收數據幀,都需要底層網卡驅動函數提供服務,本文以發送數據幀為例,簡述底層網卡驅動原理,在發送數據和接收數據過程中,特別需要注意的是關閉網卡中斷,以防打斷數據處理過程。DM9000CEP內部有3 KB的SRAM用于 發送數據緩存。在發送之前,數據是暫存在這個SRAM中的。當需要連續發送時,需要用DM9000CEP寄存器MWCMD賦予數據端口,這樣就指定了SRAM中的某個地址,并且在傳輸完一個數據后,指針會指向SRAM中的下一個地址,從而達到連續訪問數據的目的。如果在此過程中到達發送數據緩沖區末尾,指針將折回緩沖區的開頭。發送數據幀的流程圖如圖7所示。 圖7 發送數據幀流程 3 終端語音測試結果 使用ADS軟件將程序編譯成可執行文件,下載到語音終端A和B上。在兩個終端分別接上麥克風和耳麥進行話音通信,通過實驗驗證了系統可以進行清晰的語音對話。另外,可將終端A的麥克風接口與函數信號發生器相接,終端B的揚聲器接口與示波器相連。函數信號發生器將正弦信號送給終端A,其頻率為1 kHz,幅度為100mVpp。在示波器上可以看到經放大的正弦信號,其輸出信號波形如圖8所示。測試結果表明,該網絡語音終端系統可以應用于遠程網絡語音通信。 圖8 終端B輸出信號圖 結語 本文作者利用嵌入式技術開發的網絡語音終端具有可靠性高、控制界面強大以及可擴展性好的特點,使該終端可不通過計算機、直接連上網絡進行數據傳輸,能充分利用現有網絡通道實現快捷的語音通話。 |