Windows CE下基于TSC2101的音频系统设计

发布者:breakthrough2最新更新时间:2009-01-19 来源: 今日电子关键字:TSC2101  WindowsCE  音频系统  DMA 手机看文章 扫描二维码
随时随地手机看文章

      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的情况下,播放效果均清晰无杂音,达到了预期的效果。

关键字:TSC2101  WindowsCE  音频系统  DMA 引用地址:Windows CE下基于TSC2101的音频系统设计

上一篇:嵌入式Linux系统中的GUI系统的研究与移植
下一篇:嵌入式操作系统自更新机制的设计与应用

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

stm32串口dma发送/接收程序
  串口可以配置成用DMA的方式接收数据,不过DMA需要定长才能产生接收中断,如何接收可变长度的数据呢?   方法有以下3种:   1.将RX脚与一路时钟外部引脚相连,当串口一帧发完,即可利用此定时器产生超时中断。这个实时性较高,可以做到1个字节实时监测。   2.不改变硬件,开启一个定时器监控DMA接收,如果超时则产生中断。这个实时性不高,因为超时时间必须要大于需要接收帧的时间,精度不好控制。   3.STM32单片机有的串口可以监测总线是否处于空闲,如果空闲则产生中断。可以用它来监测DMA接收是否完毕。这种方式实时性很高。   串口DMA发送:   发送数据的流程:   前台程序中有数据要发送,则需要做如下几件事   1.
[单片机]
stm32串口<font color='red'>dma</font>发送/接收程序
ADSP-21535 Blackfin的Mem DMA高速通信
摘要:针对ADSP-21535 Blackfin 的Mem DMA 高速通信中的关键技术进行了讨论,分析了系统的内存管理,对DMA的相关寄存器的配置进行了详细讲解,并给出了具体实例。对多种内存之间的DMA列出了实际的指标评测,为该系列DSP工程应用的高速通信设计提供了重要参考。 关键词: ADSP-21535, Blackfin Mem DMA ADSP-21535 Blackfin 是美国AD公司和Intel 公司于2001年底联合推出的一款定点DSP, RISC指令结构,运作高效,具有十分优异的性能。该DSP具有300MHz的主频,2个40bit的MAC(乘加器)和2个32bit的ALU(算术逻辑单元),4个8bit的视频
[应用]
STM32F407的ADC之DMA多通道
这张主要是增加了一路PA2,也可以根据实际增加自己想要的路数。 与上面主要的区别: 1、设置PA2为模拟输入 2、修改通道数ADC_InitStructure.ADC_NbrOfConversion = 2;/*2通道 1*/ 3、增加ADC_RegularChannelConfig(ADC1,ADC_Channel_3,2,ADC_SampleTime_480Cycles);/*设置规则通道3 二个序列 采样时间 * DMA_InitStructure.DMA_BufferSize = 2;/*数据传输的数量为1*/ DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
[单片机]
正点原子STM32笔记——DMA原理
一、DMA简介 ①DMA 全称Direct Memory Access,即直接存储器访问。 正常情况下(没用DMA),将数据从一个空间复制到另一个空间,需要将数据从一个空间读入CPU,然后写到另一个空间里。 ②DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。这样就大大减轻了CPU的负担。 ③DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。 STM32最多有2个DMA控制器(DMA2仅存在大容量产品中),DMA1有7个通道。
[单片机]
正点原子STM32笔记——<font color='red'>DMA</font>原理
基于Windows CE的7×3手机键盘驱动实现
1. 前言 矩阵键盘是嵌入式设备中常用的输入设备。它具有坚固耐用、响应速度快、小巧方便、原理简单、价格便宜、易于交流等诸多优点。利用矩阵键盘,用户只要用手指按下键盘上的数字或符号键就能实现对嵌入式设备进行相应的操作,从而使人机交互更为直接,是极方便的交互设备。矩阵键盘的应用范围非常广泛,特别是在手机、PDA等手持产品的运用更为广泛。本文讨论了矩阵键盘的实现原理和Windows CE操作系统的矩阵键盘驱动程序模型,并详细阐述和分析了嵌入式系统中矩阵键盘驱动程序的设计和实现方法,对开发手机键盘具有重要的参考价值。 2. 矩阵键盘原理 矩阵键盘作为输入设备以默认每秒2次的频率扫描键盘,当有按键被按下时,通过扫描键盘并生成
[嵌入式]
基于ARM处理器的HDLC通信的DMA实现
目前在嵌入式产品开发设计中,通常是在OS(Operating System)厂商提供的BSP基础上进行开发工作;对于底层硬件的操作,程序设计人员很少关注或只是少量的修改。实际上很多产品,我们完全可以抛开操作系统的模式,避免不必要的系统开销,而对底层的硬件直接进行处理。这样,可以节省资源提高利用率。当然,这样也会人为地增加系统开发设计的难度。但是从长远的角度看,进行这样的设计思考还是非常必要的。现在一些产品的设计开发中,所缺少的实际上就是深入了解底层操作,这样往往使我们丢失了创新的机会。 本文主要分析如何在硬件基础上直接进行程序设计,介绍如何在底层进行HDLC通信控制操作,以及如何处理数据结构等方面的问题。对于进行驱动程序
[单片机]
基于ARM处理器的HDLC通信的<font color='red'>DMA</font>实现
滤波多音频系统中图像的有效传输方法
摘要:提出了一种基于滤波多音频(FMT)调制技术的自适应图像传输方法。通过将自适应子载波分配与图像分割技术相结合,实现在频率选择性慢衰落信道中高质量的图像传输。仿真结果与理论分析证明该方法相对于传统图像传输在接收图像峰值信号噪比(PSNR)及接收端均衡复杂度方面的优势。 关键词:图像传输 滤波多音频(FMT) 峰值信噪比(PSNR) 未来的无线通信系统需要宽带、高速的系统性能来满足如数据、声音、图像及实时视频之类的高质量多媒体传输业务,高速宽带的通信方式已成为通信发展的必然趋势。多载波调制MCM(Multicarrier Modulation)作为一种新型高速的传输技术被人们广泛地应用于现代无线通信系统中。 MCU技术相对
[网络通信]
STM32F0xx_DMA收发USART数据配置详细过程
前言 关于DMA(Direct Memory Access)的功能,前面关注我微信的人应该知道,其实我已经在F1芯片上简单讲了一下。有网友要求在F0讲解一下使用DMA收发串口数据。今天就应网友要求总结一下在F0芯片上,使用DMA方式传输(收发)USART数据的功能。 在多种芯片上(F0、F1、F2、F3、F4)了解过DMA模块功能的朋友可能会发现一个特点,就是DMA的功能有很多相似的地方,甚至是一样。其实,每一个模块在不同系列芯片(甚至不同厂商)基本上是大同小异,这就是所谓的触类旁通。对于软件开发也是一样的,当你学会某一项语言的开发,接触其他语言的开发就很容易了。这里我想说,其实我对ST大部分芯片(全系列芯片STM8、STM32)
[单片机]
STM32F0xx_<font color='red'>DMA</font>收发USART数据配置详细过程
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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