基于ARM9的音频系统设计

发布者:HeavenlyClouds最新更新时间:2011-09-24 关键字:ARM9  音频系统 手机看文章 扫描二维码
随时随地手机看文章

    1 引言

  随着 Internet技术和多媒体技术的快速发展,语音通信技术的应用越来越广泛,也越来越受到重视[1]。如今的嵌人式设备日益复杂化,功能比以前更加丰富,性能也越来越高。在多种嵌人式终端产品中,音频处理功能已成为不可缺少的重要组成部分,高质量的音效是当前发展的重要趋势。

  本文利用 ATMEL公司 的 AT91RM9200型微处理器 和 Philips公司的 UDA1341型立体声音频编解码器设计了一种嵌入式音频系统。该嵌入式音频系统硬件部分采用基于IIS总线的音频系统体系结构,其主要硬件电路后文作了详细的介绍。软件上,笔者以嵌入式Linux操作系统作为平台,重点介绍该音频系统在此平台下的驱动程序的实现。

  2 AT91RM9200处理器简介

  AT91RM9200是 ATMEL公司针对系统控制以及通信领域推出的基于ARM920T内核的新型微处理器[2],在高性能和低功耗特性方面具有极大的优势,而且具有很高的主频,最高可达到180 MHz。该处理器具有独立的16K指令和16K数据cache,全功能的MMU虚拟内存管理单元,以及内部的16KB SRAM和128KB ROM,EBI接口控制器。片上集成了丰富的外围接口,包括网络MAC、USB控制器、SDRAM 控制器、CF接口、NAND flash接口、IIC接口、JTAG调试器以及支持 256 MB的地址空间。而且处理器还提供自举模式,供用户写入引导代码,方便 Linux等操作系统的移植。

  3 UDA1341TS音频芯片及IIS总线简介

  PHILIPS公司的 UDA1341TS是一块功能强大的专用语音处理芯片[3]。该芯片集语音放大、滤波、采样、A/D和D/A转换等功能于一体,并且能进行数字语音处理。本设计使用的AT91RM9200处理器具有一个IIS音频接口,此接口采用 DMA方式传输数据。在该方式下,由DMA控制器取代CPU,获得总线控制权,从而实现内存与外设或者内存之间的不同区域之间大量数据的快速传输。用DMA接口传输数据,不仅可以降低CPU负担,还可以节省系统的软件设计时间,降低编程难度。而 UDA1341TS支持IIS总线格式,并且具有数字语音处理特性,由此决定了UDA1341TS与AT91RM9200处理器的电路连接比较简单,并且能实现语音的 A/D和 D/A等预处理,而不需要再额外增加专门的A/D和 D/A器件。

  需要说明的是,数字音频系统需要多种多样的集成电路,因此,为这些电路提供一个标准的通信协议非常重要。IIS总线是由SONY和PHILIPS公司等电子巨头共同提出的数字音频总线协议,全称是内部集成电路声音总线 (Inter IC Sound Bus),它是一种串行的数字音频总线协议,该总线专门用于音频设备之间的数据传输,为数字立体声提供一个序列连接至标准编解码器[4],目前很多音频芯片和处理器都提供了对IIS总线的支持。笔者根据IIS总线的原理,结合AT91RM9200处理器和数字音频输入/输出接口芯片 UDA1341TS的结构特点,设计的嵌入式音频系统可以运用到很多类似的音频系统中。

  4 系统硬件设计方案

  由于IIS总线只处理音频数据,而其他的信号如编码、控制等信号单独传送。为了使必需的引脚数最小并且保持连线简单,IIS总线由3条信号线组成:时分复用的数据通道线、字段选择线和时钟信号线。本系统由系统主控制器提供时钟信号,控制数字音频数据在各个IC之间的流向。此时,发送器在外部时钟信号的控制下产生数据,处于从模式。

  本设计硬件连接图比较简单,如图1所示。图中的处理器采用了AT91RM9200处理器,其内置IIS音频总线,内置的IIS接口能读取IIS总线上的数据,并由UDA1341TS芯片外扩,通过总线和系统连接,需要处理器提供系统时钟和3根控制线。

 


  图1 硬件设计简图

  AT91RM9200的IIS控制器由5个引脚与外部的音频编解码器相连。这些引脚分别是:系统时钟;位速率时钟(可使用内部或外部时钟源);字段选择;串行声音输入;串行声音输出。本设计中,UDA1341TS使用的是L3接口 ,该接口用来控制音频信号的音量大小以及低音等。L3接口有3个信号:L3MODE,L3CLK,L3DATA,将字节写入 L3总线寄存器。IIS总线控制器通过软件控制AT91RM9200的通用I/O引脚(笔者选用的是PA0、PA1、PA2三个通用I/O口)来支持L3接口。下图是本嵌入式音频系统的硬件电路连接图,见图2。

 


  图2 硬件电路的连接

  各个引脚的连接说明如下:

  SYSCLK:IIS总线的基本时钟源,AT91RM9200处理器的TCLK3引脚与UDA1341TS芯片的系统时钟相连接。由于UDA1341TS芯片仅支持从模式 ,因此在所有的应用中系统设备必须提供系统时钟。系统时钟频率是可编程的,其分频率可以是 256、384或512倍的采样频率。系统时钟必须在频率上与数字接口信号一致。在设计中笔者用的是256fs的时钟。

  WS:字段选择引脚,用于指出现行串行数据采样值为左声道还是右声道数据,AT91RM9200处理器的TK0引脚与WS相连接。

  BCK:向UDA1341TS提供用作采样逻辑的串行声音位速率时钟,AT91RM9200处理器的TD0引脚与 UDA1341TS芯片的BCK引脚相连接。

  DATAI, DATAO:用于从UDA1341TS接收、发送串行声音数据,AT91RM9200处理器的RD0,RK0引脚分别对应UDA1341TS的音频输入、输出引脚。

  L3M0DE,L3CLOCK,L3DATA:UDA1341TS的L3接口引脚,分别与AT91RM9200的3个通用数据输出引脚PA0、PA1、PA2连接。

  5 系统软件设计方案

  嵌入式 Linux是一种完全开放且免费的操作系统,其支持多种硬件体系结构,运行稳定 ,拥有完善的开发工具,为开发人员提供了优良的开发环境[5]。在嵌入式 Linux系统中,设备驱动程序提供了应用程序和实际设备之间的一个软件层(接口),为应用程序屏蔽了硬件细节。本设计中,音频设备驱动程序主要通过对硬件的控制实现音频流的传输,同时向上层提供标准的音频接口。整个音频驱动程序包括设备初始化、打开设备、数字音频处理(DSP)驱动、混频器(MIXER)驱动和释放设备等部分。本文由于篇幅的限制,仅介绍设备初始化及打开设备的实现。

  设备初始化是整个音频驱动程序的开始部分,主要完成对UDA1341TS音量、采样频率、L3接口等的初始化,并且注册设备。通过函数audio_init(void)完成以下具体功能: AT91RM9200控制端口(PA0、PA1、PA2)的初始化;为UDA1341TS分配 DMA通道;初始化UDA1341TS芯片;注册音频audio设备和混频器设备。

  以下给出的是该函数总体框架:

  audio_init(void)

  {

  Set_gpio_ctrl(GPIO_L3CLOCK); /*CPU控制端口的初始化 */

  … … /*“……”表示省略部分代码,以下同 */

  Input_stream.dma_ch=DMA_CH1; /*输入 DMA通道的选择 */

  Output_stream.dma_ch=DMA_CH2; /*输出DMA通道的选择 */

  Local_irq_restore(flags);

  Init_UDA1341(); /*初始化 UDA1341*/

  … …

  /*下面两个函数用来注册音频 audio设备和混频器设备 */

  Audio_dev_dsp=register_sound_dsp (&at91rm9200_audio_fops,-1);

  Audio_dev_mixer=register_ound_mixer (&at91rm9200_mixer_fops,-1);

  }

  打开设备由函数open()来实现,该函数可以完成以下功能:配置IIS总线接口;设置UDA1341TS声道及采样频率等参数;计算缓冲区大小;为UDA1341TS分配DMA缓冲区。

  该音频模块经过正确的配置可以实现录音、放音及循环放音等功能。本文给出初始化IIS接口、测试IIS接口以及运用IIS接口来播放一段音乐的程序设计基本流程,流程图如图3所示。录音和循环播放功能的设计流程与放音类似,这里不再赘述。

 


  图3 IIS接口功能测试软件设计流程图

  6 结论

  本文介绍了一种基于IIS总线的嵌入式音频系统,该系统简洁实用,可以实现音频的采集和播放,文章具体讲述了基于ATMEL公司AT91RM9200型微处理器与音频编解码芯片UDA1341TS的硬件连接及嵌入式 Linux下音频驱动的实现。当然,这只是本系统的主要组成部分,至于其他相关组成部分如FLASH和SDRAM等,笔者在实际设计中已经完成,由于篇幅关系,文中没有详细介绍。该系统已经在AT91RM9200的开发平台上得到了实现,可以顺利进行音频的采集和播放,并取得了良好的效果。另外,当今实时视频处理和传输技术发展迅速,应用也日益广泛,如视频会议、VOIP电话等等,本设计适当加以扩展,特别是与视频模块结合,即可应用于更多相关的复杂系统中。

关键字:ARM9  音频系统 引用地址:基于ARM9的音频系统设计

上一篇:基于AMR磁阻传感器和加速度传感器的电子罗盘
下一篇:基于IPv6和ARM9的地震烈度计开发

推荐阅读最新更新时间:2024-03-16 12:42

s3c2440 ARM9 裸机驱动第一篇-GPIO驱动(C)
此文为对于LED驱动的补充: 废话不说,先上代码。 start.s .text .global _start _start: ldr r0 ,= 0x53000000 @WATCHDOG ADD mov r1 ,#0x0 str r1 , @r1 的数据写入r0 关看门狗 ldr sp ,=1024*4 @设置栈 bl main @跳转到main执行 halt: b halt led.c #define GPFCON (*(volatile unsigned long *)0x56000050) #define
[单片机]
基于ARM9的液晶驱动终端设计
1 引言 液晶驱动终端是将液晶控制器、微控制器等集成在一起.并将液晶控制与图形界面显示等功能通过软件封装在一起.为用户开放操作接口、屏蔽液晶显示器的控制细节,使用户通过熟悉的接口(如RS232接口)发送预定义命令即可控制液晶显示,进行图形界面开发工作。 目前.已有的液晶驱动终端主要采用微控制器与前、后台软件结合的方法进行设计,该类终端只能够显示字模方式的图片.该种类型的终端显示数据存放在自带的NANDFlash中,在人机界面设计过程中对NAND Flash中的数据管理是以扇区为基本操作单元,图片下载需要专用的软件工具完成,增加了界面设计的逻辑复杂性与操作性。这里采用ARM9微控制器与 Linux操作系统结合的方法,设计出一种新型
[单片机]
基于<font color='red'>ARM9</font>的液晶驱动终端设计
ARM9中计算MPLL的方法:
测试程序400M的算法: i = 2 ; //don't use 100M! switch ( i ) { case 0: //200 key = 12; mpll_val = (92 12)|(4 4)|(1); break; case 1: //300 key = 13; mpll_val = (67 12)|(1 4)|(1); break; case 2: //400 key = 14; mpll_val = (92 12)|(1 4)|(1); break; case 3: //440!!! key = 14; mpll_val = (102 12)|(1 4)|(1); bre
[单片机]
关于嵌入式教学中选用系统的感受
嵌入式技术是当今最流行的一门新技术,它有广阔的发展空间。目前国内很多高校都在开展和计划开展嵌入式课程,很多老师在前期接触嵌入式技术时,对于在嵌入式教学中采用什么样的微处理器和嵌入式操作系统还存在很多疑惑。博创拥有国内最广泛的嵌入式教学实验系统用户。但是从这两年多来的高校用户反馈信息,特别是我们的专家给清华软件学院和北航软件学院开课的经验上看,高校任课老师都感觉ARM7和UCOS操作系统更适合教学使用。下面是给清华和北航软件学院开设嵌入式课程的魏洪兴博士对嵌入式教学中选用设备的一些感受,希望能对您有所借鉴。 一.ARM7 ARM9 UP-NETARM3000和UP-NETARM300采用基于ARM7TDMI核的三星S3C44B0
[单片机]
ARM9(S3C2440)的LCD显示——理论知识
今天和大家一起讨论一下S3C2440的LCD显示的问题,希望大家能够多多指教,我说的不对的地方希望大家及时帮我改正,以使我可以增长知识,才能不至于给别人的学习带来不便,呵呵 下面先看一下我从别人那转过来的一篇文章,我觉得很有用,看完之后我再说一下自己对这一块的了解,也可以先看看我的理解(下面红字标出)再看开始的这篇文章,因为我说的更通俗,O( _ )O哈哈~。 1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多
[单片机]
<font color='red'>ARM9</font>(S3C2440)的LCD显示——理论知识
自制廉价的Arm9 开发平台
摘要:基于Arm9内核的单片机,由于其低廉的价格与优越的性能,已经被广泛的应用于各种消费类电子产品中。掌握Arm9单片机的开发技能已经成为嵌入式系统开发者的迫切要求。但由于市面上的Arm9开发板价格不菲,使不少想学习Arm9开发技术的朋友望而却步,其中有一大部分是各大高校的学生。本文阐述了改造ipTIME的IP0422路由器,使其成为VxWorks和Linux的Arm9开发平台的过程。整个过程简单易行,同时花费在150元以内,是嵌入式系统开发爱好者不错的选择。 1 改造系统的选取 要动手改造Arm9开发系统,首先要选取一款进行改造的产品。现在基于Arm9内核的单片机被广泛的应用于家用路由器和手机当中,因而这两类产品可以作为我
[单片机]
自制廉价的<font color='red'>Arm9</font> 开发平台
基于ARM9的仿人机器人分布式控制系统
1  引言     仿人型机器人具有类似于人类基本外貌特征和步行运动功能,还具有视觉、听觉等功能,它可以实现类似人类的行走,灵巧轻便,对行走环境有良好的适应性,既能在平地上行走,又能在非结构的复杂地面上行走,如上下台阶,跨越、绕过障碍物等。另外,仿人型机器人是集材料、机械、电子、能源驱动、计算机感知、传感、控制、虚拟现实与人工智能等多门学科于一体的综合性平台,它的研究能够带动诸多相关学科和技术的交叉发展与进步,并为相关学科的研究提供一个平台。因而,近年来,仿人型机器人的研发受到国内外学者的广泛关注。小型机器人是近年发展起来的仿人机器人的一种,主要的研究集中在日本。小型仿人机器人,结构轻巧,集成度高,运动灵活;未来可在工业、民用
[嵌入式]
基于IPv6和ARM9的地震烈度计开发
以低功耗微型电容式三轴向加速度传感器作为传感部件,采用基于ARM9的嵌入式系统并定制Linux作为总控系统,选择符合802.11b标准的无线通讯技术作为仪器的网络接入方式,研制完成基于无线IPv6的SI一2型地震烈度计,实现了地震烈度的网络化、数字化观测,解决了我国缺乏直接测定地震烈度仪器的问题。   引 言   当前国内外已建设的城市地震灾害速报系统一般以地震烈度计观测系统为主体。日本东京煤气公司在1994年就完成了由331台谱烈度计、20台液化传感器和5台强震仪构成的地震监测与震害快速评估系统(SIGNAL)。阪神地震取得显著的减灾效益后,东京煤气公司于1997年~2007年的十年间布设了3 800个新型地震谱烈度计。
[单片机]
基于IPv6和<font color='red'>ARM9</font>的地震烈度计开发
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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