IIS总线的嵌入式音频系统设计_第1页
IIS总线的嵌入式音频系统设计_第2页
IIS总线的嵌入式音频系统设计_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于 IIS 总线的嵌入式音频系统设计嵌入式音频 系统广泛应用于 GPS 自动导航、 PDA 、3G 手机等嵌入式领域,但目前国内在这方面的研究较 少。音频系统设计包括软件设计和硬件设计两方面,在硬件上使用了基于 IIS 总线 的音频系统体系结构。 IIS(Inter-IC Sound bus) 是菲利浦公司提出的串行数字音频总线协议。目前很多音频芯片和 MCU 都提 供了对 IIS 的支持。在软件上,作为一个功能复杂的嵌入式系统,需要有嵌入式操作系统支撑。 Linux 是一个源代码开放的类 UNIX 系统,由于其具有内核可裁剪性,且提供对包括ARM 、PPC 在内的多种嵌入式处理器的支持,所

2、以广泛应用于嵌入式高端产品中。 虽然 Linux 提供了众多 API 来降低驱动程序制作的复杂度,但是由于音频 应用对实时性有很高的要求,且需要处理的数据量较大,所以必须合理分配资源,使用合适的算法。本文 针对三星公司的 S3C44B0 ARM 处理器构造了基于 IIS 的音频系统,并介绍了该音频系统基于 Linux2.4.0 内核的驱动程序构造技术。1 硬件体系结构IIS 总线只处理声音数据。其他信号 (如控制信号 ) 必须单独传输。为了使芯片的引出管脚尽可能少,IIS 只使用了三根串行总线。这三根线分别是:提供分时复用功能的数据线、字段选择线(声道选择 ) 、时钟信号线。在三星公司的 AR

3、M 芯片中,为了实现全双工模式,使用了两条串行数据线,分别作为输入和输出。此外 三星公司的 IIS 接口提供三种数据传输模式:正常传输模式。 此模式基于 FIFO 寄存器。该模式下 CPU 将通过轮询方式访问 FIFO 寄存器,通过 IISCON 寄存器的第七位控制 FIFO 。DMA 模式。 此模式是一种外部设备控制方式。 它使用窃取总线控制权的方法使外部设备与主存交换数据, 从而提高系统的吞吐能力。在三星公司的 ARM 芯片中有 4 个通道 DMA 控制器用于控制各种外部设备,其中 IIS 与其他串行外设共 用两个桥联 DMA(BDMA) 类型的 DMA 通道。通过设置 CPU 的 IIS

4、FCON 寄存器可以使 IIS 接口工作在 DMA 模式下。此模式下 FIFO 寄存器组的控制权掌握在 DMA 控制器上。当 FIFO 满时,由 DMA 控制器 对 FIFO 中的数据进行处理。 DMA 模式的选择由 IISCON 寄存器的第四和第五位控制。传输/ 接收模式。该模式下, IIS 数据线将通过双通道 DMA 同时接收和发送音频数据。本系统使用该数据 传输模式。图1 是 44B0X 芯片与菲利浦公司的 UDA1341TS 音频芯片的连接示意图在这个体系结构中,为了实现全双工,数据传输使用两个 BDMA 通道。数据传输 (以回放为例 ) 先由内部总 线送到内存,然后传到 BDMA 控

5、制器通道 0,再通过 IIS 控制器写入 IIS 总线并传输给音频芯片。通道 1 用来录音。三星公司的 BDMA 控制器没有内置的存储区域,在驱动程序中必须为音频设备分配 DMA 缓存区。缓存区 的地址在通道 DMA 控制器的地址寄存器中设置。UDA1341TS 芯片除了提供 IIS 接口和麦克风扬声器接口, 还提供 L3 接口控制音量等。 L3 接口分别连到 S3C44B0 的 3 个通用数据输出引脚上。2 音频设备底层软件设计嵌入式系统硬件设备种类繁多,且缺乏 PC 中标准的体系结构,所以必须为各种设备编写驱动程序。 驱动程序的主要任务是控制音频数据在硬件中流动,并为音频应用提供标准接口。

6、由于嵌入式系统资源有 限,且处理器能力不强,所以在音频设备的驱动程序设计中,合理分配系统资源是难点。需要注意的是, 在三星公司的 ARM 芯片中, I/O 设备的寄存器作为内存空间的一部分, 可以使用普通的内 存访问语句读写 I/O 寄存器,进而控制外部设备。这是该嵌入式系统与传统的基于 Intel 处理器的 PC 最 大的不同。2.1 驱动程序功能 设备驱动程序中需要完成的任务包括:对设备以及对应资源初始化和释放;读取应用程序传送给设备文件 的数据并回送应用程序请求的数据。这需要在用户空间、内核空间、总线及外设之间传输数据。2.2 驱动程序构架Linux 驱动程序中将音频设备按功能分成不同类

7、型,每种类型对应不同的驱动程序。 UDA1341TS 音频芯 片提供如下功能:数字化音频。这个功能有时被称为 DSP 或 Codec 设备。其功能是实现播放数字化声音文件或录制声音。混频器。用来控制各种输入输出的音量大小,在本系统中对应 L3 接口。在 Linux 设备驱动程序将设备看成文件,在驱动程序中将结构中的各个函数指针与驱动程序对应例程函数 绑定,以实现虚拟文件系统 VFS 对逻辑文件的操作。数字音频设备 (audio) 、混频器 (mixer) 对应的设备 文件分别是 /dev/dsp 和 /dev/mixer 。2.3 设备的初始化和卸载/dev/dsp 的驱动设计主要包含:设备的

8、初始化和卸载、内存与 DMA 缓存区的管理、设备无关操作 (例程 ) 的实现以及中断处理程序。在设备初始化中对音频设备的相关寄存器初始化,并在设备注册中使用了两个设备注册函数register_sound_dsp() 和 regiter_sound_mixer() 注册音频设备和混频器设备。 这两个函数在 2.2 以 上版本的内核 drivers/sound/sound_core.c 文件中实现。 其作用是注册设备, 得到设备标识, 并且实现 设备无关操作的绑定。 在这些注册函数里使用的第一个参数都是 struct 类型的参数。 该参数定义了设备无 关接口的操作 3 。 设备卸载时使用注销函数。

9、注销时用输入注册时得到的设备号即可。在注销时还 必须释放驱动程序使用的各种系统资源包括 DMA 、设备中断等。2.4 DMA 缓存区设计和内存管理在音频设备的驱动程序设计中, DMA 缓存区设计和内存管理部分最为复杂。 由于音频设备有很高的实时性 要求,所以合理地使用内存能加快对音频数据的处理,并减少时延。三星公司的 BDMA 控制器没有内置 DMA 存储区域,在驱动程序中必须为音频设备分配 DMA 缓存区。这 样就能通过 DMA 直接将需要回放或是录制的声音数据存放在内核的 DMA 缓存区中。为了方便各种物理设备使用 DMA 资源,在程序中使用 strcut s3c44b_DMA 数据结构管

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

11、计。常见的设计思路是使用一个缓存区, CPU 先对缓存区处理,然后 挂起,音频设备对缓存区操作,音频设备处理完后唤醒 CPU ,如此循环。需要处理大量音频数据的音频设 备驱动程序, 可以使用双缓冲。 以录音为例, 系统使用缓存 2 存放音频设备量化好的声音, CPU( 应用程序 ) 则处理缓存 1 中的声音数据;当 Codec 设备填充完缓存 2,它移向缓存 1 填充数据,而 CPU 转向处理缓 存 2 里的数据;不断交替循环,如图 3(a) 、 (b) 所示。使用这种方法处理音频数据,能够提高系统的并行能力。应用程序可以在音频工作的同时处理传输进来的 音频数据。由于实际系统被设计成支持全双工

12、的音频系统,所以必须为输入和输出同时分配内存,对应的数据结构设 计如图 4 所示。图4中音频设备缓存控制块管理音频设备的缓存区。 在控制块中输入 /输出缓存指针分别指向输入和输出缓 存结构 audio_buf ,输入输出控制块指针分别指向对应的 DMA 控制块。因为输入输出使用了不同 DMA 通道,所以音频设备缓存控制块有两个 DMA 控制块控制指针。在 audio_buf 中分别有两个 DMA 起点字 段分别指向双缓存区的起始物理地址。缓存区状态字段包含缓存区是否被映射、是否激活、是否暂停等信 息。应用程序处理缓存中数据的速度依赖于缓存的大小和数据传输速度。例如使用“8kHz/8 位/单工

13、”的采样方式录音, 音频芯片产生 64kbps 的数据流量。 如果是两个 4K 字节的缓存, 那么应用程序就只有 0.5s 处理 缓存中的数据并把它存到 Flash 芯片中 ( 或者传输到其它设备中 )。若 0.5s 内不能处理这些数据,缓存就 会溢出。若采用高品质的采样,例如使用 CD 音质的采样,那么 Codec 产生数据的速度将达 1376kbpsCPU 处理音频数据的时间就只有 23ms 。在 CPU 负载较大的情况下,将可能出现数据丢失的问题为了解决音频应用 I/O 数据量大的问题,最简单易行的方法是使用比较大的缓存区域。但实际上大 的缓存区需要更长的填充时间,在使用时会出现延时,并

14、可能占用过多 CPU 资源。为了解决延时的问题, 使用多段缓存机制。在这种机制下,将可用的缓存区分割成若干个相同大小的块。对较大的缓存区的操作 转变成对较小的缓冲区块的操作,在不增加缓存区操作时间的情况下提供较大的缓存。不同的音频应用, 精度不一样,需要的缓存大小也不一样。所以在应用程序层上,驱动程序还必须提供接口让应用程序改变 块的大小和个数。这个接口可以在 ioctl 中实现。对缓存区块的大小控制通过对 audio_buf 中的对应字段 设置实现。使用内存映射 (mmap) 技术是另一种提高系统性能的途径。 Linux 系统的内存空间分为内核空间和用户空 间,驱动程序工作在内核空间,并负责

15、在内核空间和用户空间传输数据。音频应用一般数据量比较大,而 且有较高的质量要求,在驱动程序中还可以使用内存映射进一步提高 CPU 的利用率。内存映射通过 remap_page_range 将分配给 DMA 缓存区的内核空间的内存映射到用户空间,用户不需使用 copy_to_user 和 copy_from_user 将数据在内核空间与用户空间中拷贝。图4 中缓存区状态和缓存区起点两个字段也用于内存映射服务。在实现时由于 DMA 的缓存结构复杂,需要将每个缓存块分别映射。2.5 设备无关操作 设备无关操作对应于指向的各个例程,它让用户用访问文件的方式访问设备。对设备的打开和读写是启动 程序为用户程序提供的最主要接口,分别对应于中的 open 、 read 和 write 例程。在 open 例程中需要完 成的任务主要是设备初始化,包括:通过设置 IIS 寄存器控制音频设备的初始化,并且初始化设备的工作参数( 包括速度、声道、采样宽度 ) ;为设备分配 DMA 通道;根据采

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论