新闻中心

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.eepw.com.cn/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-



关键词: 嵌入式

评论


相关推荐

技术专区

关闭