关键词:
tsc2101 , wince , 设计 , 音频
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)库,该库能实现音频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的情况下,播放效果均清晰无杂音,达到了预期的效果。
区块链技术在智慧城市如何应用
俄发力无人机行业,潜心研究察打一体化属性的轻型无人机
南大光电首款国产ArF光刻胶通过认证 可用于45nm工艺光刻需求
教你自制电动小摩托
DSP与ARM存储器架构和指令集有哪些差异
Windows CE下基于TSC2101的音频系统设计
LG发布新机—X300 只是为了让大家体验安卓7?
医学摄影技术突破定位患者慢性疼痛的特定位置
小米空调性价比优势不强,难破空调市场格局
人民的名义火了!但里面手机关机了为什么还能定位呢?详细剖析sim以及手机定位的原理
非线性编辑系统的视频格式转换方法
Unix服务器与PC服务器之间的差异对比
电烙铁的种类及特点
继电器(relay)的工作原理和特性
uC/OS-II—邮箱介绍
本振泄露是什么_本振泄露的原因和影响
局域网ip地址不够用的解决办法
IBM研制最强大计算机 有望揭晓宇宙起源之谜
PCB抄板之PROTEL到ALLEGRO的转换技术2
PCI Express交换机实测系统数据传输性能