首页资源分类嵌入式开发嵌入式系统 > 嵌入式系统中基于AC’97标准的音频驱动的设计与实现.pdf

嵌入式系统中基于AC’97标准的音频驱动的设计与实现.pdf

已有 456470个资源

下载专区

文档信息举报收藏

标    签: 嵌入式系统标准音频音频驱动

分    享:

文档简介

嵌入式系统中基于AC’97标准的音频驱动的设计与实现.pdf

文档预览

第 29 卷  第 2 期 2006 年 6 月 电子器件 Chinese J ournal of Elect ron Devices Vol . 29  No. 2 J un. 2006 Design and Implementation of Audio Driver Based on Audio Codec’97 for Embedded System Q I A N Hong , H U Chen ( N ational Engineering Research Center f or A p plication S peci f ic Intergrate Ci rcuit S ystem , S out heast Universit y , N anjing 210096 , China) Abstract :This paper describes an architect ure of t he system which co nsist s of t he co dec2U CB1400 and t he IN T EL Xscale PXA255 , and design of audio device driver based o n A udio Codec’97 fo r Window s CE. The paper focuses o n t he implementatio n of t he DMA for imp roving t he performance of t his audio system to satisf y t he real2time requirement of audio system. So me soft ware imp rovement s have been do ne to reduce t he power co nsump tio n. Key words :AC’97 ;audio device driver ;embedded Window s CE ; Xscale PXA255 ;DMA EEACC :6220M 嵌入式系统中基于 AC’97 标准的音频驱动的设计与实现 钱  鸿 ,胡  晨 (东南大学国家专用集成电路系统工程技术研究中心 ,南京 210096) 摘  要 :介绍了由 IN TEL Xscale 处理器和 UCB1400 编解码芯片构成的音频系统体系结构及工作原理 ,接着描述了嵌入式 WinCE 操作系统下基于 AC’97 协议标准的音频设备驱动程序的设计与实现 。其中着重讲述了采用 DMA 描述器传输模式的 音频驱动程序的设计与实现 。针对音频系统使用效果 、功耗控制等方面 ,作了一些改进 。此设计方案已在嵌入式系统中得到 使用 ,运行效果良好 。 关键词 :AC’97 ;音频设备驱动 ;嵌入式 Windows CE ; Xscale PXA255 ;DMA 中图分类号 :TN915. 05    文献标识码 :A   文章编号 :100529490( 2006) 0220500205   随着社会的发展 , 嵌入式移动信息终端设备 ( PDA 、H PC 、Smart Pho ne 等) 在信息设备 、移动应 用 、消费类电子等市场上的应用日益广泛 ;嵌入式音 频系统作为其中重要的功能模块获得广泛的重视 。 具备播放 、录音功能的音频系统的应用使得移动信 息终端上视听娱乐 、IP 电话 、音频录制等成为可能 , 并推动了移动信息终端设备的发展 。 A udio Codec’97 ( AC’97) 是由 IN T EL 等厂商 共同制定的音频电路系统技术规格标准 。它采用了 双芯片架构 ,把音频系统中的数字部分 ( CPU 或 DSP) 和模拟部分 ( COD EC) 分离开来 ,以求降低电 磁干扰 ,从而提高音效品质 。现在市场上的音频设 备 ,大都遵循 AC’97 标准 。在软件上 ,微软公司的 Windows CE[1] (WinCE) 操作系统 ,是一种抢先式 、多 任务、实时操作系统 ;它具有通信功能强大、内置了多 媒体功能以及支持多种嵌入式硬件体系结构 ,具有模 块功能的可裁剪性 ,且运行高效 、稳定 ,所以广泛应用 于嵌入式产品中 。 本文针对 IN T EL 公司的 Xscale PXA255 处理 器[2] , 选 用 P H IL IPS 公 司 的 编 解 码 芯 片 ( CO2 D EC) ———U CB1400 ,构建了基于 AC’97 标准的音 频系统 ,并介绍了该音频系统在 WinCE 操作系统 下驱动程序的实现技术 。 1  AC’97 音频系统原理 1. 1  AC’97 协议标准[ 3] AC’97 协议标准是一套关于 AC’97 数字音频 处理 (AC’97 Digital Co nt roller) 、AC’97 数字串口 (AC - Link) 、AC’97 编 、解码以及输入/ 输出支持 (AC’97 COD EC) 的协议组 。 收稿日期 :2005209221 作者简介 :钱  鸿 (19792) ,男 ,硕士研究生 ,研究方向为嵌入式系统开发 ,f reshchn @163. com. 第2期 钱  鸿 ,胡  晨 :嵌入式系统中基于 AC’97 标准的音频驱动的设计与实现 501   数字音频处理与编 、解码是 AC’97 协议标准的两个主要部分 ,它们通过 AC’97 数字串口协议通信 。如 图 1 所示 。 图 1  AC’97 协议组示意图   AC’97 数字音频处理部分专门处理数据流的 另外图 2 还标有 U CB1400 向 CPU 发送的中断 数码运算 、操作 , 并通过 AC’97 数字串口协议与 信号线 ( IRQOU T) 。 AC’97 COD EC 部分通信 (包括控制信号 、音频数据 1. 2  DMA 传输模式[6] 信号) 。本音频系统中采用的是 PXA255 芯片内建 由于音频设备使用时数据量大 、实时性要求很 的数字音频处理单元 A CU N I T[4] 。 高 ,所以在设计中使用了窃取总线控制权的 DMA AC’97 COD EC 部分是关于数模转换 (DAC) 、 传输模式来实现数据通信 ,以求加快对音频数据的 模数转换 ( ADC) 、混音以及音频模拟 I/ O 等的协 处理 、减少时延 ,同时能减轻 CPU 的负荷 。 议 。以此为标准的编 、解码芯片通称为 AC’97 CO2 IN TEL 公司 PXA255 处理器的 DMA 控制器 D EC 芯片 。本音频系统选用的 U CB1400[5] ,就是遵 (DMA Co nt roller ,DMAC) 有 16 个 DMA 通道 ,可 从该协议的芯片级实现 。 以响应内部或外部设备的请求 ,完成数据从主存储 AC’97 数字串口协议 ( AC - Link) ,是全双工 、 器 ( 内 存 ) 的 读 出 和 写 入 。本 音 频 系 统 采 用 了 固定时钟 、PCM 串口数据流协议 。它采用分时多路 DMAC 的描述器取入方式 。 ( TDM) 复用机制来处理访问控制寄存器和多路输 DMAC 每个通道由 4 个 32bit 寄存器所控制 , 入 、输出音频数据流 。如图 2 所示 ,AC2Link 接口由 分别是 :描述器地址寄存器 DDADR (指向下一个描 5 针数字串口组成 , 包括 3 根输出 ( 相对于 ACU2 述器地址或标注停止) 、源地址寄存器 DSADR 、目 N I T ,下同) : R ESE T 信号 ( ACR ESE T) 、数据输出 的地址寄存器 D TADR 、控制寄存器 DCMD 。 ( SDA TA _ OU T) 、帧同步信号 ( S YNC) ; 2 根输入 : 描述器取入方式即把主存的 DMA 描述器内容 位时钟信号 (B I TCL K) 、数据输入 ( SDA TA_ IN) 。 (即上述的 4 个 32 bit 数据) 装入 DMAC 寄存器中 , 按照描述器所示进行源地址到目的地址的数据传 送 ,多个 DMA 描述器可以串成一列 ,组成单向循环 链表结构 ,从而允许 DMA 通道执行一连串数据块 传送操作[7] 。如图 3 是本方案采用的两个描述器构 图 2  AC’97 接口 (AC2Link) 连接示意图 音频帧包括帧头部分 、数据帧部分 。帧同步信号 的上升沿标识音频帧的开始 ,下降沿标识数据帧的开 始。在音频帧期间 ,当位时钟信号上升沿时发送数 据 ,下降沿时接收数据 ,从而实现全双工的数据传输。 ACUN IT 提供基于 AC2Link 协议通信的同步 机制 。ACUN I T 与 U CB1400 之间的 PCM 音频数 据传输 ,以及对 U CB1400 片上寄存器的读/ 写 ,都 遵循了 AC2Link 数据串口协议标准 。 图 3  DMA 描述器循环链模型示意 成的 循 环 传 输 模 型 示 意 图 。描 述 器 方 式 允 许 在 DMA 运行时向描述器链加入新的描述器 。 502     电  子  器  件      第 29 卷 在 DMA 传送开始前 ,必须为需求设备即音频 设备分配 DMA 缓存区 、映射 DMA 描述器到实际 的内存物理空间 ,并初始化 DMA 描述器 。在 DMA 传输开始传送时 ,步骤如下 : ①把内存中存放描述器内容的起始地址写入到 DMAC 的 DDADR 寄存器中 ; ②置位 DMA 控制寄 存器 DCSR [ RUN ] 位 为 1 ; ③DMAC 自 动 从 DDADR 指向的 DMA 描述器中取出 4 个 32bit 的 字 ;把这 4 个字 (字 0 、1 、2 、3) 分别装填到 DMAC 的 DDADR 、DSADR 、D TADR 、DCMD 寄存器中 。 上述工作完成后 , 如果初始化配置的 DCMD [ FL O W ]位为 0 ,则立即开始 DMA 传输 ;如该位配 置为 1 ,则需要等待中断请求信号 。开始传送时 ,每 次 DMA 通 道 传 送 的 数 据 块 大 小 是 由 DCMD [ SIZE ]和 DCMD[L EN GT H ]的较小者决定的 。本 文述及驱动设置 DCMD [ SIZE ] 为 32 byte ,DCMD [ L EN GT H ] 为 ( 4 k - 1 ) byte ; 且 DCMD [L EN GT H ]随着传送进行是递减的 ,即标注剩余还 需传送的字节 。DCMD [ S TA R TIRQ EN ] 、DCMD [ ENDIRQ EN ]置位为 1 ,分别表示完成描述器初始 化 、完成描述器传送后允许产生中断 ;该位为 0 不产 生中断 ,并继续下个描述器的传送 。在上述中断允 许置 位 后 , DCSR [ S TA R TIN TR ] 置 位 为 1 表 示 DMAC 描述器寄存器初始化成功 、准备传送前产生 的中断 ;DCSR[ END IN TR ] 置位为 1 表示当前的描 述器传送成功结束时产生的中断 。 DMAC 的 DDADR[ STOP]位为 1 标注描述器链 的结束 ,在完成该描述器指定的数据传送后停止本通 道。图 4 是 DMA 描述器传送状态转换图。 个部 分 : CPU ( Xscale PXA255 ) 及 主 存 、COD EC (U CB1400 芯片) 、输入/ 输出设备 (如麦克风 、扬声 器) 。 图 5  音频系统架构图 外部模拟信号 (如麦克风输入) 输入到 U CB1400[8] 芯片中 ,完成音频采样 、A/ D 转换成数 字信号后经由 AC - Link 接口传送给 ACUN IT ,再 通过 DMA 传输方式完成向内存写入 ;而待输出的 音频数据则通过 DMA 方式传送到 ACU N I T ,经由 AC - Link 接口送到 U CB1400 ,在 U CB1400 芯片内 部完成 D/ A 转换成模拟信号 ,混频器 (用来控制各 种输出的音量大小) 混音处理 、信号过滤 ,再送到输 出设备 (如扬声器) 播放 。 3  软件驱动实现 驱动程序的主要任务是控制音频数据在硬件中 流动 ,并为音频应用提供标准接口 。 本文述及驱动是在微软的 WinCE 操作系统下 实现的 , 如 图 6 所 示 , 是 软 件 架 构 层 次 模 型 图 。 WinCE 系统下驱动程序大多数是使用分层模型结 构编写的 , 这 样 驱 动 上 层 ( module2devices driver , MDD) 就封装了大量硬件无关操作 ; 而驱 动下 层 图 4  DMA 描述器传送状态转换图 2  音频系统硬件架构实现 如图 5 所示 ,整个音频系统可以简略地分为三 图 6  软件层次模型框图 (platform2dependent driver ,PDD) 才是与硬件相关 的 。所以音频驱动实现主要指 PDD (platform2de2 pendent driver) 层驱动的实现 。 第2期 钱  鸿 ,胡  晨 :嵌入式系统中基于 AC’97 标准的音频驱动的设计与实现 503 3. 1  音频驱动程序工作原理 音频设备驱动 MDD 层给上层的接口完全遵从 流设备接口驱动规范 ,又因为音频驱动程序完全依 赖于 WAV_ IOCo nt rol 函数消息 ,所以流式接口的 其余部分的实现相对简单 。 WAV_ IOCo nt rol 函数处理两类消息 : 音频消 息 、混频 器 M IXER 消 息 。对 混 频 器 消 息 处 理 在 MDD 层调用的相关功能函数已经实现 。对音频消 息处理则调用 PDD 层的功能函数 PDD_ Wave Proc 来实现 。 PDD 层驱动设计主要包含 :设备的初始化和卸 载 、音频设备相关消息处理 (用 DMA 传输模式实 现) 、中断处理程序以及电源管理 。 3. 2  设备的初始化和卸载 音频 设 备 初 始 化 , 首 先 映 射 DMA 描 述 器 、 DMA 控制器寄存器 、GPIO 等相关寄存器到虚拟地 址空间 ,接着配置 DMA 描述器 ;然后给 AC’97 控 制器相关的 AC’97 、定时器 、全局量等寄存器分配 虚拟地址空间 ,并创建互斥体 ;最后调用初始化音频 设 备 : 包 括 配 置 AC2Link 相 关 GPIO 口 、使 能 U CB1400 芯片 、以及初始化 U CB1400 芯片 。上述 工作完成后初始化 DMA 中断 、注册中断触发事件 、 创建中断处理线程 hA udio Interrupt Thread ,并调用 中断处理服务线程函数 WMDD_ Interrupt Thread 。 初始化出错或设备卸载时调用卸载功能函数 。卸载 时要停止 DMA 通道 、清除中断允许 ,还必须释放驱 动程序使用的各种系统资源包括 DMA 、AC’97 、设 备中断等 。 3. 3  消息处理及中断处理服务线程 应用层对音频设备的操作 (如播放 、录音等) ,是 由音频驱动中的消息处理来实现的 。PDD_ Wave2 Proc 是音频驱动 PDD 层消息处理函数 ,它被 MDD 层的 WAV_ IOCo nt rol 、中断处理线程函数 WMDD_ Interrupt Thread 调用 。在 PDD_ Wave Proc 函数中 共处理 12 个消息 ,如传送准备 、开始传送 (重新开 始) 、暂停 、继续传送 、停止传送 、设置音量等 。 上述消息处理函数包括输出/ 输入两个方向的 处理 ,数据是通过上述的 DMA 的描述器方式进行 传送的 。本文述及的音频系统在 ACUN I T 模块中 给音 频 输 出 、音 频 输 入 、麦 克 风 输 入 分 别 提 供 了 FIFO 用于音频数据传送 ; 相应地给它们分配了 3 个 DMA 通道 。DMAC 通过 32bit 的 FIFO 数据寄 存器 ( FIFO Data Register) 在主存和 FIFO 间完成 数据传输操作 。图 7 是标识 DMAC 通过 1 个输出 、 1 个输入 FIFO 传送数据的示意 。 图 7  DMA 音频数据传送示意 ACUN IT 中的 FIFO 是 16 个 32bit 字单元 ,共 64 byte 。当 发 送 或 接 受 FIFO 一 半 满 ( 32 byte , 256bit) 时 , 产 生 DMA 发 送 或 DMA 接 受 请 求 , DMAC 会自动将 32byte 数据装入 FIFO (输出) 或 从 FIFO 传送 到主存 中 ( 输入) 。而 32 byte 就 是 AC2Link 协议规定的一个音频帧的数据量 。 下面简述部分消息处理的实现 : (1) 传送准备 传送准备首先确定 COD EC ( U CB1400) 芯片具 体类型 ,接着判断应用层传入采样率是否为合适的 值 ;如合适则设置 U CB1400 芯片 0x2A 寄存器 D0 位为能调整采样率模式 ,接着把上述值配置为 AC’ 97 的采样率 。 (2) 传送开始或重新开始 在音频 驱 动 初 始 化 时 必 须 为 音 频 设 备 映 射 DMA 缓存区以及描述器到主存物理空间 ,并配置 DMA 描述器 ,即指定传送数据的源和目的地址 ,在 本文中就是初始化两个相关的数据结构 :描述器数 据结构和 DMAC 寄存器数据结构 : ①描述器数据结构 : typedef st ruct { unsigned long  ddadr ; / / 描述器地址寄存器 ,指 向下一个描述器地址或标注停止 unsigned long unsigned long unsigned long dsadr ; / / 源地址寄存器 dtadr ; / / 目的地址寄存器 dcmd ; / / 控制寄存器 } DMADescriptorChannel Type ; ②DMAC 寄存器数据结构 : typedef st ruct { unsigned long  dcsr[16 ] ;/ / DMA CSRs by channel unsigned long dint ;/ / DMA 中断寄存器 unsigned long drcmr [ 40 ] ;/ / 请 求 至 通 道 映 像 寄 存器 DMADescripto rChannel Type ddg[ 16 ] ;/ / 16 通道 504     电  子  器  件      第 29 卷 描述器寄存器 } DMAC2REGS , 3 PDMAC ; 然后 ,按照上述的 DMA 传输模式进行数据的 传送 。 传送重新开始的消息处理只有输出方向 ,其处 理过程与上述传送开始 (输出方向) 的实现相同 。 (3) 传送停止 停止 DMA 传送方式 ,首先清除 DCSR [ RU N ] 位为 0 ,再把 U CB1400 芯片 0x2 寄存器 D15 位置 1 (静音) ,并关闭功放 (此步仅输出方向需做) 。 3. 4  中断处理服务线程 系统可以设置在每个描述器传送开始 、结束和 出错时产生中断 ,本文述及的系统就是这样设计的 。 中断处理服务程序就是处理这 3 种中断的 ,3 种中 断均包括输入 、输出传送方向 。 对这些中断处理实际上也是调用上面 2. 3 小节 里述及的消息处理函数来实现的 。 另 外 , ACUN IT 中 的 FIFO 触 发 的 中 断 , DMAC 会自动处理 ;这点上文已经交待 。 3. 5  电源管理 PDD_ Audio Power Handler 函数是 系 统 启 动 、 睡眠 、唤醒都需要调用的函数 。系统启动和从睡眠 状态中唤醒都需要调用 Audio PowerOn : 包括配置 AC2Link 相关 GPIO 口 、使能 U CB1400 芯片 、以及 初始 化 U CB1400 芯 片 。系 统 睡 眠 时 执 行 Au2 dio PowerOff 函数 :停止 DMA 通道 、禁音以及卸除 对 AC’97 寄 存 器 的 配 置 , 在 无 其 他 模 块 使 用 U CB1400 前提下清除 AC97 配置寄存器到默认状 态 ,并关闭 U CB1400 芯片电源 。 3. 6  驱动优化 在驱动程序完成后的测试过程中 ,发现在睡眠 或唤醒时 ,耳机存在爆破音的问题 ,以及音频设备待 机状态时功耗过大的问题 。 对于喇叭和耳机爆破音问题 ,在开机时应该先 通 过 U CB1400 的 0x6A 寄 存 器 使 能 headp ho ne driver ,再打开功放 ;在关机时应该先关闭功放再关 闭 headp ho ne driver 。这样设置后能显著减小耳机 的爆破音 ,并且不影响正常音频文件的播放 。 对于功耗过大的问题 ,我们在音频设备初始化 时 ,先关闭 ADC、DAC 及传输通道 ,在播放音频文 件 (或录音) 开始前打开 DAC (或 ADC) 及通道 ,播 放结束时再关闭它 。经过这些处理 ,正常状态下的 (音频设备待机状态时) 整机功耗能降低 30mA 左 右 (电源电压 3. 7V) ,效果还是很明显的 。 4  总结与展望 本文介绍了嵌入式 WinCE 系统中基于 AC’97 标准的音频系统实现方案 ,以实现音频播放 、录制 。 首先介绍了整个音频系统硬件架构的实现方案 ,然 后讲述了音频驱动的实现 ,重点介绍了 DMA 传输 模式的实现 ,以及内存分配策略 。 本文述及的音频系统已经在基于 IN T EL Xs2 cale PXA255 的平台上得到了实现 ,可以满足音频 播放和录制的需要 ,并有良好效果 。 参考文献 : [ 1 ]  陈向群等编著. Windows CE. N ET 系统分析及实验教程[ M ] . 机械工业出版社 ,2003. 01 [ 2 ]  陈章龙等主编. 嵌入式技术与系统 % % Intel Xscale 结构与开 发[ M ] . 北京航空航天大学出版社 ,2004. 02 [ 3 ]  AC’97 Component Specification ( Revision 2. 3) [ S ] , Intel Co. , 2002. 04. [ 4 ]  Intel PXA255 Processor Developer’s Manual [ S ] ( §13 : AC’ 97 Cont roller U nit) , 2004. 01. [ 5 ]  UCB1400 product data [ S ] , Philip s Semiconductors , 2002. 06. [ 6 ]  Intel PXA255 Processor Developer’s Manual [ S] . ( §5 : DMA Cont roller) , 2004. 01. [ 7 ]  徐睿等. 基于 IIS 总线的嵌入式音频系统设计[J ] . 电子技术应 用 ,2003. 10. [ 8 ]  UCB1400 Audio Codec wit h Touch screen Controller and Power Management Monitor [ S ] ( Rev. 02 ) , Philips Semiconductors , 2002. 06.

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。