2 软件实现
网络语音终端系统软件部分主要由系统初始化、语音采集播放模块、网络通信模块等部分构成。
2.1 系统初始化
使用UDA1341TS芯片与I)M9000CEP芯片之前,需要对芯片内部的寄存器进行初始化。
DM9000CEP芯片的初始化设置工作方式:通过CMD与ADDR2引脚相连,高电平时为数据端口,低电平时为地址端口。CS与NGCS4引脚相连,选择DM9000CEP的端口基址为0x2000 0000,偏移300个单位。发送给DM9000的地址信息固定放在0x2000 0300上,把存放在该地址的数据放在0x2000 0304,采用此方式可对DM9000CEP内部的寄存器进行操作,如启动、复位、TX控制、RX控制以及MAC地址初始化等。其代码如下:
UDA1341TS芯片的初始化工作需要与L3的总线连接,该L3总线是MCU通过GPB2、GPB3、GPB4三个引脚来模拟控制,用于处理器配置UDA1341内部的寄存器。UDA1341有两种模式:地址模式和数据传输模式。地址模式表示传输的是地址信息,它的高6位永远是000101,低两位用来表明模式是状态模式、数据0模式还是数据1模式,其中状态模式主要用于配置UDA1341的各类初始状态:采用频率、ADC、DAC等;数据模式主要用于改善音频输入、输出的效果、音量大小调节等。
此外,要初始化S3C2440芯片内部的特殊寄存器,对I2S、DMA、中断相关的各个寄存器进行初始化设置,以及各个引脚功能的设置,如把GPF7引脚设置为EINT7外部中断功能引脚,当以太网网卡接收到数据,此引脚电平就会因中断跳变以使程序进入网卡中断接收处理函数。
2.2 语音采集播放模块
完成实时语音通话,UDA1341TS芯片在录音同时也必须完成放音功能。数据传输使用两个DMA通道。其录音过程为:音频芯片从麦克风中拾取声音信号进行采样、量化、编码,把采集到的数据通过I2S总线传给DMA1通道,并通过内部总线传到内存缓冲区中,之后送给处理器处理。放音:内存从处理器中获取数据,通过内部总线传给DMA2通道,之后通过I2S总线把数据传给音频芯片送给扬声器播音。通过采用DMA通道数据传输方式,处理器不需要花大量时间参与数据的传输,有充足的时间来处理其他事件。
本设计需要实现全双工语音通信功能,本终端采用双缓存的设计方法,缓存处理机制以录音为例,系统在使用缓存2来存放音频设备量化好的数据时,CPU则处理缓存1的数据,当设备填充完缓存2,则转向缓存1进行填充,此时CPU处理缓存2的数据,如此不断循环交替,其处理过程如图4所示。
图4 双缓存处理过程
其录音与播放过程都采用双缓存设计方案,以录音为例,程序流程图如图5所示。
图5 录音程序流程图