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

发布者:SerendipitySoul最新更新时间:2006-05-18 来源: 电子技术应用关键字:音频  数据  DMA  设备 手机看文章 扫描二维码
随时随地手机看文章
嵌入式音频系统广泛应用于GPS自动导航、PDA、3G手机等嵌入式领域,但目前国内在这方面的研究较少。音频系统设计包括软件设计和硬件设计两方面,在硬件上使用了基于IIS总线的音频系统体系结构。IIS(Inter-IC Sound bus)又称I2S,是菲利浦公司提出的串行数字音频总线协议[1]。目前很多音频芯片和MCU都提供了对IIS的支持。   

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

       1 硬件体系结构

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

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

       ·正常传输模式。此模式基于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是44B0X芯片与菲利浦公司的UDA1341TS音频芯片的连接示意图。   


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

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

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

       2 音频设备底层软件设计

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

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

       2.1 驱动程序功能

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

       2.2 驱动程序构架

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

       ·数字化音频。这个功能有时被称为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类型的参数。该参数定义了设备无关接口的操作[3]。   设备卸载时使用注销函数。注销时用输入注册时得到的设备号即可。在注销时还必须释放驱动程序使用的各种系统资源包括DMA、设备中断等。   

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

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

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

       为了方便各种物理设备使用DMA资源,在程序中使用strcut s3c44b_DMA数据结构管理系统各个DMA通道的资源,如图2。每个DMA通道被多个外部设备共用,为各个外设分配的DMA缓存区的大小和数目可能不一致,所有分配的数据块使用DMA缓存数据块DMA_buf管理。各个不同设备申请的数据缓存区形成一个单向链表,每个链表节点包含一个起点字段,存放实际DMA缓存起始位置的物理地址。在设备第一次使用DMA时,使用kmalloc函数为DMA_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_operations中的open、read和write例程。在open例程中需要完成的任务主要是设备初始化,包括:   

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

       ·为设备分配DMA通道;   

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

       当缓存区和DMA设置好后,读写操作主要对缓存操作,对设备的操作除了读写操作外,还有音频播放中的暂停和继续。这两个操作在ioctl接口中实现,通过对相应的IIS总线控制器(IISCON寄存器)操作实现。此外,在对音频操作时还要注意:一次采样得到的数据必须一次处理,否则不能正确播放数据。


参考文献
1 Philips Semiconductors. I2S bus specification. http://www.semiconductor.philips.com.1996
2 Samsung Inc. S3C44B0X Risc Microprocessor Datasheet.http://www.samsung.com/.2003
3 Alessandro Rubini,Jonathan Corbet.Linux设备驱动程序.北京:清华大学出版社,2000
4 Jeff Tranter,Hannu Sauolainen Open Sound System Progra-mmer,s Guide. 2003
5 钟玉琢,沈洪,冼伟铨.多媒体计算机技术及应用.北京:中国电力出版社,2000
关键字:音频  数据  DMA  设备 引用地址:基于IIS总线的嵌入式音频系统设计

上一篇:ARM 入门
下一篇:改善嵌入式系统实时效能的新途径

推荐阅读最新更新时间:2024-05-02 20:24

LM386低电压音频功率放大器的原理与典型应用电路图
  LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为20。但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。   LM386的封装形式有塑封8引线双列直插式和贴片式。 特性(Features):  * 静态功耗低,约为4mA,可用于电池供电。  * 工作电压范围宽,4-12V or 5-18V。  * 外围元件少。  * 电压增益可调,20-200。  * 低失真度。
[电源管理]
LM386低电压<font color='red'>音频</font>功率放大器的原理与典型应用电路图
TI与信威联合推出宽带语音及数据覆盖解决方案
2008 年 6 月 30 日, 德州仪器 (TI) 与北京信威通信技术股份有限公司 (Xinwei) 联合宣布推出信威新一代 McWiLL/SCDMA 宏基站 ,从而使数百万中国家庭能够以超高速接收语音与数据通信服务,同时还有助于中国服务供应商降低部署成本。通过充分利用 TI 功能强大的 3GHz 多核 DSP 、优化的软件模拟信号链组件,信威不仅能在 2008 年北京奥运会召开前极短的时间内完成紧张的部署工作,还能为 TD-LTE 等超 3G 技术提供移植路径。 如欲了解更多详情,敬请访问: www.ti.com/TCI6487 。 ABI
[网络通信]
德州仪器开发最快的具备 40 倍速音乐 CD 抓轨性能的MPEG4 AAC 编码器库
TI 高速编码系统解决方案新增 EVM 与编码器 2006 年 7 月 4 日,北京讯 日前,德州仪器 (TI) 宣布 AAC 编码器库的开发工作已经完成,该库采用基于 Aureus 系列音频 DSP 的高速编码(HSE)应用软件,可实现高达40倍速的 CD 抓轨性能。与此前推出的采用 ATRAC320 编码器的 20 倍速 CD 抓轨速度相比,实现了显著的性能提升。采用 32 位浮点处理技术的超高速 AAC 编码器库于Tsukuba技术中心开发完成。TI 新型 HSE 系统解决方案可用于小型车载音频设备与迷你组合音响等应用中。 快速易行的 CD 抓轨 Aureus DSP
[新品]
工业大数据实时采集、存储及机器学习技术飞速发展
“根据IDC此前的EMC数字宇宙研究显示,平均仅5%的 大数据 得到分析。” NI(美国国家仪器,National Instruments,简称“NI”) 工业 物联网行业市场经理崔鹏在前不久举行的2017 NI工业物联网高峰论坛上谈到相较于 22 ×2 60 字节的大数据总量,5%无异于冰山一角。而作为一种新的资产、资源和生产要素,工业大数据是工业物联网的核心,更是中国制造业转型升级的重要战略资源。 智能测量+管理,平台化方案方可透视不可见数据的价值 要解决大模拟数据挑战,NI认为第一步便是更智能的测量。作为此次NI工业物联网高峰论坛的特邀嘉宾,美国辛辛那提大学教授、美国智能维护系统中心主任李杰教授认为,未来数据收集的趋势将集中
[嵌入式]
移动显示技术发展及在未来手持设备中应用
    显示模块是移动电子设备几乎是最最重要的部分。它应该说是人与数字电子沟通的窗口,因为我们靠图像,靠这样的显示技术可以和数字世界进行非常、非常有效的沟通。特别是现在,我们有很多的用户交互技术。比方说,我们的触摸屏等等其他技术,可以在显示技术里面使得我们的显示技术变得更加生动,更加有意思。从某种意义上,我想大家都会有这样的体会,一个显示屏在电子设备上已经是普通用户购买我们产品上一个最重要的因素。这个显示好不好,显示和用户交互的体验怎么样,很大程度上决定这个用户会不会买你这个产品,或者你可以放到什么样的价格,使得你的价格得到用户的认同。显示技术在移动电子产品当中是一个最最重要的和用户交互的窗口。对显示技术来说,有两个最最重要的要求。
[嵌入式]
可穿戴设备、3D打印机——近未来焦点技术及影响的关键点
    “现在没有哪种产业和企业是与数字技术无关的。正因为如此,才更需要看清技术动向,判断如何将这些技术为己所用”,高德纳咨询公司副总裁、分析师史蒂夫·普伦蒂斯(Steve Prentice)这样的强调道。        高德纳日本公司于2013年4月24日至26日期间,在东京举办了“IT基础设施及数据中心峰会2013”。普伦蒂斯在4月24日发表了题为“展望2017,抓住先进潮流!”的演讲,介绍了未来3~4年的焦点技术,以及在找寻对自身业务影响深远的技术时,应当留意的几个方面。 3D打印机带来惊人冲击        “其冲击之大,再怎么强调也不为过”,令普伦蒂斯发出如此感慨的,是3D打印机。3D打印机如今已经在广泛的领域成为了
[手机便携]
基于MSP430的数据采集系统设计
1 引 言 在科学研究及其他各种领域中,数据采集和监测已经成为日益重要的检测技术。 在许多工业测控机械、医疗仪器以及消费电子产品中,都对数据采集系统的实时性与功耗提出了更高的要求:即在满足微功耗、微型化的总体设计原则的基础上,又要能实时反映现场采集数据的变化。这就对系统的功耗、采样速度、数据存储和传输速度等提出了更高的要求。然而,随着半导体与微控制器技术的飞速发展,各种微电子器件性能不断提升,功耗却不断降低。技术的进步使得高速度、低功耗的数据采集系统得以实现。 本文设计的数据采集与显示系统采用TI公司研制的MSP430系列超低功耗单片机作为核心控制元件,实现了数据的高速采集与显示。 系
[单片机]
基于MSP430的<font color='red'>数据</font>采集系统设计
NV040C语音芯片在智能电子设备上的应用方案
电子设备是指由集成电路、晶体管、电子管等电子元器件组成。一般包括:电脑、空调、冰箱、洗衣机、微波炉、打印机等。 电子设备还包括电子计算机以及由电子计算机控制的机器人、数控系统或程控系统等。例如利用加热器调节房间的温度即可视为一个过程,因为其目的是要使一输出量(在此例中是温度)到达一理想值内(例如20度),且此输出量不随时间变化。 在此例中温度是一个控制变量,不过若用温度计量测温度,决定是否加热,温度也同时是输入变量。 目前大部分电子设备都会配备说明书,刚收到产品时我们都会看看说明书,但是很多功能不常用到,特别是过一段时间之后,说明书就已经找不到了,为了让用户更好地操控电子设备,很多厂家都会在设备中置入语音提示功能! N
[嵌入式]
NV040C语音芯片在智能电子<font color='red'>设备</font>上的应用方案
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved