新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于μClinux的IP電話

        基于μClinux的IP電話

        ——
        作者:邱衛東、諶勇輝、盧德良 時間:2005-08-12 來源: 收藏

        基于μClinux的IP電話
        復旦大學
        參賽隊員:邱衛東、諶勇輝、盧德良
        指導老師:彭澄廉
        一、系統概述
        IP是國際互聯網協議(Internet Protocol)的簡稱,IP 電話是按照國際互聯網協議規定的網絡技術開通的電話業務,它通過發送IP包來傳輸話音業務,其基本原理是:通過語音壓縮算法對話音進行壓縮編碼處理,然后把這些語音數據按IP等相關協議進行打包,經過IP網絡把數據包傳輸到目的地,再把這些語音數據包連接起來,經過解碼、解壓縮處理后,恢復成原來的語音信號,從而達到由IP網絡傳送話音的目的。
        Internet話音業務正在獲得飛速發展,其主要原因有以下兩點:首先是價格低廉,相同的通話時間,通過Internet話音服務的費用僅僅為通過傳統話音服務費用的幾分之一,甚至幾十分之一;其次,隨著技術的發展,IP電話的話音質量有了很大的提高,克服了以往話音質量低劣、延遲長、經常掉線等缺陷。
        目前專家普遍認為VoIP將代表電話技術未來的發展方向,甚至有這樣的一句話:everything is over IP(一切都將基于IP)。許多人相信IP電話時代即將到來,Frost & Sullivan調研公司的報告中預計,到2007年VoIP的通話量將占全部通話量的75%,甚至更高一些。
        Nios CPU 是一種采用流水線技術、單指令流的RISC處理器,又是一種軟核CPU,專門針對可編程邏輯器件進行了優化,因此是一種可配置的通用RISC處理器,可以與用戶自定義邏輯結合,構成完整、功能強大的SOC系統,在系統的設計中已成為趨勢。
        操作系統是系統的靈魂,可以顯著提高軟件開發效率和進行軟件復用。針對當前日益復雜的嵌入式系統開發,應用操作系統是保證產品面市時間的關鍵。嵌入式μClinux操作系統是一種性能優良、源碼公開且被廣泛應用的的免費嵌入式操作系統,具有高度靈活的可定制內核。
        目前尚無Nios CPU的免費移植版本,為了完成參賽作品,我們自行移植了μClinux操作系統的Nios CPU版本,繼而在μClinux操作系統上完成了IP電話的設計開發。

        本文引用地址:http://www.104case.com/article/7575.htm


        二、功能說明
        基于μClinux的IP電話分為服務端(接受方)和客戶端(呼叫方)。發起通話請求的一端稱為客戶端,另一端則為服務端。根據不同應用場景,服務端和客戶端可以調換角色,也就是說,任意一端都可以發起通話請求。
        客戶端發起通話請求,輸入服務端IP地址,兩端通過網絡連接成功后,利用麥克風和聽筒,就可以進行通話了。
        本作品的實現分為硬件和軟件兩個部分。
        硬件部分進行A/D、D/A板的開發設計,以實現電話語音的數/模和模/數轉換功能。采用AD7811、AD7305等芯片,實現了A/D,D/A的控制時序邏輯以及采樣率的設置等功能。
        軟件實現主要包含以下四個步驟:
        第一,將嵌入式操作系統μClinux移植到Nios處理器上。
        第二,移植μClinux下的smc lan9111c1網卡驅動程序,實現IP連接。
        第三,開發μClinux下語音板(自行開發設計)的驅動程序。
        第四開發μClinux下的應用程序,實現IP電話功能,分別為服務端和客戶端應用程序,提供IP電話的電話呼叫和等待通話功能。
        三、性能參數
        語音板AD7811采用的是Analog公司的一款A/D轉換器,它具有如下一些關鍵特性:
        * 4個模擬輸入通道;
        * 1個數字輸出通道;
        * 分辨率為10位;
        * 串行接口;
        * 2.5 V內部參考電壓;
        * 外部參考電壓范圍為1.2 V_VDD;
        * 模擬輸入范圍為0_Vref;
        * 可通過控制寄存器進行軟件控制;
        * 電源供電范圍為2.7_5 V。
        在本系統中用到2個模擬輸入通道,分辨率采用10位中的8位。
        AD7305是Analog公司的一款D/A轉換器,它具有如下一些關鍵特性:
        * 4個模擬輸出通道;
        * 8個數字輸入通道;
        * 分辨率為8位;
        * 并行接口;
        * 外部參考電壓范圍為VSS_VDD;
        * 模擬輸出范圍為VSS_VDD;
        * 電源供電范圍為2.7_5 V。
        四、系統構成
        本作品的體系結構框架如圖1所示,軟件流程圖如圖2所示。
        服務端應用程序
        客戶端應用程序
        網卡驅動程序
        A/D D/A驅動程序
        μClinux內核
        Altera Stratix 1S10
        Nios CPU A/D D/A的接口邏輯
        語音板

        圖1  體系結構

        圖2  軟件流程圖
        五、設計描述
        本系統的設計分為硬件和軟件兩部分,硬件主要是在ALTERA的Stratix板上擴充了一塊語音板,用來接受語音的輸入并實現模/數的轉換;軟件部分是移植μClinux操作系統,編寫A/D板的驅動及上層應用程序的開發。
        1.硬件部分
        在實現語音模/數轉換時主要應控制AD7811、AD7305的時序,在模擬信號輸入時用運放調整電壓至AD7811能接受的范圍。圖3是語音板時序控制狀態轉換圖。

        圖3  語音板的序控制狀態轉換
        在這里我們用SOPC Builder提供的用戶自定義接口來實現以下功能:到avalon總線的接口,對A/D、D/A芯片的控制時序;按特定采樣率進行采樣,利用可讀/寫寄存器任意更改采樣率;采用內置緩沖存儲采樣數據,每采樣32次才發出一次中斷,從而減少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.軟件部分
        首先成功地移植了操作系統,用來管理驅動與上層應用程序之間的通信。其次,編寫A/D的驅動以及客戶端和服務端的應用程序,這里系統的兩端都能用作客戶端和服務端,但要求作為服務端的應用程序應先啟動偵聽。
        A/D的驅動程序主要由以下幾部分組成:讀緩沖區內容、寫入緩沖區、產生中斷等。以下是寫緩沖的部分示例:
        if(w_tail+count<8193)  //能一次寫完
             {
              PRINTK("count=%dn",count);
              for(i=0;i<count;i++)
              {       
               w++;
               get_user(temp,buf+i);
               kbuf_w[w]=temp;
              }

        }else //分兩次寫完
         {
          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個字節,采用的是環狀緩沖區。
        上層應用程序分為客戶端和服務端,在服務端先啟動偵聽,然后運行客戶端程序,輸入服務端IP,建立連接后就能進行通信。以下是服務端程序的部分示例。
        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;
         }
        }
        六、系統特點
        (1)  μClinux的移植。嵌入式μClinux操作系統保持了Linux操作系統幾乎所有的優秀特性,比如穩定、可剪裁、強大的網絡功能、出色的文件系統等。嵌入式μClinux具有高度靈活的可定制內核。μClinux源代碼公開,便于自行開發各種應用軟件。另外,μClinux移植成功后,可以利用Linux下的大量資源,有許多軟件無需修改或者通過少量修改重新編譯后即可以在μClinux下運行,從而提高了開發效率和軟件重用的比例。因此,進行Nios CPU的移植具有極其重要的意義和價值。
        (2) 移植了μClinux下的網絡驅動程序。網絡驅動程序是Linux中自帶的驅動程序,但必須修改核心程序以適應具體不同品牌的網絡芯片和不同的SOPC Builder設置。
        (3) 編寫了μClinux下的聲卡(自行開發設計的A/D、D/A板)驅動程序。在一個嵌入式系統的設計中,常常需要根據數據或者處理任務進行外設定制,比如說為一些非標準的外設提供接口;或者是通過刪除不必要的外設特性降低外設使用的邏輯單元數,從而提高整個系統的性能。這正是SOPC Builder的長處所在。在SOPC Builder中,可以使用用戶自定義邏輯實現上述外設定制。只有為這些用戶自定義的外設開發合適的驅動程序,才能完成μClinux下的應用程序開發。
        (4) 完成了μClinux下的應用程序:分別為服務端和客戶端應用程序提供IP電話的電話呼叫和等待通話功能。
        七、總結
        SOPC是一個軟件工具,是一種基于IP(Intellegent Property)或者說是平臺的設計方法,是進行嵌入式系統的原型開發和研究工作的上佳選擇。多種實時操作系統對Nios CPU的支持更使其如虎添翼,因此它必將獲得更大的成功。
        成功移植μClinux的經驗增強了我們對Nios CPU的信心,加深了我們對SOPC的認識:SOPC是一種靈活高效的SOC解決方案,具有硬件可編程的靈活性和IP設計的重用性。ALTERA提供了大量基本的IP,使用戶能迅速地搭建一個簡單的系統,對于一些高級用戶,還能自己添加合適的IP,極大地增強了系統的靈活性和用戶的自主性。
         SOPC Builder中用戶自定義邏輯,使得用戶能很方便地編寫用戶增加的外設時序和中斷控制,一方面能增強系統的速度,另一方面又方便了驅動程序和上層應用程序的編寫。
        -12- Nios(r)軟核心嵌入式處理器設計大賽優秀作品精選

         基于μClinux的IP電話 -11-



        關鍵詞: 嵌入式

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黄陵县| 巴彦淖尔市| 湘阴县| 贵港市| 罗甸县| 大兴区| 武陟县| 凤翔县| 大厂| 孟连| 枣强县| 阳高县| 鄂伦春自治旗| 景洪市| 平南县| 广东省| 江西省| 灌阳县| 庆云县| 安庆市| 河间市| 大港区| 白河县| 揭东县| 宿松县| 武功县| 海阳市| 马公市| 济南市| 南郑县| 临海市| 贡山| 祁门县| 宝鸡市| 策勒县| 柘城县| 贺州市| 加查县| 文水县| 西丰县| 乐陵市|