基于IIS总线的嵌入式音频系统设计

发布者:JoyfulSpirit5最新更新时间:2013-04-17 来源: dzsc关键字:IIS总线  音频系统  S3C44B0 手机看文章 扫描二维码
随时随地手机看文章

嵌入式音频系统广泛应用于GPS自动导航、PDA、3G手机等嵌入式领域,但目前国内在这方面的研究较少。

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

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

1 硬件体系结构

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

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

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

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

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

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

图1是44BOX芯片与菲利浦公司的UDAl341TS音频芯片的连接示意图。

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

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

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

2 音频设备底层软件设计

嵌入式系统硬件设备种类繁多,且缺乏PC中标准的体系结构,所以必须为各种设备编写驱动程序。

驱动程序的主要任务是控制音频数据在硬件中流动,并为音频应用提供标准接口。由于嵌入式系统资源有限,且处理器能力不强,所以在音频设备的驱动程序设计中,合理分配系统资源是难点。

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

2.1 驱动程序功能

设备驱动程序中需要完成的任务包括:对设备以及对应资源初始化和释放;读取应用程序传送给设备文件的数据并回送应用程序请求的数据。这需要在用户空间、内核空间、总线及外设之间传输数据。

2.2 驱动程序构架

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

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

 

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

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

件分别是/dev/dsp和/dev/mixer。

2.3 设备的初始化和卸载

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

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

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

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

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

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

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

内存管理中的重要问题是缓存区块设计。常见的设计思路是使用一个缓存区,CPU先对缓存区处理,然后挂起,音频设备对缓存区操作,音频设备处理完后唤醒CPU,如此循环。需要处理大量音频数据的音频设备驱动程序,可以使用双缓冲。以录音为例,系统使用缓存2存放音频设备量化好的声音,CPU(应用程序)则处理缓存1中的声音数据;当Codec设备填充完缓存2,它移向缓存1填充数据,而CPU转向处理缓存2里的数据;不断交替循环,如图3(a)、(b)所示。

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

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

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

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

2.5 设备无关操作

设备无关操作对应于file_operations指向的各个例程,它让用户用访问文件的方式访问设备。对设备的打开和读写是启动程序为用户程序提供的最主要接口,分别对应于file_eratlons中的open、read和write例程。在open例程中需要完成的任务主要是设备初始化,包括:

· 通过设置IIS寄存器控制音频设备的初始化,并且初始化设备的工作参数(包括速度、声道、采样宽度);

· 为设备分配DMA通道;

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

当缓存区和DMA设置好后,读写操作主要对缓存操作。 对设备的操作除了读写操作外,还有音频播放中的暂停和继续。这两个操作在ioctl接口中实现,通过对相应的IIS总线控制器(IISCON寄存器)操作实现。

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

关键字:IIS总线  音频系统  S3C44B0 引用地址:基于IIS总线的嵌入式音频系统设计

上一篇:基于嵌入式Web的电子交警系统
下一篇:UClinux2.4.x+S3C4510B平台的USB-HOST驱动设计

推荐阅读最新更新时间:2024-03-16 13:22

D类音频系统中斩波运放电路的设计
1 引言 本文在0.35微米N阱工艺的基础上,设计了单电源供电的全差分斩波运放电路,同时,为了减小残余电压的失调, 采用了T/H(跟踪-保持)解调技术,该电路在斩波频率150KHz工作时,输入等效噪声达到31.12nV/Hz。 在D类音频放大器的运放电路设计中,信号的低谐波失真(Total Harmonic distortion)和噪声对运放的设计形成挑战。对于20~20KHz范围的音频信号而言,运放的失真主要是由电压失调和低频1/f噪声引起的。而CMOS工艺相对较高的1/f噪声和电压失调,使得这一问题尤为严重。当要求电路的失调电压低于1mV且输入等效噪声低于100nV/Hz时。普通的CMOS运放很难满足需求。而常见的静态失
[模拟电子]
D类<font color='red'>音频系统</font>中斩波运放电路的设计
手机中ESD和EMI干扰-音频系统连接器的解决方案
  这篇文章简要地探讨了手机音频系统中ESD及EMI的起因及结果。接着研讨了ESD干扰抑制器和EMI滤波器的使用,以避免这些威胁。最后,比较了当前三种解决方案。   现代材料和技术引起静电放电(ESD)和电磁干扰(EMI),并成为经常存在的危险。我们的穿着和我们接触的物品会引起静电放电。数字技术已有电磁干扰。静电放电会破坏手机里的电子部件。手机容易替换,但对用户的伤害很大。手机电路设计者必须确保采取必要的措施,以消除ESD的破坏。   在音频电路中如有电磁干扰(EMI),会出现嘶嘶、噼啪、嗡嗡等声音,声音质量很差。手机用户无法忍受这样的干扰。因此,必须设法过滤音频电路的电磁干扰。   静电放电——起因、结果和抑制
[嵌入式]
一种AVR单片机智能多接口的全硬件音频系统的解决方案
0 引言 在传统的硬件体系结构中,接口被看作是相应外部设备的一部分,每个接口一般都只能连接到同一种设备上。虽然通过所谓“菊花链”(daisyohain)方式可以把若干同种设备连接到同一接口上,却不能将不同种类的设备混合连接到同一接口上,由于目前USB接口的设备越来越丰富,种类越来越多,为了满足这样的需求,这里给出一种USB 2.O接口的解决方案,通过USB接口读取各种USB设备;通过SD卡接口,读取各种主流存储卡。该方案支持常用的USB存储设备(包括U盘/USB硬盘/USB闪存盘/USB读卡器)和SD卡(包括标准容量SD卡和高容量HC-SD卡以及协议兼容的MMC卡和TF卡)。 本文提出了一种智能多接口的全硬件音频系统的解
[单片机]
一种AVR单片机智能多接口的全硬件<font color='red'>音频系统</font>的解决方案
D类音频系统中斩波运放电路的设计
       1 引言   在D类音频放大器的运放电路设计中,信号的低谐波失真(Total Harmonic distortion)和噪声对运放的设计形成挑战。对于20~20KHz范围的音频信号而言,运放的失真主要是由电压失调和低频1/f噪声引起的。而CMOS工艺相对较高的1/f噪声和电压失调,使得这一问题尤为严重。当要求电路的失调电压低于1mV且输入等效噪声低于100nV/Hz时。普通的CMOS运放很难满足需求。而常见的静态失调消零技术,如trimming修调,虽然能很好地消除电压失调的影响,但是却不能降低1/f噪声。解决这个问题的最好方法就是采用动态消零技术(dynamic offset—cancellation techn
[电源管理]
D类<font color='red'>音频系统</font>中斩波运放电路的设计
OMAP5912双核通信及其数字音频系统实现
1OMAP5912平台简介 开放式多媒体应用平台(()pen MuItimedia Appli一cations PIatform,OMAP)是针对第三代手机开发的高性能多媒体处理器。除具有性能/功耗比的优势外,还提供丰富的外围接口,支持几乎所有流行的有线和无线接口标准。因其出色表现,该平台一直得到世界主要移动设备制造商(如诺基亚、爱立信、索尼等)的青睐。 0MAP5912采用独特的双核结构,内含1个实现控制功能的带有TI增强型ARM926EJ-S内核的处理器和1个实现数据处理功能的高性能、低功耗TMS320C55x DSP内核。ARM处理器可用来实现各种通信协议、控制和人机接口;DSP具有多条数据地址总线,非常适合数据密集的多
[嵌入式]
Windows CE下基于TSC2101的音频系统设计
Windows CE是一个开放的、可裁剪的、32位的实时嵌入式操作系统。它具有可靠性好、实时性高、内核体积小的特点,所以被广泛用于各种嵌入式智能设备的开发,其应用涉及工业控制、信息家电、移动通信、汽车电子、个人电子消费品等各个领域,是当今应用最多、增长最快的嵌入式操作系统。而在这些嵌入式应用中,音频模块成为了大多数产品不可或缺的一部份。本文针对Windows CE操作系统,构造了基于Intel Xscale PXA272和TSC2101音频芯片的音频系统,并简要介绍了其实现方法。 音频系统的硬件实现 本设计中的音频驱动采用Unified Audio模型实现,基于Intel Xscale PXA272处理器和TI 的TSC210
[嵌入式]
基于IIS总线的嵌入式音频系统设计
摘要:介绍了基于IIS总线的嵌入式音频设备的硬件体系结构及其Linux驱动程序的设计。在音频驱动程序设计综合使用了DMA、分段多缓存区和内存映射技术以提高系统性能,满足音频实时性的要求。 关键词:音频设备驱动程序 IIS总线 嵌入式Linux DMA 内存映射 嵌入式音频系统广泛应用于GPS自动导航、PDA、3G手机等嵌入式领域,但目前国内在这方面的研究较少。 音频系统设计包括软件设计和硬件设计两方面,在硬件上使用了基于IIS总线的音频系统体系结构。IIS(Inter-IC Sound bus)又称I2S,是菲利浦公司提出的串行数字音频总线协议。目前很多音频芯片和MCU都提供了对IIS的支持。 在软件上,作为一个功能复杂的
[嵌入式]
利用U-Boot作为系统bootloader实现uClinux向S3C44B0的移植
1 引言 S3C44B0是Samsung公司推出的一款为手持设备或其他通用设备开发的32位处理器,它基于ARM7TDMI核,没有内存管理单元(MMU)。在采用无MMU的微处理器的嵌入式系统中广泛采用的就是uClinux系统,作为linux的衍生系统,其具有支持多任务、内核精简、高效稳定和源代码开放的优点。系统移植的基本过程包括:获取较新版本的linux-2.6.9内核源码,根据目标平台对源码中与硬件平台相关部分进行修改,添加必要的外设驱动程序,对系统进行针对目标平台的交叉编译,生成的内核映像文件的下载调试等。 2 硬件环境介绍 硬件平台以S3C44B0为核心,采用的外部晶振频率为6MHz,内核主频最高可达到66
[单片机]
利用U-Boot作为系统bootloader实现uClinux向<font color='red'>S3C44B0</font>的移植
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved