首 页电子文章电子资料客户留言94论坛繁體中文
设为首页
加入收藏
联系我们
您当前的位置:中国电子前沿 -> ARM技术 -> ARM应用 -> 电子文章内容 退出登录 用户管理
栏目导航
· ARM入门 · ARM系统
· ARM应用
热门电子文章
· [linux移植] 如何监控和保..
· [linux移植] Linux解释器..
· [linux移植] 在Redhat Li..
· [CPLD应用] CPLD器件在时..
· [VHDL学习] 错误检测与纠..
· [VHDL学习] 在PLD开发中提..
· [VXwork移植] BSP配置文件..
· [USB技术] USB设计
· [USB技术] USB综述
· [USB技术] 如何构造一个简..
· [USB技术] 《USB总线开发..
· [USB技术] 电脑USB接口可..
相关电子文章
· 基于嵌入式linux和s..
· 基于ARM的嵌入式程序..
· [组图] ARM7系统中实..
· [组图] 基于S3C44B0X..
· 制作基于软盘的Linu..
· 基于Linux平台的Dom..
· 多输出 DC/DC 电源模..
· [图文] 一种基于CPLD..
· [组图] 基于EL7558BC..
· [组图] 基于单片机的..
基于IIS总线的嵌入式音频系统设计
作者:佚名  来源:不详  发布时间:2006-9-11 14:20:46  发布人:zangyl

减小字体 增大字体

嵌入式音频系统广泛应
面的研究较少。
用于GPS自动导航、PDA、3G手机

等嵌入式领域,但目前国内在这方


  音频系统设计包括软件
体系结构。IIS(Inter-IC S
目前很多音频芯片和MCU都
设计和硬件设计两方面,在硬件
ound bus)又称I2S,是菲利浦公
提供了对IIS的支持。
上使用了基于IIS总线的音频系统
司提出的串行数字音频总线协议。


  在软件上,作为一个功
源代码开放的类UNIX系统,
式处理器的支持,所以广泛
序制作的复杂度,但是由于
必须合理分配资源,使用合
的音频系统,并介绍了该音
能复杂的嵌入式系统,需要有嵌
由于其具有内核可裁剪性,且提
应用于嵌入式高端产品中。虽然
音频应用对实时性有很高的要求
适的算法。本文针对三星公司的
频系统基于Linux2.4.0内核的
入式操作系统支撑。Linux是一个
供对包括ARM、PPC在内的多种嵌入
Linux提供了众多API来降低驱动程
,且需要处理的数据量较大,所以
S3C44B0 ARM处理器构造了基于lis
驱动程序构造技术。

  1 硬件体系结构

  IIS总线只处理声音数据。其他信号(
尽可能少,IIS只使用了三根串行总线。
选择线(声道选择)、时钟信号线。
如控制信号)必须单独传输。为了使芯片的引出管脚
这三根线分别是:提供分时复用功能的数据线、字段


  在三星公司的ARM芯片中,为了实现
和输出。此外三星公司的IIS接口提供三
全双工模式,使用了两条串行数据线,分别作为输入
种数据传输模式:

  • 正常传输模式
寄存器,通过IISCON寄存器
。此模式基于FIFO寄存器。该模
的第七位控制FIFO。
式下CPU将通过轮询方式访问FIFO


  • DMA模式。此模式是一种外
部设备与主存交换数据,从而提高系统的
部设备控制方式。它使用窃取总线控制权的方法使外
吞吐能力。

  在三星公司的ARM芯片
行外设共用两个桥联DMA(BD
工作在DMA模式下。此模式
控制器对FIFO中的数据进行
中有4个通道DMA控制器用于控制
MA)类型的DMA通道。通过设置CP
下FIFO寄存器组的控制权掌握在
处理。DMA模式的选择由IISCON
各种外部设备,其中IIS与其他串
U的IISFCON寄存器可以使IIS接口
DMA控制器上。当FIFO满时,由DMA
寄存器的第四和第五位控制。

  • 传输/接收模
数据。本系统使用该数据传
式。该模式下,IIS数据线将通
输模式。
过双通道DMA同时接收和发送音频


  在这个体系结构中,为
例)先由内部总线送到内存
输给音频芯片。通道1用来
了实现全双工,数据传输使用两
,然后传到BDMA控制器通道0,
录音。
个BDMA通道。数据传输(以回放为
再通过IIS控制器写入IIS总线并传


  三星公司的BDMA控制器没有内置的存
区。缓存区的地址在通道DMA控制器的地
储区域,在驱动程序中必须为音频设备分配DMA缓存
址寄存器中设置。

  UDAl341TS芯片除了提供IIS接口和麦
分别连到S3C44B0的3个通用数据输出引脚
克风扬声器接口,还提供L3接口控制音量等。L3接口
上。

  2 音频设备底层软件设计

  嵌入式系统硬件设备种
动程序。
类繁多,且缺乏PC中标准的体系

结构,所以必须为各种设备编写驱


  驱动程序的主要任务是
入式系统资源有限,且处理
源是难点。
控制音频数据在硬件中流动,并
器能力不强,所以在音频设备的

为音频应用提供标准接口。由于嵌
驱动程序设计中,合理分配系统资


  需要注意的是,在三星公司的ARM芯
以使用普通的内存访问语句读写I/O寄存
基于Intel处理器的PC最大的不同。
片中,I/O设备的寄存器作为内存空间的一部分,可
器,进而控制外部设备。这是该嵌入式系统与传统的


  2.1 驱动程序功能                                                          

  设备驱动程序中需要完
传送给设备文件的数据并回
设之间传输数据。
成的任务包括:对设备以及对应
送应用程序请求的数据。这需要

资源初始化和释放;读取应用程序
在用户空间、内核空间、总线及外


  2.2 驱动程序构架                                                          

  Linux驱动程序中将音
UDAl341TS音频芯片提供如
频设备按功能分成不同类型,每
下功能:
种类型对应不同的驱动程序。


  • 数字化音频。这个功能有时
音文件或录制声音。
被称为DSP或Codec设备。其功能是实现播放数字化声


  • 混频器。用来
控制各种输入输出的音量大小,
在本系统中对应L3接口。

  在Linux设备驱动程序将设备看成文
函数指针与驱动程序对应例程函数绑定,
频设备(audio)、混频器(mixer)对应的设
件,在驱动程序中将结构file_operations中的各个
以实现虚拟文件系统VFS对逻辑文件的操作。数字音
备文件分别是/dev/dsp和/dev/mixer。

  2.3 设备的初始化和卸载                                                    

  /dev/dsp的驱动设计
无关操作(例程)的实现以及
主要包含:设备的初始化和卸载
中断处理程序。
、内存与DMA缓存区的管理、设备


  在设备初始化中对音频
数register sound_dsp()和
在2.2以上版本的内核driv
到设备标识,并且实现设备
struct file_operations类
设备的相关寄存器初始化,并在
regiter_sound_mixer()注册音
ers/sound/sound_core.c文
无关操作的绑定。在这些注册函
型的参数。该参数定义了设备无
设备注册中使用了两个设备注册函
频设备和混频器设备。这两个函数
件中实现。其作用是注册设备,得
数里使用的第一个参数都是
关接口的操作。

  设备卸载时使用注销函数。注销时用
驱动程序使用的各种系统资源包括DMA、
输入注册时得到的设备号即可。在注销时还必须释放
设备中断等。

  2.4 DMA缓存区设计和内存管理                                            

  在音频设备的驱动程序
有很高的实时性要求,所以
设计中,DMA缓存区设计和内存
合理地使用内存能加快对音频数
管理部分最为复杂。由于音频设备
据的处理,并减少时延。

  三星公司的BDMA控制器没有内置DMA
存区。这样就能通过DMA直接将需要回放
存储区域,在驱动程序中必须为音频设备分配DMA缓
或是录制的声音数据存放在内核的DMA缓存区中。

  为了方便各种物•理设备使用D
管理系统各个DMA通道的资源,如图2。每
DMA缓存区的大小和数目可能不•一
理。各个不同设备申请的数据缓存区形成
放实际DMA缓存起始位置的物理地址。在
分配内存,并且使用consistent_alloc函
入队列中。从第二次开始通过缓存区的标
MA资源,在程序中使用strcut s3c44b_DMA数据结构
个DMA通道被多个外部设备共用,为各个外设分配的
致,所有分配的数据块使用DMA缓存数据块DMA_buf管
一个单向链表,每个链表节点包含一个起点字段,存
设备第一次使用DMA时,使用kmalloc函数为DM A_buf
数为DMA分配实际的连续物理缓存区,然后将节点插
示符对缓存区进行操作。

  内存管理中的重要问题
存区处理,然后挂起,音频
处理大量音频数据的音频设
音频设备量化好的声音,CP
,它移向缓存1填充数据,
示。
是缓存区块设计。常见的设计思
设备对缓存区操作,音频设备处
备驱动程序,可以使用双缓冲。
U(应用程序)则处理缓存1中的声
而CPU转向处理缓存2里的数据;

路是使用一个缓存区,CPU先对缓
理完后唤醒CPU,如此循环。需要
以录音为例,系统使用缓存2存放
音数据;当Codec设备填充完缓存2
不断交替循环,如图3(a)、(b)所


  使用这种方法处理音频
处理传输进来的音频数据。
和输出同时分配内存,对应
数据,能够提高系统的并行能力
由于实际系统被设计成支持全
的数据结构设计如图4所示。
。应用程序可以在音频工作的同时
双工的音频系统,所以必须为输入


  图4中音频设备缓存控制块管理音频
指向输入和输出缓存结构audio_buf,输
输人输出使用了不同DMA通道,所以音频
audio_buf中分别有两个DMA起点字段分别
缓存.区是否被映射、是否激活、是否暂
缓存的大小和数据传输速度。例如使用"8
64kbps的数据流量。如果是两个4K字节的
并把它存到Flash芯片中(或者传输到其它
出。若采用高品质的采样,例如使用CD音
,CPU处理音频数据的时间就只有23ms。
题。
设备的缓存区。在控制块中输入/输出缓存指针分别
入输出控制块指针分别指向对应的DMA控制块。因为
设备缓存控制块有两个DMA控制块控制指针。在
指向双缓存区的起始物理地址。缓存区状态字段包含
停等信息。 应用程序处理缓存中数据的速度依赖于
kHz/8位/单工" 的采洋方式录音,音频芯片产生
缓存,那么应用程序就只有0.5s处理缓存中的数据
设备中)。若0.5s内不能处理这些数据,缓存就会溢
质的采样,那么Codec产生数据的速度将达1376kbps
在CPU负载较大的情况下,将可能出现数据丢失的问


  为了解决音频应用I/O数据量大的问
实际上大的缓存区需要更长的填充时间,
了解决延时的问题,使用多段缓存机制。
小的块。对较大的缓存区的操作转变成对
情况下提供较大的缓存。不同的音频应用
用程序层上,驱动程序还必须提供接口让
ioctl中实现。对缓存区块的大小控制通
题,最简单易行的方法是使用比较大的缓存区域。但
在使用时会出现延时,并可能占用过多CPU资源。为
在这种机制下,将可用的缓存区分割成若干个相同大
较小的缓冲区块的操作,在不增加缓存区操作时间的
,精度不一样,需要的缓存大小也不一样。所以在应
应用程序改变块的大小和个数。这个接口可以在
过对audio_buf中的对应字段设置实现。

  使用内存映射(mmap)技
。空间和用户空间,驱动程
应用一般数据量比较大,而
高CPU的利用率。内存映射
到用户空间,用户不需使用
贝。图4中缓存区状态和缓
结构复杂,需要将每个缓存
术是另一种提高系统性能的途径
序工作在内核空间,并负责在内
且有较高的质量要求,在驱动程
通过remap page_range将分配给
copy_to_user和copy_from_user
存区起点两个字段也用于内存映
块分别映射。
。Linux系统的内存空间分为内核
核空间和用户空间传输数据。音频
序中还可以使用内存映射进一步提
DMA缓存区的内核空间的内存映射
将数据在内核空间与用户空间中拷
射服务。在实现时由于DMA的缓存


  2.5 设备无关操作                                                          

  设备无关操作对应于fi
设备。对设备的打开和读写
file_eratlons中的open、r
,包括:
le_operations指向的各个例程
是启动程序为用户程序提供的最
ead和write例程。在open例程中

,它让用户用访问文件的方式访问
主要接口,分别对应于
需要完成的任务主要是设备初始化


  • 通过设置IIS
速度、声道、采样宽度);
寄存器控制音频设备的初始化,

并且初始化设备的工作参数(包括


  • 为设备分配DMA通道;                                        

  • 根据采样参数
计算出缓存内段的大小(程序也
可以指定缓存内段的大小);

  当缓存区和DMA设置好
还有音频播放中的暂停和继
器(IISCON寄存器)操作实现
后,读写操作主要对缓存操作。
续。这两个操作在ioctl接口中

对设备的操作除了读写操作外,
实现,通过对相应的IIS总线控制


  此外,在对音频操作时还要注意:一
数据。
次采样得到的数据必须一次处理,否则不能正确播放


[] [返回上一页] [打 印] [收 藏]
上一篇电子文章:44B0的初始化程序的理解
∷相关电子文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
关于本站网站帮助广告合作下载声明友情连接网站地图
Copyright © 2002-2006 EMB-CN.com. All Rights Reserved .