锅底灰

嵌入式音频系统设计 1

0
阅读(1174) 评论(0)
 1 引言
    
      近几年,嵌入式数字音频产品受到越来越多消费者的青睐。在MP3、手机等消费类电子产品中,人们对于这些个人终端的要求早已不限于单纯通话和简单的文字处理,高质量的音效是当前发展的重要趋势。
    
      嵌入式音频系统分为硬件设计和软件设计。硬件部分采用基于ⅡS总线的音频系统体系结构。软件上,嵌入式Linux是一种完全开放且免费的操作系统。它支持多种硬件体系结构,内核运行高效、稳定,而且源代码开放,有着完善的开发工具,为开发人员提供了优良的开发环境。
    
      本文利用samsung公司的S3C2410型微处理器和Philips公司的UDAl341型立体声音频CODEC构造了嵌入式音频系统,给出相关硬件电路的设计,介绍该音频系统基于Linux2.4内核版本的驱动程序实现。
    
      2 arm920T及S3C2410简介
    
       ARM920T是ARM公司系列微处理器核的一种,它采用5阶段管道化技术,同时配备了Thumb扩展、Embedded ICE调试技术和Harvard总线。在生产工艺相同的情况下,性能可达ARM7TDMI的2倍以上。S3C2410是Samsung公司采用0.18 μm工艺制造的arm9TDMI核微处理器。它有独立的16KB指令Cache、16KB数据Cache和MMU,这一特性使得开发人员可以直接将Linux移植到基于该处理器的目标系统中。
    
      3 基于ⅡS总线的硬件框架实现
    
      ⅡS(Inter-IC Sound)总线是Philips公司提出的串行数字音频总线协议。 它是一种面向多媒体的音频总线,专用于音频设备之间的数据传输,为数字立体声提供序列的连接至标准编解码器。ⅡS总线只处理声音数据。其他信号(如控制信 号)必须单独传输。为了使电路的引出引脚尽可能少,ⅡS只使用了3条串行总线:提供分时复用功能的数据线、字段选择线和时钟信号线。
    
       整个音频系统的硬件部分主要是CPU和CODEC的连接与实现。本系统采用Philips基于ⅡS音频总线的UDAl34l型音频CODEC。该 CODEC支持ⅡS总线数据格式,采用位元流转换技术进行信号处理,具有可编程增益放大器(PGA)和数字自动增益控制器(AGC)。
    
       S3C2410内置ⅡS总线接口,可直接外接8/16比特的立体声CODEC。它还可以给FIFO通道提供DMA传输模式而非中断模式,从而使数据发送 和接收同时进行。该ⅡS接口有3种工作方式,可以通过设置ⅡSCON寄存器来选择。本文介绍的硬件框架基于传输和接收模式。在这种模式下,ⅡS数据线将通 过双通道DMA同时接收和发送音频数据,DMA服务请求由FIFO只读寄存器自动完成。S3C2410支持4通道连接系统总线(AHB)和外围总线 (APB)的DMA控制器。表1列出S3C2410的各通道请求源。
    
      为了实现音频数据的全双工传输,需要使用S3C2410的通道1和通道2:接收数据选择通道1和发送数据选择通道2。S3C2410的DMA控制器没有内置的DMA存储区域,因而程序中必须为音频设备分配DMA缓存区,通过DMA直接将需要回放或录音的数据放在内存的DMA缓存区中。
    
       如图1所示,S3C2410的ⅡS总线信号与U-DAl34l的ⅡS信号直接相连。L3接口的引脚L3MODE、L3CLOCK和L3DATA分别连接 到S3-C2410的GPBl、GPB2和GPB3通用数据输出引脚。UDAl34l对外提供两组音频信号输入接口,每组包括左右2个声道。
    
    

     如图2所示,2组音频输入在UDAl34l内部的处理存在很大差别:第一组音频信号输入后经过1个0 dB/6 dB开关后采样送入数字混音器;第二组音频信号输入后先经过可编程增益放大器(PGA),然后再进行采样,采样后的数据要再经过数字自动增益控制器 (AGC)送入数字混音器。设计硬件电路时选用第二组输入音频信号。因为希望通过软件的方法实现对系统输入音量大小的调节,显然选用第二组可以通过L3总 线接口控制AGC来实现。另外,选择通道2还可以通过PGA对从NIC输入的信号进行片内放大。
    
      由于ⅡS总线只处 理音频数据,因此UDAl34l还内置了用于传输控制信号的L3总线接口。L3接口相当于混音器控制接口,可以控制输入/输出音频信号的低音及音量大小 等。L3接口接在S3C2410的3个通用GPIO输入输出引脚上,利用这3个I/O口模拟L3总线的全部时序和协议。这里一定要注意L3总线的时钟不是连续时钟,它只在数据线上有数据时才发出8个周期的时钟信号,其他情况下时钟线始终保持高电平。


    
    

     4 Linux下音频驱动的实现
    
      设备驱动程序是操作系统内核和机器硬件之间的接口,为应用程序屏 蔽了硬件细节。设备驱动是内核的一部分,主要完成以下功能:设备初始化和释放;设备管理,包括实时参数设置及提供对设备的操作接口;读取应用程序传送给设 备文件的数据并回送应用程序请求的数据;检测和处理设备出现的错误。