基于DDK的TLV320AIC23型编解码器的驱动设计

2007-03-09 19:03:27来源: 互联网
摘 要:以Tl的DM642 EVM板为例,介绍基于DDK的TLV320AIC23型编解码器驱动程序设计的一般方法。针对常用的需求,给出三种实用的参数配置方法。 关键词: DDK:TLV320AIC23;DM642;寄存器 1 引言 TLV320AIC23是TI公司推出的一款高性能立体声音频编解码器,内置耳机输出放大器,支持mic和line in二选一的输入方式。输入和输出都具有可编程的增益调节功能。TLV320AIC23的模/数转换器(ADC)和数,模转换器(DAC)集成在芯片内部.采用先进的Σ一△过采样技术.可以在8kHz至96kHz的采样率下提供16bit、20bit、24bit和32bit的采样数据。ADC和DAC的输出信噪比分别可达90dB和100dB。同时。TLV320AIC23还具有很低的功耗(回放模式为23mW。节电模式为15μw)。上述优点使得TLV320AIC23成为一款非常理想的音频编解码器,与TI的DSP系列相配合更是相得益彰。 DSP/BIOS Driver Developer’s Kit(DDK)是TI为简化驱动程序开发为TMS320系列DSP及其EVM板等提供的驱动程序开发套件。该套件为TMS320系列各种外围器件提供完整的标准化驱动程序模型,使得驱动程序可以很方便地移植到其他应用中,大大提高驱动程序开发的效率。DDK是对每种TMS320系列DSP都提供的芯片支持库(Chip Support Library—CSL)的补充,CSL提供对外围器件寄存器配置及初始化等的低级控制,DDK完全通过CSL来对外围器件进行控制。简单地说。DDK建立在CSL上层.所以用DDK来开发驱动程序将更为快捷且可移植性更好。 DDK为开发驱动程序定义了标准模型和一系列的API。为简化程序设计。标准模型又被分为二个层次.其中高层称为Class driver,低层称为Mini—driver。Class drivei与器件相对独立.完成诸如缓冲区管理和请求同步等功能.同时扮演着与API和Mini—driver二者接口的角色。Mini—driver完成特定的器件初始化和控制功能.它符合IOM(I/O Mini—driver)的接口标准。DDK的这种分层结构使得驱动开发人员仅需了解单一的Mini—driver API就可以完成整体外围器件的驱动设计,而且这一过程比设计整个驱动程序要简单得多,因为Class driver控制了缓冲区管理和同步等。DDK提供3种Class driver.分别为SIO/DIO、PIP/PIO和GIO,它们都可以和任何Mini—driver结合使用。   2 TLV320AIC23的驱动设计基础 DDK的标准模型结构如图1所示。高层的应用和底层驱动相互没有直接的关联,开发中只需通过Class driver控制Mini—driver。 下面以DM642 EVM板为例.说明基于DDK的TLV320AIC23的驱动程序设计方法。 首先,需要使用配置工具建立驱动程序的入口。在DSP/BIOS con_fig下的cdb文件中.依次选择In-puffOutplut---Deviee Drivers→User→defined Drivers.在这些例程中一般已经添加了udevCodec.如果需要的话,用户可以自行添加或编辑。右键单击选择Properties选项来编辑其属性,其属性应设置如下: Comment:可以加入自己的注释 lnit function:键入EVMDM642_EDMA_AIC23一init Function table ptr:键入 EVMDM642_EDMA_A-IC23一Fxn8 Function table type:选择IOM_Fxns Deviceid:该项会被自动忽略.因为DM642 EVM板上只有一块TLV320AIC23 Device params ptr:TLV320AIC23参数结构的入口指针.使用缺省参数时设为0x0 Device global data ptr:必须设置为OxO 正确配置驱动程序入口后.就要按照需要设置相关的参数。下面具体讨论TLV320AIC23参数的设置。 TLV320AIC23的参数结构体原型如下: typedef struct 在一般应用中。上述结构体的大多数参数无需更改,需要修改的主要是aie23Config.它是TLV320AIC23控制寄存器值.需要通过它来控制TLV320AIC23的工作模式、输入/输出选择、采样率等重要参数。 除了复位寄存器外.TLV320AIC23共有9个控制寄存器.每个寄存器控制字长为9bit.地址位为7bit,共有16bit。地址位为高7位而控制字在低9位。具体如下: Register0:左声道输入音量控制,缺省值为 0x0017 Register1:右声道输入音量控制,缺省值为 0x0017 Register 2:左声道输出音量控制。缺省值为Ox01F9 Register 3:右声道输出音量控制,缺省值为Ox01F9 Register 4:模拟音频通道设置.缺省值为Ox0011 Register 5:数字音频通道设置。缺省值为0x0000 Register 6:节电模式控制.缺省值为0x0000 Register 7:数字音频接口格式控制,缺省值为0x0043 Register 8:采样率控制,缺省为48kHz,对DM642EVM板.缺省值为Ox0002 Register 9:数字音频接口激活开关.缺省值为0x0001 通常情况下需要修改的寄存器包括4号和8号寄存器.即选择是由mic输入还是由line in输入和根据需要选择采样率。这2个寄存器的详细配置如下: 4号寄存器配置见表1,其中,D2位。INSEL(In-put select for ADC)是输入选择,“O”为line in;“l”为mic.D1位MICM(Microphone mute)是mic静音开关.为“l”表示静音。DO位MICB(Microphone boost)如设置为“1”将为mic输入提供20dB的增益。8号寄存器配置见表2,其中,采样率控制位为D5"D2的SR[3:O]。对于DM642 EVM板,设置方式见表3。 可见.需要通过4号寄存器的D2来选择输入,同时考虑Dl和DO对mic的控制;采样率的控制通过设置8号寄存器的SR[3:0]来实现。 3 TLV320AIC23的驱动配置方法 很多初学者在运行DM642 EVM的echo或其他音频例程时,最容易碰到的问题是通过line in输入时有输出.而通过mic输入时没有输出,更不要说改变采样率了。即使参考资料编辑aic23-h和emvdm642_edma_aic23.h修改Dcfauh参数仍然无法解决。 出现这样的问题时。首先要了解TLV320AIC23的模拟音频输入为mic和line in二选一的,其次要知道如何能够正确配置TLV320AIC23的参数使之满足特定应用的需要。如果仔细分析echo例程和其他音频例程的话,可以发现只有在echo例程中包含了aie23.h和emvdm642_edma_aie23.h 2个头文件。其实在echo例程中.所包含的这2个头文件和TLV320AIC23的初始化语句实际并未使用。如果屏蔽掉对这2个头文件的包含以及TLV320AIC23的初始化语句,会发现编译后仍然能够正常运行。实际上echo例程中的TLV320AIC23初始化语句只是提供了对Ⅱ,V320AIC23进行配置的一种方法而并未直接使用。该方法在DDK包的emvdm642部分说明文件中也已提及。 由于在echo例程中初始化驱动程序人口和其他的音频例程一样使用了默认参数,而默认参数是通过调用DDK包中的evmdm642_edma_aic23.164库获得的.该库不变则配置也不变,于是就会出现上述问题。 在明确了以上原理后.通过实践证明,本文提供的以下三种配置方法可以适应各种应用。 方法一 既然默认参数是通过调用evmdm642_edlna_a-ic23.164库获得的.那么自然可以通过修改该库来达到修改参数的目的。TI提供的DDK包中包含了各种库的源代码.这使得修改库文件成为可能。本文用到的库生成工程是ti\ddk\src\audio\evmdm642目录下的evmdm642_edma_mc23_64.pjt,只需要打开该工程.修改其中aic23.h中的默认参数,重新编译就能生成新的库文件。这样,所有的音频例程都会默认按修改过的参数运行。 这种方法适合TLV320AIC23参数配置相对固定的应用场合。配置完全通过调用evmdm642_ed_ma_aic23.164库初始化时进行.不用在应用工程文件中添加任何附加代码.使得工程文件更简洁.可移植性更高。 方法二 自定义符合标准结构EVMDM642_EDMA_A.IC23一DevParams的结构体,例如: 然后将“_myParms”作为Device params ptr在指定人口指针时替代默认的0x0。这就符合TI推荐的方法,在echo例程中的相关代码也说明了这种方法。 这种方法能够适应几乎任何使用情况,初始化参数自定义非常明确,代码易读性较高。但是不建议像echo例程中那样直接包含默认参数的头文件.最好参照该头文件定义自己的结构体。 方法三 通过仔细分析生成evmdm642_edma_aic23.164库的源代码,可以发现对TLV320AIC23寄存器的设置是通过AIC23_setParams()函数来完成的。在大多数情况下,只要修改寄存器值而不必修改标准结构EVMDM642_EDMA_AIC23_DevParams结构体中的其他变量。所以可以调用AIC23_setParams()函数来完成对TLV320AIC23参数的配置。这样就只需要定义1个符合标准的寄存器数组.将数组名作为参数来调用AIC23_setParamsf()函数就可以达到目的。 这种方法使用灵活,代码长度很短,含义非常明确,可以用不同参数多次调 用.尤其适用于TLV320AIC23参数可变的特殊场合。   4 结束语 笔者在实际工作基础上对TLV320AIC23参数配置提出了3种方法,各有特点且都十分实用。在进行基于DDK的TLV320AIC23驱动程序设计时.可以根据需要方便地选用。

关键字:编解码器  解码器  驱动  设计

编辑: 引用地址:http://www.eeworld.com.cn/wltx/qtjs/200703/3153.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
编解码器
解码器
驱动
设计

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved