基于μClinux的IP電話(huà)
基于μClinux的IP電話(huà)
復旦大學(xué)
參賽隊員:邱衛東、諶勇輝、盧德良
指導老師:彭澄廉
一、系統概述
IP是國際互聯(lián)網(wǎng)協(xié)議(Internet Protocol)的簡(jiǎn)稱(chēng),IP 電話(huà)是按照國際互聯(lián)網(wǎng)協(xié)議規定的網(wǎng)絡(luò )技術(shù)開(kāi)通的電話(huà)業(yè)務(wù),它通過(guò)發(fā)送IP包來(lái)傳輸話(huà)音業(yè)務(wù),其基本原理是:通過(guò)語(yǔ)音壓縮算法對話(huà)音進(jìn)行壓縮編碼處理,然后把這些語(yǔ)音數據按IP等相關(guān)協(xié)議進(jìn)行打包,經(jīng)過(guò)IP網(wǎng)絡(luò )把數據包傳輸到目的地,再把這些語(yǔ)音數據包連接起來(lái),經(jīng)過(guò)解碼、解壓縮處理后,恢復成原來(lái)的語(yǔ)音信號,從而達到由IP網(wǎng)絡(luò )傳送話(huà)音的目的。
Internet話(huà)音業(yè)務(wù)正在獲得飛速發(fā)展,其主要原因有以下兩點(diǎn):首先是價(jià)格低廉,相同的通話(huà)時(shí)間,通過(guò)Internet話(huà)音服務(wù)的費用僅僅為通過(guò)傳統話(huà)音服務(wù)費用的幾分之一,甚至幾十分之一;其次,隨著(zhù)技術(shù)的發(fā)展,IP電話(huà)的話(huà)音質(zhì)量有了很大的提高,克服了以往話(huà)音質(zhì)量低劣、延遲長(cháng)、經(jīng)常掉線(xiàn)等缺陷。
目前專(zhuān)家普遍認為VoIP將代表電話(huà)技術(shù)未來(lái)的發(fā)展方向,甚至有這樣的一句話(huà):everything is over IP(一切都將基于IP)。許多人相信IP電話(huà)時(shí)代即將到來(lái),Frost & Sullivan調研公司的報告中預計,到2007年VoIP的通話(huà)量將占全部通話(huà)量的75%,甚至更高一些。
Nios CPU 是一種采用流水線(xiàn)技術(shù)、單指令流的RISC處理器,又是一種軟核CPU,專(zhuān)門(mén)針對可編程邏輯器件進(jìn)行了優(yōu)化,因此是一種可配置的通用RISC處理器,可以與用戶(hù)自定義邏輯結合,構成完整、功能強大的SOC系統,在嵌入式系統的設計中已成為趨勢。
嵌入式操作系統是嵌入式系統的靈魂,可以顯著(zhù)提高軟件開(kāi)發(fā)效率和進(jìn)行軟件復用。針對當前日益復雜的嵌入式系統開(kāi)發(fā),應用操作系統是保證產(chǎn)品面市時(shí)間的關(guān)鍵。嵌入式μClinux操作系統是一種性能優(yōu)良、源碼公開(kāi)且被廣泛應用的的免費嵌入式操作系統,具有高度靈活的可定制內核。
目前尚無(wú)Nios CPU的免費移植版本,為了完成參賽作品,我們自行移植了μClinux操作系統的Nios CPU版本,繼而在μClinux操作系統上完成了IP電話(huà)的設計開(kāi)發(fā)。
二、功能說(shuō)明
基于μClinux的IP電話(huà)分為服務(wù)端(接受方)和客戶(hù)端(呼叫方)。發(fā)起通話(huà)請求的一端稱(chēng)為客戶(hù)端,另一端則為服務(wù)端。根據不同應用場(chǎng)景,服務(wù)端和客戶(hù)端可以調換角色,也就是說(shuō),任意一端都可以發(fā)起通話(huà)請求。
客戶(hù)端發(fā)起通話(huà)請求,輸入服務(wù)端IP地址,兩端通過(guò)網(wǎng)絡(luò )連接成功后,利用麥克風(fēng)和聽(tīng)筒,就可以進(jìn)行通話(huà)了。
本作品的實(shí)現分為硬件和軟件兩個(gè)部分。
硬件部分進(jìn)行A/D、D/A板的開(kāi)發(fā)設計,以實(shí)現電話(huà)語(yǔ)音的數/模和模/數轉換功能。采用AD7811、AD7305等芯片,實(shí)現了A/D,D/A的控制時(shí)序邏輯以及采樣率的設置等功能。
軟件實(shí)現主要包含以下四個(gè)步驟:
第一,將嵌入式操作系統μClinux移植到Nios處理器上。
第二,移植μClinux下的smc lan9111c1網(wǎng)卡驅動(dòng)程序,實(shí)現IP連接。
第三,開(kāi)發(fā)μClinux下語(yǔ)音板(自行開(kāi)發(fā)設計)的驅動(dòng)程序。
第四開(kāi)發(fā)μClinux下的應用程序,實(shí)現IP電話(huà)功能,分別為服務(wù)端和客戶(hù)端應用程序,提供IP電話(huà)的電話(huà)呼叫和等待通話(huà)功能。
三、性能參數
語(yǔ)音板AD7811采用的是Analog公司的一款A/D轉換器,它具有如下一些關(guān)鍵特性:
* 4個(gè)模擬輸入通道;
* 1個(gè)數字輸出通道;
* 分辨率為10位;
* 串行接口;
* 2.5 V內部參考電壓;
* 外部參考電壓范圍為1.2 V_VDD;
* 模擬輸入范圍為0_Vref;
* 可通過(guò)控制寄存器進(jìn)行軟件控制;
* 電源供電范圍為2.7_5 V。
在本系統中用到2個(gè)模擬輸入通道,分辨率采用10位中的8位。
AD7305是Analog公司的一款D/A轉換器,它具有如下一些關(guān)鍵特性:
* 4個(gè)模擬輸出通道;
* 8個(gè)數字輸入通道;
* 分辨率為8位;
* 并行接口;
* 外部參考電壓范圍為VSS_VDD;
* 模擬輸出范圍為VSS_VDD;
* 電源供電范圍為2.7_5 V。
四、系統構成
本作品的體系結構框架如圖1所示,軟件流程圖如圖2所示。
服務(wù)端應用程序
客戶(hù)端應用程序
網(wǎng)卡驅動(dòng)程序
A/D D/A驅動(dòng)程序
μClinux內核
Altera Stratix 1S10
Nios CPU A/D D/A的接口邏輯
語(yǔ)音板
圖1 體系結構
圖2 軟件流程圖
五、設計描述
本系統的設計分為硬件和軟件兩部分,硬件主要是在A(yíng)LTERA的Stratix板上擴充了一塊語(yǔ)音板,用來(lái)接受語(yǔ)音的輸入并實(shí)現模/數的轉換;軟件部分是移植μClinux操作系統,編寫(xiě)A/D板的驅動(dòng)及上層應用程序的開(kāi)發(fā)。
1.硬件部分
在實(shí)現語(yǔ)音模/數轉換時(shí)主要應控制AD7811、AD7305的時(shí)序,在模擬信號輸入時(shí)用運放調整電壓至AD7811能接受的范圍。圖3是語(yǔ)音板時(shí)序控制狀態(tài)轉換圖。
圖3 語(yǔ)音板的序控制狀態(tài)轉換
在這里我們用SOPC Builder提供的用戶(hù)自定義接口來(lái)實(shí)現以下功能:到avalon總線(xiàn)的接口,對A/D、D/A芯片的控制時(shí)序;按特定采樣率進(jìn)行采樣,利用可讀/寫(xiě)寄存器任意更改采樣率;采用內置緩沖存儲采樣數據,每采樣32次才發(fā)出一次中斷,從而減少CPU中斷的次數。
SOPC Builder設置如圖4所示。
圖4 SOPC Builder設置
部分接口邏輯如下:
when read0 => -- read left
if scnt mod 4 = 1 then
data0(i) <= DOUT;
end if;
if scnt=0 then
state <= set1;
scnt <= 39;
else
scnt <= scnt - 1;
end if;
when set1 => -- select right
if scnt=0 then
state <= wait1;
else
scnt <= scnt - 1;
end if;
2.軟件部分
首先成功地移植了操作系統,用來(lái)管理驅動(dòng)與上層應用程序之間的通信。其次,編寫(xiě)A/D的驅動(dòng)以及客戶(hù)端和服務(wù)端的應用程序,這里系統的兩端都能用作客戶(hù)端和服務(wù)端,但要求作為服務(wù)端的應用程序應先啟動(dòng)偵聽(tīng)。
A/D的驅動(dòng)程序主要由以下幾部分組成:讀緩沖區內容、寫(xiě)入緩沖區、產(chǎn)生中斷等。以下是寫(xiě)緩沖的部分示例:
if(w_tail+count<8193) //能一次寫(xiě)完
{
PRINTK("count=%dn",count);
for(i=0;i<count;i++)
{
w++;
get_user(temp,buf+i);
kbuf_w[w]=temp;
}
}else //分兩次寫(xiě)完
{
if(w+count-8193>w_front)printk("kbuf_w full!*****n");
PRINTK("two time:count=%dn",count);
for(i=0;i<8192-w_tail;i++)
{
w++;
get_user(temp,buf+i);
kbuf_w[w]=temp;
}
for(w=0;i<count;i++)
{
w++;
get_user(temp,buf+i);
kbuf_w[w]=temp;
}
}
這里緩沖區的大小是8192個(gè)字節,采用的是環(huán)狀緩沖區。
上層應用程序分為客戶(hù)端和服務(wù)端,在服務(wù)端先啟動(dòng)偵聽(tīng),然后運行客戶(hù)端程序,輸入服務(wù)端IP,建立連接后就能進(jìn)行通信。以下是服務(wù)端程序的部分示例。
while(1)
{
time++;
if((read_cnt=read(audio,buf_r,512))<0)
{
fprintf(stderr,"read from driver error happened or manual quit!n");
break;
}
if(read_cnt==0)continue;
if((nbytes=read(newfd,buf_w+count,1024))<=0)
{
fprintf(stderr,"receive from client Error:%sn",strerror(errno));
break;
}
count+=nbytes/2;
if(write(newfd,buf_r,read_cnt*2)<0)
{
fprintf(stderr,"Write to client Error:%sn",strerror(errno));
break;
}
if(time==t)
{
if((nbytes=write (audio, buf_w, count)) != count)
{
perror ("write to adda driver error!n");
break;
}
time=0;count=0;
}
}
六、系統特點(diǎn)
(1) μClinux的移植。嵌入式μClinux操作系統保持了Linux操作系統幾乎所有的優(yōu)秀特性,比如穩定、可剪裁、強大的網(wǎng)絡(luò )功能、出色的文件系統等。嵌入式μClinux具有高度靈活的可定制內核。μClinux源代碼公開(kāi),便于自行開(kāi)發(fā)各種應用軟件。另外,μClinux移植成功后,可以利用Linux下的大量資源,有許多軟件無(wú)需修改或者通過(guò)少量修改重新編譯后即可以在μClinux下運行,從而提高了開(kāi)發(fā)效率和軟件重用的比例。因此,進(jìn)行Nios CPU的移植具有極其重要的意義和價(jià)值。
(2) 移植了μClinux下的網(wǎng)絡(luò )驅動(dòng)程序。網(wǎng)絡(luò )驅動(dòng)程序是Linux中自帶的驅動(dòng)程序,但必須修改核心程序以適應具體不同品牌的網(wǎng)絡(luò )芯片和不同的SOPC Builder設置。
(3) 編寫(xiě)了μClinux下的聲卡(自行開(kāi)發(fā)設計的A/D、D/A板)驅動(dòng)程序。在一個(gè)嵌入式系統的設計中,常常需要根據數據或者處理任務(wù)進(jìn)行外設定制,比如說(shuō)為一些非標準的外設提供接口;或者是通過(guò)刪除不必要的外設特性降低外設使用的邏輯單元數,從而提高整個(gè)系統的性能。這正是SOPC Builder的長(cháng)處所在。在SOPC Builder中,可以使用用戶(hù)自定義邏輯實(shí)現上述外設定制。只有為這些用戶(hù)自定義的外設開(kāi)發(fā)合適的驅動(dòng)程序,才能完成μClinux下的應用程序開(kāi)發(fā)。
(4) 完成了μClinux下的應用程序:分別為服務(wù)端和客戶(hù)端應用程序提供IP電話(huà)的電話(huà)呼叫和等待通話(huà)功能。
七、總結
SOPC是一個(gè)軟件工具,是一種基于IP(Intellegent Property)或者說(shuō)是平臺的設計方法,是進(jìn)行嵌入式系統的原型開(kāi)發(fā)和研究工作的上佳選擇。多種實(shí)時(shí)操作系統對Nios CPU的支持更使其如虎添翼,因此它必將獲得更大的成功。
成功移植μClinux的經(jīng)驗增強了我們對Nios CPU的信心,加深了我們對SOPC的認識:SOPC是一種靈活高效的SOC解決方案,具有硬件可編程的靈活性和IP設計的重用性。ALTERA提供了大量基本的IP,使用戶(hù)能迅速地搭建一個(gè)簡(jiǎn)單的系統,對于一些高級用戶(hù),還能自己添加合適的IP,極大地增強了系統的靈活性和用戶(hù)的自主性。
SOPC Builder中用戶(hù)自定義邏輯,使得用戶(hù)能很方便地編寫(xiě)用戶(hù)增加的外設時(shí)序和中斷控制,一方面能增強系統的速度,另一方面又方便了驅動(dòng)程序和上層應用程序的編寫(xiě)。
-12- Nios(r)軟核心嵌入式處理器設計大賽優(yōu)秀作品精選
基于μClinux的IP電話(huà) -11-
評論