微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM9的嵌入式网络语音终端系统设计

基于ARM9的嵌入式网络语音终端系统设计

时间:09-12 来源:互联网 点击:

就会因中断跳变以使程序进入网卡中断接收处理函数。

2.2 语音采集播放模块

完成实时语音通话,UDA1341TS芯片在录音同时也必须完成放音功能。数据传输使用两个DMA通道。其录音过程为:音频芯片从麦克风中拾取声音信号进行采样、量化、编码,把采集到的数据通过I2S总线传给DMA1通道,并通过内部总线传到内存缓冲区中,之后送给处理器处理。放音:内存从处理器中获取数据,通过内部总线传给DMA2通道,之后通过I2S总线把数据传给音频芯片送给扬声器播音。通过采用DMA通道数据传输方式,处理器不需要花大量时间参与数据的传输,有充足的时间来处理其他事件。

本设计需要实现全双工语音通信功能,本终端采用双缓存的设计方法,缓存处理机制以录音为例,系统在使用缓存2来存放音频设备量化好的数据时,CPU则处理缓存1的数据,当设备填充完缓存2,则转向缓存1进行填充,此时CPU处理缓存2的数据,如此不断循环交替,其处理过程如图4所示。

其录音与播放过程都采用双缓存设计方案,以录音为例,程序流程图如图5所示。

2.3 网络通信模块

处理器首先将从麦克风采样的数据信号封装成规定格式(其封装步骤如图6所示,封装到14字节以太网层),然后把封装好的数据交给DM 9000CEP驱动部分的发送函数dm_tran_packet(unsigned char*datas,intlength),通过设置TCR的发送请求位将数据发送出去,数据发送过程就是对数据打包的过程。而数据的接收是通过DM9000CEP的网络中断函数DM9000ISR()进行的,网卡每接到一个数据包将会产生一个中断,进入中断处理函数,按规定的格式从数据包中取出其语音数据,之后数据经处理器处理送到扬声器上播放外音。网络各层数据封装如图6所示。

语音数据进行封装之后,不管是发送数据帧还是接收数据帧,都需要底层网卡驱动函数提供服务,本文以发送数据帧为例,简述底层网卡驱动原理,在发送数据和接收数据过程中,特别需要注意的是关闭网卡中断,以防打断数据处理过程。DM9000CEP内部有3 KB的SRAM用于

发送数据缓存。在发送之前,数据是暂存在这个SRAM中的。当需要连续发送时,需要用DM9000CEP寄存器MWCMD赋予数据端口,这样就指定了SRAM中的某个地址,并且在传输完一个数据后,指针会指向SRAM中的下一个地址,从而达到连续访问数据的目的。如果在此过程中到达发送数据缓冲区末尾,指针将折回缓冲区的开头。发送数据帧的流程图如图7所示。

3 终端语音测试结果

使用ADS软件将程序编译成可执行文件,下载到语音终端A和B上。在两个终端分别接上麦克风和耳麦进行话音通信,通过实验验证了系统可以进行清晰的语音对话。另外,可将终端A的麦克风接口与函数信号发生器相接,终端B的扬声器接口与示波器相连。函数信号发生器将正弦信号送给终端A,其频率为1 kHz,幅度为100mVpp。在示波器上可以看到经放大的正弦信号,其输出信号波形如图8所示。测试结果表明,该网络语音终端系统可以应用于远程网络语音通信。

结语

本文作者利用嵌入式技术开发的网络语音终端具有可靠性高、控制界面强大以及可扩展性好的特点,使该终端可不通过计算机、直接连上网络进行数据传输,能充分利用现有网络通道实现快捷的语音通话。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top