老古开发网首页
导航:老古开发网首页文章索引文章分类DSP数字信号处理→[基于DDK的TLV320AIC23型编解码器的驱动设计]
| -文章搜索 - 最新文章 - |

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

发布时间:2006年7月25日 点击次数:1224
来源:   作者:
 
基于DDK的TLV320AIC23型编解码器的驱动设计
范学锋,吴成柯
(西安电子科技大学 102图像研究室,陕西 西安 710071)


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都提供的芯片支持库(Clip Support Library-CSL)的补充,CSL提供对外围器件寄存器配置及初始化等的低级控制,DDK完全通过CSL对外围器件进行控制。简单的说,DDK建立在CSL上层,所以用DDK来开发驱动程序将更为快捷且可移植性更好。

DDK为开发驱动程序定义了标准模型和一系列的API。为简化程序设计,标准模型又被分为二个层次,其中高层称为Class driver,低层称为Mini-driver。Class driver与器件相对独立,完成诸如缓冲区管理和请求同步等功能,同时扮演着与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 config下的cdb文件中,依次选择Input/Output→Device Drivers→User→defined Drivers,在这些例程中一般已经添加了udevCodec,如果需要的话,用户可以自行添加或编辑。右键单击选择Properties选项来编辑其属性,其属性应设置如下:

正确配置驱动程序入口后,就要按照需要设置相关的参数,下面具体讨论TLV320AIC23参数的设置。

TLV320AIC23的参数结构体原型如下:

typedef struct

在一般应用中,上述结构体的大多数参数无需更改,需要修改的主要是aic23Config,他是TLV320AIC23控制寄存器值,需要通过它来控制TLV320AIC23的工作模式、输入输出选择、采样率等重要参数。

除了复位寄存器外,TLV320AIC23共有9个控制寄存器,每个寄存器控制字长为9bit,地址位为7bit,共有16bit。地址位为高7位而控制字在低9位。具体如下:

Register 0:左声道输入音量控制,缺省值为0x0017

Register 1:右声道输入音量控制,缺省值为0x0017

Register 2:左声道输入音量控制,缺省值为0x01F9

Register 3:右声道输入音量控制,缺省值为0x01F9

Register 4:模拟音频通道设置,缺省值为0x0011

Register 5:数字音频通道设置,缺省值为0x0000

Register 6:节电模式控制,缺省值为0x0000

Register 7:数字音频接口格式控制,缺省值为0x0043

Register 8:采样率控制,缺省为48kHz,对DM642 EVM板,缺省值为0x0002

Register 9:数字音频接口激活开关,缺省值为0x0001

通常情况下需要修改的寄存器包括4号和8号寄存器,即选择是mic输入还是由line in输入和根据需要选择采样率。这2个寄存器的详细配置如下:

4号寄存器配置见表1,其中,D2位INSEL(Input select for ADC)是输入选择,“0”为line in;“1”为mic。D1位MICM(Microphone mute)是mic静音开关,为“1”表示静音。D0位MICB(Microphone boost)如设置为“1”将为mic输入提供20dB的增益。

8号寄存器配置见表2,其中,采样率控制位为D5-D2的SR[3:0]。对于DM642 EVM板,设置方式见表3。



可见,需要通过4号寄存器的D2来选择输入,同时考虑D1和D0对mic的控制,采样率的控制通过设置8寄存器的SR[3:0]来实现。

3 TLV320AIC23的驱动配置方法

很多初学者在运行DM642 EVM的echo或其他音频例程时,最容易碰到的问题是通过line in输入时有输出,而通过mic输入时没有输出,更不要说改变采样率了,即使参考资料编辑aic23.h和emvdm642_edma_aic23.h修改Default参数仍然无法解决。

出现这样的问题时,首先要了解TLV320AIC23的模拟音频输入为mic和line in二选一的,其次要知道如何能够正确配置TLV320AIC23的参数使之满足特定应用的需要。如果仔细分析echo例程和其他音频例程的话,可以发现只有在echo例程和中包含了aic23.h和emvdm642_edma_aic23.h 2个头文件。其实在echo例程中,所包含的这2个头文件和TLV320AIC23的初始化语句实际并未使用。如果屏蔽掉对这2个头文件的包含以及TLV320AIC23的初始化语句,会发现编译后仍然能够正常运行。实际上echo例程中TLV320AIC23初始化语句只是提供了对TLV320AIC23进行配置的一种方法而并未直接使用,该方法在DDK包的emvdm642部分说明文件中也已提及。

由于在echo例程中初始化驱动程序入口和其他的音频例程一样使用了默认参数,而默认参数是通过调用DDK包中的evmdm642_edma_aic23.164库获得的,该库不变则配置也不变,于是就会出现上述问题。

在明确了以上原理后,通过实践证明,本文提供的以下三种配置方法可以适应各种应用。

方法一

既然默认参数是通过调用evmdem642_edma_aic23.164库获得的,那么自然可以通过修改该库来达到修改参数的目的。TI提供的DDK包中包含了各种库的源代码,这使得修改库文件成为可能。本文用到的库生成工程是ti\ddk\src\audio\evmdm642目录下的evmdm642_edma_aic23_64.pjt,只需要打开该工程,修改其中aic23.h及中的默认参数,重新编译就能生成新的库文件地这样,所有的音频例程都会默认按修改过的参数运行。

这种方法合适TLV320AIC23参数配置相对固定的应用场合。配置完全通过调用evmdm642_edma_aic23.164库初始化时进行,不用在应用工程文件中添加任何附加代码,使得工程文件更简洁,可移植性更高。

方法二

自定义符合标准结构EVMDM642_EDMA_AIC23_DevParams的结构体,例如:

然后将“_my Params”作为Device params ptr在指定入口指针时替代默认的0x0。这就符合TI推荐的方法,在echo例程中的相关代码也说明了这种方法。

这种方法能够适应几乎任何使用情况,初始化参数自定义非常明确,代码易读性较高,但是不建议像echo例程中那样直接包含默认参数的头文件,最好参照该头文件定义自己的结构体。

方法三

通过仔细分析生成evmdm642_edma_aic23.164库的源代码,可以发现对TLV320AIC23寄存器的设置是通过AIC23_setParams()函数来完成的,在大多数情况下,只要修改寄存器值而不必修改标准结构EVMDM642_EDMA_AIC23_DevParams结构体中的其他变量,所以可以调用AIC23_setParams()函数来完成对TLV320AIC23参数的配置。这样就只需要定义1个符合标准的寄存器数组,将数组名作为参数来调用AIC23_setParams()函数就可以达到目的。

这种方法使用灵活,代码长度很短,含义非常明确,可以用不同参数多次调用,尤其适用于TLV320AIC23参数可变的特殊场合。

4 结束语

笔者在实际工作基础上对TLV320AIC23参数配置提出了3种方法,各有特点且都十分实用。在进行基于DDK的TLV320AIC23驱动程序设计时,可以根据需要方便地选用。

 
本文摘自《国外电子元器件》

欢迎进入老古论坛进行讨论
[DSP数字信号处理] 相关文章:
C++嵌入式系统中应用
简介:
C++嵌入式系统中应用 来源:同济大学软件学院嵌入式系统研究中心 何宗键   转换舞台   C++作为一种编程语言,从其诞生之日至今,已经在软件业的历史上扮演了至关重要的角色。它强大的语言功能和灵活的语言机制是无数程序员为之折腰。而C++中蕴含的OO,GP等编程思想,更是潜移默化的影响了软件的架构方法。从这个层面上讲,C++的影响已经不仅仅是一门编程语言这样简单。然而随着Internet的发展及其带来的B/S架构软件的兴起。新兴的Java/C#/VB.NET等基于虚拟机语言及Ruby/Groovy等......

离散随机线性系统的可观性和可控性
基于TMS320DM642的编程
基于DSP的车辆视频处理系统的研究与实现
基于DSP的高速线扫描相机的实现
用可编程DSP实现IEEE 802.16 PHY信号处理
用C语言开发DSP嵌入式系统
C2000例程连载8
C2000例程连载7
C2000例程连载6
 
下一个:[DSP数字信号处理]LF240xA控制器参考手册
简介:
翻译了一段目录 手册中可能会用到的其他帮助手册如下:(相对重要的) SPRU160 《C24xDSP控制器参考手册:CPU和寄存器设置》介绍该系列DSP的体系结构,寄存器结构,数据和程序寻址和指令设置。也包括了指令比较和基于XDS510开发。 SPRU145 《LF2407A,06A 02A……》控制器数据手册包括:电气规范和时序定义。 SPDU079 《JTAG/MPSD防真技术手册》 SPRU328《CCS用户手册》如何使用CCS开发环境进行DSP开发和调试。 目录 入门 综述TMS320系列产品。介绍TMS320LF24xA DSP控制器和特性。 1.1 &n......
 

上一个:[DSP数字信号处理]TS101S型DSP与PCI总线的简易接口设计

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒