2 軟件實現(xiàn)
網(wǎng)絡(luò)語音終端系統(tǒng)軟件部分主要由系統(tǒng)初始化、語音采集播放模塊、網(wǎng)絡(luò)通信模塊等部分構(gòu)成。
2.1 系統(tǒng)初始化
使用UDA1341TS芯片與I)M9000CEP芯片之前,需要對芯片內(nèi)部的寄存器進行初始化。
DM9000CEP芯片的初始化設(shè)置工作方式:通過CMD與ADDR2引腳相連,高電平時為數(shù)據(jù)端口,低電平時為地址端口。CS與NGCS4引腳相連,選擇DM9000CEP的端口基址為0x2000 0000,偏移300個單位。發(fā)送給DM9000的地址信息固定放在0x2000 0300上,把存放在該地址的數(shù)據(jù)放在0x2000 0304,采用此方式可對DM9000CEP內(nèi)部的寄存器進行操作,如啟動、復(fù)位、TX控制、RX控制以及MAC地址初始化等。其代碼如下:
UDA1341TS芯片的初始化工作需要與L3的總線連接,該L3總線是MCU通過GPB2、GPB3、GPB4三個引腳來模擬控制,用于處理器配置UDA1341內(nèi)部的寄存器。UDA1341有兩種模式:地址模式和數(shù)據(jù)傳輸模式。地址模式表示傳輸?shù)氖堑刂沸畔,它的?位永遠是000101,低兩位用來表明模式是狀態(tài)模式、數(shù)據(jù)0模式還是數(shù)據(jù)1模式,其中狀態(tài)模式主要用于配置UDA1341的各類初始狀態(tài):采用頻率、ADC、DAC等;數(shù)據(jù)模式主要用于改善音頻輸入、輸出的效果、音量大小調(diào)節(jié)等。
此外,要初始化S3C2440芯片內(nèi)部的特殊寄存器,對I2S、DMA、中斷相關(guān)的各個寄存器進行初始化設(shè)置,以及各個引腳功能的設(shè)置,如把GPF7引腳設(shè)置為EINT7外部中斷功能引腳,當(dāng)以太網(wǎng)網(wǎng)卡接收到數(shù)據(jù),此引腳電平就會因中斷跳變以使程序進入網(wǎng)卡中斷接收處理函數(shù)。
2.2 語音采集播放模塊
完成實時語音通話,UDA1341TS芯片在錄音同時也必須完成放音功能。數(shù)據(jù)傳輸使用兩個DMA通道。其錄音過程為:音頻芯片從麥克風(fēng)中拾取聲音信號進行采樣、量化、編碼,把采集到的數(shù)據(jù)通過I2S總線傳給DMA1通道,并通過內(nèi)部總線傳到內(nèi)存緩沖區(qū)中,之后送給處理器處理。放音:內(nèi)存從處理器中獲取數(shù)據(jù),通過內(nèi)部總線傳給DMA2通道,之后通過I2S總線把數(shù)據(jù)傳給音頻芯片送給揚聲器播音。通過采用DMA通道數(shù)據(jù)傳輸方式,處理器不需要花大量時間參與數(shù)據(jù)的傳輸,有充足的時間來處理其他事件。
本設(shè)計需要實現(xiàn)全雙工語音通信功能,本終端采用雙緩存的設(shè)計方法,緩存處理機制以錄音為例,系統(tǒng)在使用緩存2來存放音頻設(shè)備量化好的數(shù)據(jù)時,CPU則處理緩存1的數(shù)據(jù),當(dāng)設(shè)備填充完緩存2,則轉(zhuǎn)向緩存1進行填充,此時CPU處理緩存2的數(shù)據(jù),如此不斷循環(huán)交替,其處理過程如圖4所示。
圖4 雙緩存處理過程
其錄音與播放過程都采用雙緩存設(shè)計方案,以錄音為例,程序流程圖如圖5所示。
圖5 錄音程序流程圖