Windows CE下基于TSC2101的音频系统设计
图3 Unified Audio模型的音频驱动结构
在这种模型下,音频驱动仍然是以流接口的形式实现,分别实现了WAV-close()、WAV-PowerDown()、WAV-Deinit()、 WAV-PowerUp()、WAV-Init()、WAV-Read()、WAV-IOControl()、WAV-Seek()、WAV-Open()、WAV-Write()这几个标准的流接口函数。
DMA缓存区设计与实现
由于音频设备驱动程序设计对设备的实时性要求较高,所以DMA缓存区设计以及合理地利用缓存区加快对音频数据的处理,减少延时变得十分重要。
DMA控制器是使CPU处理其他与数据总线无关的处理,而由DMA控制器负责数据传输的机制,这种机制使得CPU从繁重的数据传输中解脱出来,可以执行其他计算,从而提高了系统运行速度。PXA272的DMA控制器提供了32个DMA通道,0~31。这些通道提供了flow-through 和fly by的数据传输方式。
在本设计中,使用双缓存区DMA通道设计,如图4所示,当CPU正在处理某一个缓存区数据的同时,DMA控制器可以完成另一个缓存区数据的传输,如此交替下去,则可以提高系统的并行能力,提高音频处理的实时性。
双缓存区驱动程序设计当中,以播音为例,新的音频数据在CPU的控制下先写到缓存1中,此时DMA控制器正在处理缓存2的数据传输。当缓存2的数据全部传完之后,会产生一个DMA中断,该中断通知CPU开始往缓存2里写新的音频数据,与此同时,DMA也继续处理缓存1的数据。这样,由于CPU和DMA没有处理同一段DMA缓存区,就减少了资源访问的冲突,并且能够最大程度上保证音频数据不丢失,提高音频处理的实时性,也提高了系统的并行能力。
本设计中使用MapDMABuffers()函数实现DMA音频数据缓存区的分配,函数主要实现的功能是:分配接收和发送音频数据的DMA缓存区。
结束语
本文分析了嵌入式Windows CE操作系统基于TSC2101音频芯片的音频系统实现的基本原理及其驱动程序模型,并结合具体程序重点描述了DMA双缓存区的实现方法和原理。本设计在实际运用中能够满足音频系统的实时性要求,在实际测试中,缓存区大小设置为0x1000(Bytes),位时钟频率为 2.836MHz,DMA数据传送的数据大小分别在32B、16B、8B的情况下,播放效果均清晰无杂音,达到了预期的效果。
- 为音频设备提供高性能的低通30kHz贝塞尔滤波器 (01-02)
- Internet音频技术概述 (01-12)
- 内置微处理器的USB音频接口芯片TUSB3200 (01-12)
- 三相视频多路放大器加倍音视频源选择器的通道 (01-12)
- 设计面向高清电视的全数字音频系统(03-03)
- 如何利用MEMS麦克风改善移动设备声学性能(06-19)