该语音通信系统使用CMX618内置的CODEC模块,其内部集成了A/D和D/A转换、通道滤波、增益调节等功能,足以满足对模拟语音的抽样、量化等操作的指标要求。因此,无需再外接芯片,也节省了大量的物理空间,这在实际的开发设计中是十分重要的。
微控制器LPC2138通过C-BUS串行总线与CMX618连接。C-BuS是一个四线中断一驱动串行系统,可在主控制器和CMX618内部寄存器间进行数据传输、控制或状态信息的发送。
2.3 系统的软件设计与实现
系统的软件设计主要是编写CMX618的驱动程序,以及对主控制器LPC2138进行编程实现对CMX618的控制。在上电后,首先应初始化CMX618和LPC2138。对语音编解码芯片,要配置其中的一些功能寄存器,这包括设置编解码位速率、组帧结构、增益大小、辅助功能选用以及开启中断标志位等;对主控制芯片,则要配置接口方式、中断条件和传输速率等。
实际应用中,为使编解码过程中的纠错能力达到最佳,在使用前向纠错(FEC)编码器处理语音编码时。可选择声码器帧以3×20 ms或4×20 ms的形式进行数据包传输。这种把多帧数据进行封装、打包传输的形式,更有效地抑制了误码的产生。
这里,要注意CMX618语音编解码芯片的状态(state)寄存器(地址为MYM40)。编码和解码操作在状态寄存器中都有对应的标志位,当采用中断方式编解码时,每次要先读出状态寄存器中对应标志位的值,只有当对应标志位的值为“1”时,才会产生中断,执行相应的操作,如图3所示。
其中,在状态(state)寄存器(地址为MYM40)中对应的状态标志有VDA,VDW,RDY。其中,VDA为编码标志位;VDW为解码标志位;RDY为等待配置标志位。
2.4 关键问题
(1)采用RALCWI算法时,由于存在算法抖动,会使编码每一帧时花费的时间不同,这使微处理器对输出数据的时间不好掌握。为解决此问题,在编码时,会给微处理器一条指令,只要编码可行,就会进行数据传输;在解码时,则会增加一个初始延迟时间,避免CODEC因无采样数据而产生时间空隙。