嵌入式课程设计.docx
- 文档编号:29585269
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:21
- 大小:159.44KB
嵌入式课程设计.docx
《嵌入式课程设计.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
嵌入式课程设计
目录
摘要1
第一章绪论2
1.1课题研究的背景2
第二章系统设计2
2.1嵌入式系统3
2.2嵌入式系统的组成3
2.3嵌入式系统的开发流程4
2.4操作系统的选择5
第三章硬件架构5
3.1S3C2440处理器简介5
3.2电源接口6
3.3IIS音频数据接口7
3.4AC97接口8
第四章AC97音频驱动及实现10
4.1设备的初始化11
4.2Mixer驱动11
4.3Dsp驱动11
第五章总结12
参考文献13
附录1mixer.c14
附录2dsp.c17
基于S3C2440的AC97音频设备电路及驱动程序设计
摘要
嵌入式操作系统ARM-Linux的应用已经越来越广泛,但是Linux系统本身并没有对种类繁多的硬件设备都提供现成的驱动程序,特别是由于工程应用中的灵活性就需开发一套适合于自己产品的设备驱动,这使得嵌入式Linux设备驱动程序的开发在整个嵌入式系统开发周期中占据很大的比例。
本文针对三星的S3C2440嵌入式ARM微处理器,介绍了在Linux操作系统下,对S3C2440微处理器内部AC97音频设备电路及驱动程序设计,通过编写编写AC97音频驱动程序,总结出一种在嵌入式Linux操作系统下快速方便的开发驱动程序的方法。
关键词:
嵌入式系统;Linux系统;设备驱动;AC97音频
第一章绪论
近年来随着微处理器技术、DSP技术、多媒体编解码技术以及嵌入式技术的发展,多媒体娱乐终端已经成为消费性电子(ConsumerElectronic,CE)产品的热点。
视频和音频都是多媒体娱乐的重要组成部分,尤其是数字音频信号。
在“十一五”规划建议中,数字化音频信息产业群被列为重点培育对象。
1.1课题研究的背景
嵌入式设备在生活中随处可见,如手机、MP3播放器、家用电器、手持通信设备、信息终端、仪器仪表、汽车、航天航空、军事装备、制造工业、过程控制、电子表等,它以其独有的嵌入、专用特点,备受系统开发者的青睐。
嵌入式系统的软件、硬件都是可裁剪的,特别适用于对功能、可靠性、成本、体积、功耗有严格要求的场合。
开源操作系统Linux具有丰富的开发工具,大量文档和广泛的技术支持;支持主流的硬件设备和最新的硬件技术,全球的Linux爱好者编写了大量的驱动程序,使得Linux非常容易移植;庞大的体系给学习内核带来了很大困扰,通用的Linux不具备硬实时性。
多媒体已经进入到人民生活的方方面面,视频与音频设备迅速发展,决定了编写相应的Linux驱动代码的必要性。
纵观声卡的发展历史,我们不难发现,主线一直是随着声道技术以及采样规格的发展而发展。
UDA1341TS编解码芯片属于16位/44.1kHz声卡芯片之一,因其简单实用,价格便宜,又可以满足嵌入式系统对声音的一般处理要求而广泛使用,所以为其编写驱动程序是很有必要的。
Linux内核主要支持OSS和ALSA两种声卡驱动框架,相比于OSS,ALSA驱动框架可以完美的处理系统中的多个声音设备,还专门为简化应用程序的编写提供了相应的函数库alsa-libs,因此Linux2.6内核采用了ALSA驱动框架体系。
第二章系统设计
嵌入式系统具有广阔的应用前景,可以用于不同的领域,而开源的Linux操作系统在嵌入式领域快速发展,两者结合的研究是一个很好的课题,具有重要的社会和商业价值。
2.1嵌入式系统
嵌入式系统在广义上说就是计算机系统,它包括除了以通用为目的计算机之外的所有计算机。
从便携式音乐播放器到航天飞机的实时控制子系统都能见到嵌入式系统的应用。
与通用计算机系统可以满足多种任务不同,嵌入式系统只能完成某些特定目的的任务。
但有些也有实时性能的制约因素必须得到满足的原因,如安全性和可用性。
除此之外其他功能可能要求较低或没有要求,使系统的硬件得以简化,以降低成本。
对于大批量生产的系统来说,降低成本通常是设计的首要考虑。
嵌入式系统通常需要简化去除不需要的功能以降低成本,设计师通常选择刚刚满足所需功能的硬件使目标最小化低成本的实现。
嵌入式系统的定义:
嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
它主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用软件等部分组成。
它具有“嵌入性”、“专用性”与“计算机系统”的三个基本要素。
2.2嵌入式系统的组成
一个典型的嵌入式系统应由硬件平台、班级支持包(BSP:
BoardSupportPackage)、操作系统、应用程序四部分组成。
硬件平台主要就是嵌入式处理器及其控制所需要的相关外设。
目前,32位处理器是嵌入式处理器的主流,主频通常在40MHz以上;也有超过500MHz甚至更高的高端处理器。
多处理器组成的平台、多核处理器平台也出现在嵌入式领域。
不过。
现在大量使用的仍是32位单处理组成的平台。
一个典型平台的基本组成如图2-1所示:
图2-1嵌入式平台的架构
2.3嵌入式系统的开发流程
设计一个嵌入式专用系统的开发过程:
首先是需求分析,了解用户需要解决哪些问题;选择处理器和相应的硬件,原则上采用比较低的成本和简单的外设解决问题;而后是硬件的设计(包括原理图和PCB)调试,检查硬件是否工作正常;接着调试软件,有处理器的初始化、中断、外设等需要编程序实现的;最后就是测试,测试整个系统的功能是否正常,若正常则发布产品。
如果有了嵌入式系统(即:
基本的处理器和核心电路是固定的,操作系统已经移植好了),做产品时,所需要做的工作就是看看是否需要添加外设,尔后编写所添加外设的驱动程序,进而编写应用程序。
这样避免重复劳动,缩短开发周期。
目前大多数小公司就采用的是这种方案。
其流程如图2-2所示:
图2-2在嵌入式平台的开发流程
2.4操作系统的选择
选择合适的操作系统,对于嵌入式系统开发十分关键。
合适的操作系统至少应该具有两大功能:
多任务管理;文件和设备的管理。
此外,还得考虑以下5个方面:
1.系统的实时性问题。
2.是否容易移植。
3.系统驱动程序是否好完善。
4.用程序是否容易开发和调试。
5.交叉编译工具链是否完善。
考虑以上因素,符合要求的有:
Linux、WinCE、VxWorks、eCos、uC/OS-II等,但Linux源码开放,软件和驱动程序支持十分丰富,驱动协议栈完善,应用广泛,所以论文中采用了Linux为操作系统。
第三章硬件架构
3.1S3C2440处理器简介
S3C2440处理器由核心板和底板两大部分组成,外围扩展资源丰富,支持IIS总线,AC97声卡接口。
三星公司的16/32位RISC微处理器S3C2440A,它采用了ARM920t的内核,0.13um的CMOS标准宏单元和存储器单元,新的总线架构AdvancedMicrocontrollerBusArchitecture(AMBA),具有独立的16KB指令ICache和16KB数据DCache。
同时,使用了5级流水线技术,最大工作频率可到400MHz;采用哈佛体系机构,取指和读指可以同时进行;引入了高速缓存(Cache)和写缓存(WriteBuffer),解决了存储器访问速度的瓶颈;支持MMU(MemoryManageUnits,内存管理单元),使用虚拟文件系统,通过内存保护,一个进程的失败并不会影响其他进程的运行,从而增强了系统的稳定性。
论文中用到的片上功能有:
1.60个中断源(1个看门狗定时器,5个定时器,9个UARTs,24个外部中断,4个DMA,2个RTC,2个ADC,1个IIC,2个SPI,1个SDI,2个USB,1个LCD和1个电池故障,1个NAND和2个Camera),1个AC97音频
2.电平/边沿触发模式的外部中断源
3.可编程的边沿/电平触发极性
4.支持为紧急中断请求提供快速中断服务
5.24个外部中断端口
6.130个多功能输入/输出端口
7.4-通道的DMA控制器;
8.支持存储器到存储器,IO到存储器,存储器到IO和IO到IO的传输s
9.采用触发传输模式来加快传输速率
10.8通道多路复用ADC
11.最大500KSPS/10位精度
12.通道多主IIC总线
13.可进行串行,8位,双向数据传输,标准模式下数据传输速度可达100kbit/s,快速模式下可达到400kbit/s.
14.1通道音频IIS总线接口,可基于DMA方式工作
15.串行,每通道8/16位数据传输
16.发送和接收具备128字节(64字节加64字节)FIFO
17.支持IIS格式和MSB-justified数据格式
18.支援16位采样
19.ch立体声PCM输入/1-ch立体声PCM输出1-chMIC输入
3.2电源接口
TQ2440开发板上的电压设计采用5V输入实验板,板上带电源开关和指示灯,经可带载1.5A的低压差线性稳压源AS1117AR-3.3IC芯片稳压,提供给实验板所需要的3.3V电源如图3-1所示。
图3-13.3V电源电路
注意:
输入电压不要大于7V,标配的电源适配器是5V供电。
在不清楚适配器输出电压时,请向适配器的供应商确认输出电压或自行用电压表测试输出电压;以防止因为输入电压过高而导致开发板出现损坏的情况。
3.3IIS音频数据接口
TQ2440提供的音频接口完全按照标准接口提供,绿色为音频输出接口,红色为音频输入接口。
底板与UDA1341TS的接口电路如图3-2所示。
图3-2TQ2440音频接口电路原理图
IIS即音频数据接口,它是Philips和Sony等公司共同推出的接口标准。
本系统把接口与UDA1341TS(Philips公司的)音频数字信号编译码相连接,得到
SPEADER音频输出通道和MICROPHONE音频输入通道。
UDA1341TS可把数字信号
转换为模拟信号,同样也能把立体声模拟信号转化为数字信号,并可用AGC(自动增益控制)、PGA(可编程增益控制)对模拟信号进行处理。
对于数字信号,该芯片提供DSP(数字音频处理)功能。
对于UDA1341TS的L3总线,它是该芯片工作于微
控制器输入模式时使用的,它包括L3DATA、L3MODE和L3CLOCK三根接线,它们分别表示微处理器的接口数据线、接口模式线和接口时钟线(连接GPB2、GPB3、GPB4引脚)。
通过这个接口,微处理器能够对UDA1341TS中的数字音频处理参数和
系统控制参数进行配置。
3.4AC97接口
AC97是音频编解码器(AudioCodec)‘97(1997年)的缩写,此标准最早是Inter公司于1996年发布的应用于PC机的“软”声卡标准。
将声卡中成本最高的数字信号处理(DSP)去掉了,通过特别编写的驱动程序由CPU(CentralProcessingUnit,中央处理器)负责这部分的信号处理工作,降低了声卡的成本。
随着处理器速度的提升,声音处理对CPU的占用越来越不足道。
它提供了一套廉价的音频标准解决方案。
不同于PCM和IIS,AC97不只是一种数据格式,还具有控制功能。
采用了AC-Link与外部的编解码器连接,AC-Link接口包括:
位时钟(BITCLK)、同步信号校正和从编码到处理器和从处理器中解码(SDATDIN和SDATAOUT)的数据队列。
AC97以数据帧SYNC脉冲开始,包含了12个20位的时间段及16位的“tag”段。
共计256个数据序列。
把帧分成时间段,使得传输控制信号与音频数据仅通过4线到达9个音频通道或转换成其他数据流成为可能。
AC97一般采用TQFP48封装,减少了整体管脚数。
事实上,AC97是比IIS更高级的数字音频传输、控制总线标准。
AC97除了传输数据音频信号以外,还可以传输控制信号、寄存器读/写命令。
典型的AC97音频设备连接如图3-3所示:
图3-3AC79音频设备连接图
AC97的通信方式也是同步串行接口,有5根信号线:
1.SYNC——同步信号。
2.BIT_CLK——位时钟信号,由AC97编解码芯片产生。
3.SDATA_OUT——串行数据输出信号。
4.SDATA_IN——串行数据输入信号。
5.nRESER——AC97编解码器复位信号,低电平有效。
与IIS总线不同的是,AC97编解码器有自己的振荡器,可通过晶体产生时钟。
一般而言,AC97编解码芯片的时钟是固定的24.576MHz。
经过分频后,输出28.288MHz的位时钟信号,所以AC97编解码芯片的时钟,所以AC97音频的采样不会因为系统的时钟不准确而产生失真,比被动编解码模式工作的IIS总线效果提高很多。
AC97是一种分时复用的串行同步总线,在总线上定义了13个(编号是0~12)时间片。
如图3-4所示。
图3-4AC97的十三个时间片
与IIS相比,AC97的定义要复杂的很多。
包括6个音频输出通道(可用于5.1的立体声通道),“软”调制解调器通信、控制通道,以及用于读/写AC97编解码器寄存器的数据通道。
编号1~12的每个时间片数据(整个数据帧)的有效性,都可通过时间片0中的对应位控制,这种控制方法使得每个通道的数据相对独立,不会因为一个通道的数据的更新对其它通道产生影响。
AC97数据帧的时序图如图3-5所示,数据在每一个位时钟(BIT_CLK)的下降沿被送出,时间片0中占有了16个时钟周期,其中,最高1位决定整个AC97数据帧是否有效,接着12位决定了后面对应的时间片(1~12)是否有效。
其余的时间片1~12各占20个时钟周期。
整个AC97数据帧占用了256个位时钟周期(BIT_CLK)的时间。
而位时钟的频率固定在12.288MHz,所以一个AC97数据帧的频率刚好是48kHz。
图3-5AC97数据帧的时序
S3C2440A的AC97控制器单元支持AC97的2.0版本特点。
AC97控制器使用一个音频控制器连接(AC-link)来和AC97编解码器通讯。
控制器发送立体声PCM数据给编解码器。
编解码器中的外部数模转换器转换音频采样到模拟音频波形。
控制器也从编解码器接收立体声PCM数据说单声道的MIC数据,然后将数据存储在内存中。
S3C2440A的AC97主要特点:
1.对于立体声PCM输入,立体声PCM输出和单声道MIC输入都有独立的通道。
2.基于DMA操作和基于中断的操作
3.所有通道都仅支持16位采样
4.不同采样率的AC97编解码器接口(48KHz及以下)
5.16位,每个通道16个入口FIFO
6.仅支持主编解码器
第四章AC97音频驱动及实现
设备驱动程序中需要完成的任务包括对设备以及对应资源初始化和卸载控制音频数据在硬件中流动并为音频应用提供标准接口。
读取应用程序传送给设备文件的数据并回送应用程序请求的数据。
这需要在用户空间、内核空间、总线及外设之间传输数据。
嵌入式Linux把硬件设备都看成是文件,通过打开、读取或写入对应的设备文件实现对硬件设备的读写操作,另外还提供ioctl接口给上层用户来设置设备参数。
本驱动程序主要是通过对硬件的控制实现音频流的传输,同时向上层提供了标准的音频接口。
本音频系统驱动提供了两个标准接口:
①数字音频处理,即Dsp,负责音频数据的传输即播放或录音等操作。
②混频器,即Mixer,负责对输出音频进行混音处理。
如音量调节,高低音控制等。
这两部分分别对应设备文件ödevödsp和ödevömixer。
4.1设备的初始化
设备的初始化主要就是UCB1400Codec的初始化和音频设备的注册,步骤如下:
①初始化PXA255的GPIO口为AC2link功能口;
②初始化ACUNIT的GCR寄存器,并重启UCB1400;
③读取UCB1400的ID号,并初始化Codec中的各个混音控制寄存器;
④根据我们系统的需求调整Codec混音的各项参数;
⑤向Linux系统注册dsp设备和mixer设备。
这样UCB1400Codec基本上就处于可用状态了。
4.2Mixer驱动
Mixer驱动只是控制混音效果,并不执行读写操作,所以Mixer的文件操作结构只实现了一个ioctl调用,提供给上层设置Codec的混音效果。
驱动中主要实现了一个结构structac97_codecpxa_ac97_codec。
该结构描述了Codec的基本信息,主要是实现了Codec寄存器的读写函数和混音的控制函数。
Mixer文件操作结构中的ioctl就是调用pxa_ac97_codec中的混音控制函数来实现的。
4.3Dsp驱动
Dsp驱动实现了音频数据的传输,即播放和录音的数据传输。
同时还提供ioctl对UCB1400Codec中DAC和ADC采样率进行控制。
采样率的控制主要就是对照UCB1400手册读写UCB1400Code中的采样率控制寄存器。
所以驱动的主要部分是音频数据传输的控制。
驱动中通过一个结构staticaudio_state_tac97_audio_state来描述整个音频系统的状态,其中最主要的就是两个数据流结构ac97_audio_in和ac97_audio_out。
这两个结构分别描述输入音频流和输出音频流的信息。
通过对ac97_audio_in和ac97_audio_out的操作,分别实现了音频的输入和输出,即音频的播放和录音,本驱动的主要内容就是数据流结构的设计和实现。
该结构应该包含音频缓冲区的信息、DMA的相关信息和所用到的信号量。
还有就是F_IFO的入口寄存器的地址。
其中在传输时缓冲区的设计是音频传输的重点。
以Write函数为例,因为音频数据量通常较大,缓存太小容易造成缓存溢出,所以要采用较大的缓冲区。
而要填充大的缓冲区,CPU就要一次处理大量的数据,这样处理数据时间较长,容易造成延迟。
在这种情况下,我们采用多个缓存的机制,将缓冲区分为多个数据段。
数据段的个数和大小分别在数据流结构中指定。
这样把大的数据段分为几个小段处理,每处理一小段数据就可以通过DMA发送出去。
Read函数也是如此,DMA每发来一小段数据就可以处理了,而不用等到大缓冲区都填满才处理数据。
这里还提供了ioctl接口给上层调用,这样上层还可以根据音频数据的精度,即数据流量,来调整缓冲区数据段的大小和个数,来取得最好的传输效果。
第五章总结
本文采用TQ2440为硬件开发平台,S3C2440为微处理器,UDA1341TS为音频编解码器,使用了Linux操作系统,介绍了在嵌入式系统中构架基于AC97标准的音频系统,实现音频的播放和录音采集。
首先讲述了嵌入式系统选择和设计过程,然后介绍了硬件架构及几个重要接口,同时还介绍了AC97的音频驱动程序和整个驱动过程。
我在学习嵌入式系统初期,起步很是困难,代码间的相互关系错综复杂,整个系统开发过程也十分困难,一时之间抓不到主线。
幸好,在Windows平台下,使用SourceInsight查看代码,很快理清思路,为嵌入式的学习带来很大便利。
在Linux驱动开发过程中,我也曾经因为编写的驱动代码不成功而失望过,痛苦过;然而,当一切问题都解决后,那种喜悦与成就感是无法用语言形容的。
真可谓是:
其中的酸甜苦辣,只有经历过的人,才能真正体会。
相信在可预见的未来,linux的使用者会越来越多。
我很荣幸的成为其中的一员,自己需要不断努力进取,才能更好的使用Linux,为它的应用与推广贡献一份力量。
参考文献
[1]肖文鹏,Linux音频编程指南,[S]2004,http:
∥www2900.ibm.comö.
[2]杜春雷ARM体系结构与编程[M].北京:
清华大学出版社,2003.
[3]宋宝华Linux设备驱动开发详解[M]北京:
人民邮电出版社,2008.2.
[4]刘淼嵌入式系统接口设计与Linux驱动程序开发[M]北京:
北京航空航天大学出版社,2006.5.
[5]高建华,王殊基于S3C2410型微处理器和UDA1341TS型立体声音频编解码器的嵌入式音频系统设计国外电子元器件2006.6:
35-37.
[6]赵敏,杨恢先,汤安平基于S3C2440的嵌入式Linux系统移植的研究与实现2008.12:
1947-1950
[7]龚舟,康烨基于Linux的通用视频音频采集系统的设计与实现电脑知识与技术2008.6:
676-677.
附录1mixer.c
/*
*mixer.c
*对各种混音通道的增益进行调节,其所有的功能都
*通过读写/dev/mixer设备文件来完成
*/
#include
#include
#include
#include
#include
#include
/*用来存储所有可用混音设备的名称*/
constchar*sound_device_names[]=SOUND_DEVICE_NAMES;
intfd;/*混音设备所对应的文件描述符*/
intdevmask,stereodevs;/*混音器信息对应的位图掩码*/
char*name;
/*显示命令的使用方法及所有可用的混音设备*/
voidusage()
{
inti;
fprintf(stderr,"usage:
%s
"%s
"Where
\n",name,name);
for(i=0;i if((1< fprintf(stderr,"%s",sound_device_names[i]); fprintf(stderr,"\n"); exit (1); } intmain(intargc,char*argv[]) { intleft,right,level;/*增益设置*/ intstatus;/*系统调用的返回值*/ intdevice;/*选用的混音设备*/ char*dev;/*混音设备的名称*/ inti; name=argv[0]; /*以只读方式打开混音设备*/ fd=open("/dev/mixer",O_RDONLY); if(fd==-1){ perror("unabletoopen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 课程设计