如何基于ARM9的嵌入式網絡語音通信終端?
本設計需要實現全雙工語音通信功能,本終端采用雙緩存的設計方法,緩存處理機制以錄音為例,系統在使用緩存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輸出信號圖
結語
本文作者利用嵌入式技術開發的網絡語音終端具有可靠性高、控制界面強大以及可擴展性好的特點,使該終端可不通過計算機、直接連上網絡進行數據傳輸,能充分利用現有網絡通道實現快捷的語音通話。
評論