微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 消费类电子 > 基于AC48304的嵌入式多路语音记录器

基于AC48304的嵌入式多路语音记录器

时间:09-16 来源:互联网 点击:
1. 引言

数字多路语音记录器在安全、监控方面有很多应用。一些传统的设计方案基于工控机,用数据采集卡实现语音的A/D转换,用软件实现语音编解码,这种方案成本高、功耗大。如果采用嵌入式的设计方案,可以实现同样的功能,并且具有低成本,低功耗的特点。

普通的低成本嵌入式处理器性能不高,不足以实现多路语音的实时编码、解码,需要用专门的语音处理芯片完成这一工作。基于DSP自主设计语音编码器是一种方法,但工作量大。AC48304广泛应用于各种小型VOIP网关中,价格低廉,是一种很好的替代方案。同时AC48304还具有DTMF识别和静音检测等功能,便于实现电话号码识别和语音的自动记录。

ARM是一种应用广泛的嵌入式处理器,Samsung、Atmel等厂家生产的ARM处理器接口丰富,技术支持全面。ARM处理器价格低、性价比高,向下取代了大量单片机的应用,向上渗透高端嵌入式处理器的市场。在本多路语音记录器中,采用了Samsung的ARM9处理器S3C2410,操作系统则采用了嵌入式linux。

2. 系统结构

语音记录器包括语音处理模块、ARM系统模块、硬盘记录模块、网络接口模块几个部分。为使系统配置灵活,将系统设计为主控板和扩展板两个部分,在主控板上实现16路语音通道,另设计一个16通道的语音扩展板,整个系统可以用4的倍数进行语音通道的扩展,最多达到32个语音通道。计算机控制部分集成S3C2410 处理器、64MB SDRAM及16MB 的FLASH,构成一个嵌入式小系统。

语音CODEC采用AMD的LE58QL021,该器件是3.3V单电压用户线语音处理器,在小型语音网关中是AC48304的常用搭配,支持4通道语音AD/DA,支持E1 PCM Highway,能与AC48304实现无缝连接。LE58QL021的工作模式可软件编程控制,ARM通过MPI(Microprocessor Interface)串行控制总线设置LE58QL021的各种工作参数。

基于DM9000网络控制器,系统实现10/100Mbps自适应以太网接口,Linux操作系统提供设备驱动支持。IDE接口则是由一片CPLD实现,硬盘用于语音的本地记录。主要部分电路原理见图1。



图1 语音处理模块的硬件电路原理图

3. AC48304语音处理器

AC48304是AudioCodes公司基于DSP设计的一个四通道语音处理器,支持多种标准、多种码率的G系列语音编码器,如G.723.1,G.711,G.726和G.729等,支持T.38传真中继和其他语音信号处理功能。在系统中,ARM通过CPU局部总线实现对AC48304的控制及数据交换。AC48304与LE58QL021之间通过E1 PCM Highway接口实现多通道数字语音接口。E1接口由2.048Mhz时钟驱动,有0"31共32个8位时隙,工作时序如图2所示。



图2 PCM Highway时序

AC48304是一种专用的语音处理DSP芯片,需要运行相应的DSP程序。正常运行前, AC48304有两个程序需要下载:kernel(内核)程序和application(应用)程序。kernel程序是个只有几百字节的小程序,完成DSP的初始化工作,为下载应用程序做准备。application程序则完成AC48304的所有功能,在kernel程序程序下载完成后,才可以下载application程序。AC48304有4个工作模式:内核下载模式、程序下载模式、初始化模式、运行模式。其中运行模式有两个状态:空闲状态和激活状态,用户只能在空闲状态改变芯片的工作参数。

4. 软件设计

4.1Linux中的驱动程序设计

操作系统采用的是嵌入式Linux操作系统。Linux具有效率高、内核小的优点,且开放源代码,完全免费。在Linux操作系统下,应用程序不能直接访问硬件,尽管Linux在ARM平台上有较完整的板级支持包,但在该系统的开发工作中仍然要完成部分设备的驱动程序设计,包括AC48304驱动程序、LE58QL021驱动程序、S-EEPROM驱动程序等。

设备驱动程序要为应用软件提供设备打开、关闭、设备控制及数据读/写等接口, 即一些类似于open、close、read和write的函数,在主程序中直接采用文件读写的方式实现数据的收发。LE58QL021与ARM处理器之间采用MPI串行控制总线,MPI驱动接口结构定义如下:  

static file_operations mpi_ctl_fops = {

ioctl:mpi_ctl_ioctl, //设备控制

open:mpi_open, //打开设备

close:mpi

_ close, //关闭设备

}

linux提供ioremap函数将I/O内存资源的物理地址映射到核心虚地址空间,然后可像操作寄存器那样进行数据读写。编写驱动程序的时候,必须提供两个函数,一个是module_init(),insmod在加载此模块的时候自动调用,负责进行设备驱动程序的初始化工作,一个函数是module_exit,在模块被卸载时调用,负责进行设备驱动程序的清除工作。

4.

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

网站地图

Top