ARM Cortex-A8/A9开发板 | ARM11开发板ARM11开发套件 | ARM9开发板ARM9开发套件 | 飞思卡尔I.MX28I.MX6开发板 |
tiny210/mini210开发板 | mini6410开发板/套餐 | Tiny6410开发板无线套件 | mini2440开发板/套餐 | micro2440开发板带核心板 | 友善开发板配件 模块 | QQ2440 V3 SBC-2410X |
FL2440 OK2440-IV V4 | OK2440-III OK2440V3 | TE2440-II TE2440V2 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | 开发板配件 模块和其他 |
Xilinx开发板/fpga开发套件 | altera开发板/fpga开发套件 | 基于FMC FPGA/DSP子卡 |
BeagleBoard原厂开发板 | PandaBoard原厂开发板 |
TI DM3730 DevKit8500D | TI系列 omap3530开发板 | ATMEL系列 开发板 | Samsung系列 开发板 | 开发板配件-仿真器 模块 | NXP LPC3250 mini3250 |
Tiny210 三星S5PV210 | Mini210/Mini210s开发板 | Tiny4412开发板Cortex-A9 | Tiny6410开发板 ARM11 | mini2440开发板 ARM9 | micro2440开发板 ARM9 | mini6410开发板 ARM11 | 友善ARM开发板配件 模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
FL2440 OK2440-IV V4 | OK6410 S3C6410 ARM11 | FL6410/OK6410B ARM11 | OK210/-A Cortex-A8 | TE2440-II TE2440V2 | TE6410 S3C6410 ARM11 | TE-9263 AT91SAM9263 | ARM开发板配件 模块等 |
Real6410开发板/套餐 | Real210开发板/Real2410 | WIFI GPS GPRS模块摄像头 |
Xilinx开发板/开发套件KIT | Altera开发板/开发套件KIT | 配套模块 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | 最小系统模块类(初学者勿选) | 开发工具 仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
DM3730/AM3715/AM3359 | OMAP3530AM1808AM3517 | 飞思卡尔Cortex-A9开发板 | ATMEL系列ARM开发板 | NXP LPC3250 LPC1788 | Samsung系列ARM开发板 | STM32系列F207/F407 | ARM开发板配件-仿真器 模块 |
Realv210 S5PV210开发板 | Real6410开发板 ARM11 | WIFI GPS GPRS模块摄像头 |
NXP LPC开发板 ARM7 | Cortex-M3 STM32开发板 | ARM小系统模块(初学勿选) | 开发工具 ARM仿真器 调试器 | TFT液晶屏LCD 液晶模块 |
keil ARM仿真器/开发工具 | STM32开发板 Cortex-M3 | NXP LPC开发板Cortex-M3 | ATMEL系列 ARM开发板 | Luminary EKK8962开发板 | Freescale i.MX31开发板 | 三星s3c2440 s3c6410开发板 |
Exynos4412开发板A9四核 | UT-S5PV210 S5PC100 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 |
Xilinx开发板 FPGA开发套件 | altera开发板 FPGA开发套件 | FMC模块 配件 下载线 |
DM642开发板/DM642实验箱 | DM6446开发板/DSP实验箱 | DSP仿真器 液晶屏 摄像头等 |
s3c2410 ARM9 FS2410 | s3c2440开发板 ARM9 | s3c44B0开发板 ARM7 | s3c6410 2450 2443/13 | PXA270 PXA320 PXA255 | Atmel 9200 9261 9G20 | Philips NXP开发板YL-LPC | FS-EP9315开发板ARM9 | LCD液晶屏TFT真彩/触摸屏 | ARM仿真器/仿真调试工具 | ARM开发板配套ARM核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯开发板UP-DRAGON-I | 物联网教学科研设备 | EDA/FPGA/SOPC教学科研 |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | YC-ePC-A系列人机界面 | Mars-EDA套件CPLD FPGA | 触摸屏LCD 摄像头 WI-FI模块 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器/仿真系统 | DSP开发板/DSP试验箱 | DaVinci系列多媒体平台 | Xilinx FPGA大学计划产品 | SEED教学实验系统 | FPGA/DSP FPGA开发板 | TI原厂开发板套件/CCS软件 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
广嵌实验室项目产品 | GEC2440/GEC6410开发板 |
泰克Tektronix示波器 | 普源RIGOL示波器 | USB虚拟示波器 |
UT-S5PC100 UT-S5PV210 | UT-S3C6410开发板 ARM11 | idea 6410开发板 ARM11 | UT-S3C2450开发板 ARM9 | UT-S3C2416开发板 ARM9 | UT-S3C6410核心板 工控 | 开发板模块wifi gps等 |
EMA OMAP3530开发板 | EMA OMAP 3530核心板 |
三星s3c2410 s3c44B0 | 三星s3c6410 s3c2443 | Intel PXA270 PXA320 | UP-CUP OMAP5910平台 | FPGA Xilinx Altera平台 | 配件-仿真器 模块 液晶屏LCD | 龙芯系列 UP-DRAGON-I |
utu2440-F-V4.5 含核心板 | utu2440-S-V4.1 单板结构 | YC2440-F-V5.1开发板 豪华型 | 触摸屏LCD 摄像头 WI-FI模块 | Mars-EDA套件CPLD FPGA | ePC系列工控一体机ARM9 A8 |
ARM开发板/开发平台 | FPGA开发板/开发平台 | 编程器/烧写器下载器烧录 | ZLG 仿真器ARM FPGA DSP | ZLG周立功逻辑分析仪 |
DSP初学者开发套件(DSK) | DSP仿真器 | DSP开发板 | DSP实验箱 | Xilinx FPGA大学计划产品 |
ARM开发板 | XSCALE开发板 | ARM仿真器 | SOPC开发板 | DSP开发板 | 达芬奇系列DSP开发平台 | DSP仿真器 | DSP实验箱 | DSP专业研究平台 | ARM实验箱系列 |
ARM开发板S3C6410等 | Cortex-A8/ARM11仿真器 | ADSP Blackfin开发板 | FPGA Spartan-3E开发板 |
GEC2410开发套件ARM9 | GEC2440开发套件ARM9 |
泰克 示波器 |
Windows CE是一个开放的、可裁剪的、32位的实时嵌入式操作系统。它具有可靠性好、实时性高、内核体积小的特点,所以被广泛用于各种嵌入式智能设备的开发,其应用涉及工业控制、信息家电、移动通信、汽车电子、个人电子消费品等各个领域,是当今应用最多、增长最快的嵌入式操作系统。而在这些嵌入式应用中,音频模块成为了大多数产品不可或缺的一部份。本文针对Windows CE操作系统,构造了基于Intel Xscale PXA272和TSC2101音频芯片的音频系统,并简要介绍了其实现方法。
音频系统的硬件实现
本设计中的音频驱动采用Unified Audio模型实现,基于Intel Xscale PXA272处理器和TI 的TSC2101音频芯片,使用了基于I2S(Inter-IC Sound)总线的音频系统体系结构,系统原理图如图1所示。Intel Xscale PXA272芯片集成了I2S控制器,通过I2S总线处理音频数据。其他信号(如控制信号)则需要单独传输,在本设计中将Xscale PXA272芯片的SSP串口配置为SPI串口以实现控制信号的传输。
图1 系统原理图
I2S是菲利浦公司提出的串行数字音频总线协议。PXA272的I2S控制器控制了I2S链接,I2S控制器由数据缓冲、状态和控制寄存器、计数器组成。它们将系统内存和外设的音频解码芯片(TSC2101)连接,产生同步音频。播放音频文件时,I2S控制器通过I2SLINK连接将系统内存中数字化的声音样本发送到外设的TSC2101音频解码芯片中,然后由TSC2101芯片的数模转换器将数字音频信号转换成模拟信号。
对于录音来说,I2S控制器从外部的TSC2101音频芯片接收到数字信号,然后将它们存储到系统内存中。I2S提供了普通I2S和MSB-justified-I2S格式。通过5根引脚连接TSC2101芯片和PXA272的I2S控制器,形成音频数据传输的通道。I2S控制器必需的信号主要有:一个码率时钟,可以引用外部或者内部时钟源;一个控制信号提供“左/右”声道控制信息;两个串行音频引脚,一个输出一个输入;码率时钟,I2S控制器会将可选的系统时钟信号也发送到外部解码器中。
I2S控制器通过DMA方式来访问。DMA方式下,DMA控制器只能通过串行音频数据寄存器(SADR)访问FIFO。DMA控制器通常以8、16或32字节大小的块存取FIFO队列数据的。
本设计中采用的音频芯片TSC2101集成了立体声音频解码、触摸屏控制芯片,立体声DAC能以高达48Kb/s的采样率播放音频文件,专供PDA、PMP、智能手机和MP3播放机使用。TSC2101 将扬声器放大器、耳机放大器和四线触摸屏控制器与音频编解码器集成再一起,带有一个立体声头戴送受话器接口、一个手机送受话器接口、一个单声道8Ω扬声器放大器以及一个32Ω受话器驱动器,并集成有一个电池监控器和一个片上温度传感器。
TSC2101芯片的电路设计如图2所示。
图2 TSC2101芯片电路设计
本设计为TSC2101在智能手机中的运用,CP-IN为通信模块的语音输入,CP-OUT则为音频系统到通信模块的输出,在实际的应用中MIC1可以通过TSC2101的内部PGA(可编程增益放大)、AGC(自动增益控制)电路连接到CP-OUT,实现智能手机的话筒功能;同时,MIC1输入还可以通过内部的ADC将语音数据采样后经I2S总线传输到处理器存储空间实现录音功能。当然,在智能手机通话的同时,还可以实现通话录音功能。电路图中的38~41引脚为SPI接口,42~46引脚为I2S控制引脚,引脚9~12为触摸屏输入,引脚27和28为音频输出可以连接耳机,引脚26连接手机听筒,引脚33、35连接外置扬声器。
采用Unified Audio模型实现音频驱动
音频驱动的实现方式包括MDD-PDD分层模式和不分层的Unified Audio模型。MDD-PDD作为直接实现流接口的一种方法,使用微软提供的模型设备驱动程序(MDD)库——Wavemdd.dll。这个库根据音频设备驱动程序服务供应者接口(DDSI)函数来实现流接口函数,如果使用了Wavemdd.dll就必须生成一个匹配的平台依赖驱动程序(PDD)库,该库能实现音频DDSI函数,这个PDD库通常叫做Wavepdd.lib。然后把两个库连接起来形成Wavedev.dll。
作为音频驱动的另外一种方法,就是采用Unified Audio模型,即不分层的音频驱动模型,这种模型的音频驱动支持标准的波形驱动接口。在本设计中就是使用的这种方式来实现音频驱动(Platform Builder的驱动目录下包括有基于这种模型驱动的实例代码)。在分层的音频驱动中,驱动程序由MDD和PDD组成,MDD层执行与硬件平台无关的功能,PDD层则是直接与硬件平台相关的操作,而在Unified Audio模型中,MDD和PDD的分层是不必要的,图3是Unified Audio模型的音频驱动结构。
图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的情况下,播放效果均清晰无杂音,达到了预期的效果。
博航网 www.broadon.net 版权所有
京ICP备10051899号-2 京公网安备110108006479号