嵌入式Linux系统下基于UDA1341芯片的音频驱动程序设计.pdf
《嵌入式Linux系统下基于UDA1341芯片的音频驱动程序设计.pdf》由会员分享,可在线阅读,更多相关《嵌入式Linux系统下基于UDA1341芯片的音频驱动程序设计.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 29 卷第 4 期计算机应用与软件Vol.29 No 42012 年 4 月Computer Applications and SoftwareApr 2012嵌入式 Linux 系统下基于 UDA1341 芯片的音频驱动程序设计霍燃高丽萍陈庆奎(上海理工大学光电信息与计算机工程学院上海 200093)收稿日期:2011 06 28。国家自然科学基金项目(60203011);上海市教委晨光计划项目(10CG49);上海高校选拔培养优秀青年教师科研专项基金项目(SLG1007)。霍燃,硕士生,主研领域:嵌入式系统开发。摘要论述嵌入式 Linux 系统基于 UDA1341 芯片的音频驱动程序设
2、计方法。该方法以 UDA1341 音频芯片及 IIS(Inter-ICSound)总线为硬件架构,以 OSS(Open Sound System)模型为软件基础,可以方便地扩充到其他应用平台。以实验证明了该方法的有效性。关键词嵌入式 LinuxUDA1341IIS 总线OSS 模型音频驱动中图分类号TP368 1文献标识码AAUDIO DRIVER PROGRAMMING BASED ON UDA1341 FOREMBEDDED LINUX SYSTEMHuo RanGao LipingChen Qingkui(School of Optical-Electrical and Computer
3、 Engineering,University of Shanghai for Science and Technology,Shanghai 200093,China)AbstractThe paper discusses an audio driver programming design approach based on UDA1341 chip for embedded Linux system Thismethod makes use of UDA1341 audio chip and IIS bus as the hardware architecture and OSS mod
4、el as the software foundation It can beextended to other application platforms conveniently The effectiveness of the approach is verified with experimentKeywordsEmbedded LinuxUDA1341IIS busOSS modelAudio driver0引言音频系统是嵌入式系统应用中的一个重要组成部分,广泛应用在车载 GPS 导航、智能手机、DV 摄像机、智能家居和公共场所的多媒体系统中。与传统的音频系统相比较,嵌入式音频系统具
5、有操作简单,成本低廉,能有效地控制功耗并大幅提高产品可靠性等特点。但要实现这些功能,系统开发和设计的难度也相应地增大。嵌入式音频系统包括硬件部分和软件部分。本文所讨论的系统在硬件上使用的基于 内部集成电路声音 IIS1 总线的音频系统体系结构。软件部分主要是以开放式声音系统 OSS 模型2 为基础实现嵌入式 Linux 下的各种音频功能的驱动程序。本文以 UDA1341TS 音频编码解码芯片3 为例,讨论了音频驱动程序设计方法,而驱动程序的实现主要依赖于音频总线接口、相应硬件的工作原理以及在嵌入式 Linux 下设备管理方式和驱动程序的体系结构。1IIS 总线IIS 总线也常被写作为 I2S,
6、是工业和嵌入式领域常采用的音频总线之一,它是 Philips 公司提出的串行数字音频总线传输协议。通过该协议嵌入式处理器(如 S3C2410)就可以与外部的音频芯片(UDA1341TS)进行数据传输。IIS 总线接口通常用 5根线来与外部芯片进行连接(如图 1 所示)。它们是:I2SDI串行数据输入线。I2SDO串行数据输出线。SCLK串行数据提供位时钟。LRCLK切换左右声道数据帧。MCLK同步时钟。图 1IIS 总线连接基于 ARM9 的三星 S3C24104 微处理器内置了 IIS 总线接口可直接与外音频芯片 UDA1341TS 的 IIS 接口相连接。为了使引脚个数尽可能少,S3C24
7、10 只使用了四条线引与 UDA1341TS芯片相连:串行数据输入线(IISDI)、串行数据输出线(IISDO)、第 4 期霍燃等:嵌入式 Linux 系统下基于 UDA1341 芯片的音频驱动程序设计17串行数据位时钟(IISCLK)、左右声道选择(IISLRCK)。具体引脚连接方式如图 2 所示。图 2S3C2410 与 UDA1341TS 之间的引脚连接图IIS 寄存器的设置是与驱动程序关系最密切的部分。在驱动程序中必须对 IIS 总线的各种寄存器进行正确的设置才能保证 IIS 总线正常工作,其中包括 IISCON(IIS 控制寄存器)、IIS-MOD(IIS 模式寄存器)等。IISCO
8、N 寄存器的位描述见表 1。表 1IISCON 寄存器的位描述IISCON位描述初值左/右声道指示(只读)80=左声道 1=右声道1发送 FIFO 准备好标志(只读)70=FIFO 没准备好(空)I=FIFO 准备好(非空)0接受 FIFO 准备好标志(只读)60=FIFO 没准备好(满)I=FIFO 准备好(非满)0发送 DMA 服务请求使能 50=请求禁止 1=请求使能0接受 DMA 服务请求使能 40=请求禁止 1=请求使能0发送声道空闲信号 3在闲置状态 IISLRCK 是停止的(暂停 Tx)。只有在 IIS 是主控时这一位才有效。0=产生IISLRCK,1=不产生 IISLRCK0接
9、受声道空闲信号 2在闲置状态 IISLRCK 是停止的(暂停 Rx)。只有在 IIS 是主控时这一位才有效。0=产生IISLRCK,1=不产生 IISLRCK0IIS 比率使能 10=比率禁止 1=比率使能0IIS 接口使能 IIS(开始)00=IIS 禁止(停止)1=IIS 使能(开始)02UDA1341TS 芯片UDA1341TS 是 Philips 公司生产的低功耗、全双工音频编码解码芯片,其不但能完成基本的 D/A 和 A/D 转换功能,而且还具有出色的音频控制(由 Mixer 完成)数字信号处理(DSP)功能。可以应用于多种需要进行声音录入或输出的嵌入式多媒体设备中。UDA1341T
10、S 支持 IIS 总线数据格式,字节长度最高可到20 位,但由于 IIS 总线只能处理声音数据,所以它不但提供了基本的 IIS 总线接口和麦克风扬声器接口,还提供了 L3 控制总线接口,实现了音量控制等功能。2 1控制信号的传输为了实现对音频特性的控制功能,可将 S3C2410 微处理器直接与外部音频芯片 UDA1341TS 的 L3 控制接口相连接,其具体连接方式为将 UDA1431TS 的 L3 控制接口引脚 L3MODE,L3DATA,L3CLOCK 连接到 S3C2410 的三个通用数据引脚上,从而实现对控制信号的传输如图 2 所示。2 2音频数据的传输CPU 与外部芯片进行数据传输的
11、方式有两种:一种是传统的中断方式,另一个是直接存储器存取 DMA 方式。音频数据的传输可以通过先入先出 FIFO 的寄存器队列来完成 但是由于S3C2410 处理器的音频 FIFO 寄存器队列只有 64 字节,如果CPU 采用中断的方式来为 FIFO 队列填充数据,不但很难保证音频播放的连续性,而且还会由于 CPU 频繁的响应中断而导致系统执行效率的降低和性能的下降,所以通常系统都会采用DMA 方式进行音频数据传输。为了实现全双工数据传输,使录音和放音可以同时进行,通常使用两个 DMA 通道,并在内存中建立双缓冲区甚至是多个缓冲区,用来实现同时录音和放音。处理器通过 IIS 总线和系统总线来完
12、成和音频芯片之间的数据传输,它们之间的连接示意图如图 3 所示。图 3音频系统连接示意图3Linux 下的设备管理为了使 Linux 内核能够以模块化方式管理设备并向向应用程序开发人员提供统一且简单易用的接口,Linux 采用的是设备文件的管理方式5,即将各种设备都映射成一种特殊的文件设备文件,它是通过一个 structfile 结构体来表示的,与普通文件的表示方法完全相同。这使得应用程序的开发人员可以像访问普通文件一样通过访问设备文件来实现对相应设备的访问。Linux 标识设备的方法是使用设备类型、主设备号、次设备号的方法,主设备号是系统中唯一的正整数,而次设备号在为在同一设备类型中区分不同
13、的设备而备用的。同时,Linux 引入了设备文件系统(devfs)把设备文件纳入到文件系统的管理范围之内,设备文件则通过驱动程序完成在设备文件系统中的注册与管理。Linux 对设备文件的操作就是通过调用相应的驱动程序,也就是说设备驱动程序提供了对这些设备文件访问的接口。设备驱动程序接口就是一个 file_operations 数据结构,这个 file_oper-ations 结构中的成员都是函数指针,每个进程对设备的操作都会根据设备的主次设备号,转换成对 file_operations 结构的访问。通过该接口用户可以打开、关闭、读数据、写数据、控制设备等操作,相应的操作函数为 open()、r
14、elease()、read()、write()、ioctl()等。开发驱动程序就是要根据相应的硬件来实现这些接口函数的功能。4Linux 下音频驱动程序OSS 是 Linux 下常用的一种音频体系结构。OSS 是 Linux下一种音频编程的标准模型,它包含一套完整的内核驱动程序模块,为各种声卡提供统一且简单易用的编程接口,即 open()、read()、ioctl()等。而 OSS 的硬件标准中包括两种最基本的音频设备:混音器(Mixer)和数字信号处理器(DSP)。UDA1341TS芯片正是一个符合这种标准的音频设备,它内部的 Mixer 通过18计算机应用与软件2012 年L3 控制接口与
15、 S3C2410 的数据接口相连,实现了对音频的各种控制功能(包括音量大小、声道选择、声音速度等)。它的 DSP部分则通过 IIS 总线与微处理器相连,主要实现的是编码和解码,即录音放音等功能。Mixer 对应的驱动程序接口为:static struct file_operations smdk2410_mixer_fops=ioctl:smdk2410_mixer_ioctl,/控制声音特性open:smdk2410_mixer_open,/打开混音设备文件release:smdk2410_mixer_release,/关闭混音设备文件;DSP 对应的驱动程序接口为:static struc
16、t file_operations smdk2410_audio_fops=llseek:smdk_2410_audio_llsee,/重新选择播放位置read:smdk_2410_audio_read,/播放声音write:smdk_2410_audio_write,/录制声音poll:smdk_2410_audio_poll,/选择操作ioctl:smdk_2410_audio_ioctl,/其他操作open:smdk_2410_audio_open,/打开声音设备文件release:smdk_2410_audio_release,/关闭声音设备文件;这两个驱动程序接口就是两个 file_
17、operations 类型的结构体,编写驱动程序就是要实现结构体中每个成员函数的功能。驱动程序在向 Linux 系统注册成功时会返回一个唯一的主设备号。每个成员都对应一个系统调用,在系统调用时通过设备号找到对应硬件的设备驱动程序,并读取这个结构体中成员函数的指针,从而获得该函数实现的功能。4 1UDA1341TS 音频驱动的实现UDA1341T 芯片的两个设备 Mixer(混音器)和 DSP(数字信号处理器)在 Linux 设备文件系统(devfs)中被映射为两个设备文件,分别为/dev/sound/dsp 和 dev/sound/mixer。它们是在驱动程序中用 register_sound
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 Linux 系统 基于 UDA1341 芯片 音频 驱动程序 设计
限制150内