1、 学号 成绩 嵌入式应用系统设计课程论文 题目 基于 ARM 的 音频接口 设计 作 者 HZW 班 级 电信 1BF 院 别 信息与通信工程 专 业 电子信息工程 完成时间 2011年 12 月 15日 目 录 1.概述 1.1 嵌入式系统的技术背景 .1 1.2 潜入式系统的应用 .1 2.系统的硬件设计 2.1 系统设计方案 .2 2.2S3C2410 的 IIS模块 .3 2.3 音频芯片 UD1314.5 3.系统的软件设计 3.1 软件的整体设计 .6 3.2WAV 文件格式 .10 3.3 初始化 UDA1314 模块 .12 3.4 录音模块 .15 3.5 放音模块 .171
2、 概述 1.1 嵌入式系统的技术背景 嵌入式系统即指以应用为核心、以计算机技术为基础、软硬件可裁减 , 适应应用系统对功能、可靠性、成本、体积和功耗严格要求的专用计算机系统。目前嵌入式系统己经广泛应用于工业控制、 Internet网络、移动通讯设备、成像和安全产品等各种领域。 ARM 微处理器在各方面的优异表现使得自己己成为微处理器的主流芯片。 ARM920T是目前使用最广泛的位嵌入式川处理器 , 属于低端处理器核。 1.2 系统的 应用 1 信息家电:这将称为嵌入式系统最大的应用领域,冰箱、空调等的网络化、智能化将引领人们的生活步入一个崭新的空间。即使你不在家里,也可以通过电话线、网络进行远
3、程控制。在这些设备中,嵌入式系统将大有用武之地。 2 交通管理:在车辆导航、流量控制、信息监测与汽车服务方面,嵌入式系统技术已经获得了广泛的应用,内嵌 GPS 模块, GSM 模块的移动定位终端已经在各种运输行业获得了成功的使用。目前 GPS 设备已经从尖端产品进入了普通百姓的家庭,只需要几千元,就可以随时随地找到你的位置。 3 工业控制:基于嵌入式芯片的工业自动化设备将获得长足的发展,目前已经有大量的 8、 16、 32 位嵌入式微控制器在应用中,网络化是提高生产效率和产品质量、减少人力资源主要途径,如工业过程控制、数字机床、电力系统、电网安全、电网设备监测、石油化工系统。就传统的工业控制产
4、品而言,低端型采用的往往是 8位单片机。但是随着技术的发展, 32 位、 64 位的处理器 逐渐成为工业控制设备的核心,在未来几年内必将获得长足的发展。 4 家庭智能管理系统:水、电、煤气表的远程自动抄表,安全防火、防盗系统,其中嵌有的专用控制芯片将代替传统的人工检查,并实现更高,更准确和更安全的性能。目前在服务领域,如远程点菜器等已经体现了嵌入式系统的优势。 5 POS 网络及电子商务:公共交通无接触智能卡 (Contactless Smartcard, CSC)发行系统,公共电话卡发行系统,自动售货机,各种智能 ATM 终端将全面走入人们的生活,到时手持一卡就可以行遍天下。 6 环境工程与
5、自然:水文 资料实时监测,防洪体系及水土质量监测、堤坝安全,地震监测网,实时气象信息网,水源和空气污染监测。在很多环境恶劣,地况复杂的地区,嵌入式系统将实现无人监测。 7 机器人:嵌入式芯片的发展将使机器人在微型化,高智能方面优势更加明显,同时会大幅度降低机器人的价格,使其在工业领域和服务领域获得更广泛的应用。 这些应用中,可以着重于在控制方面的应用。就远程家电控制而言,除了开发出支持TCP/IP 的嵌入式系统之外,家电产品控制协议也需要制订和统一,这需要家电生产厂家来做。同样的道理,所有基于网络的远程控制器件都需 要与嵌入式系统之间实现接口,然后再由嵌入式系统来控制并通过网络实现控制。所以,
6、开发和探讨嵌入式系统有着十分重要的意义。 2 系统的硬件设计 2.1 系统设计方案 由于 IIS总线只处理音频数据,而其他的信号如编码、控制等信号单独传送。为了使必需的引脚数最小并且保持连线简单, IIS 总线由 3条信号线组成:时分复用的数据通道线、字段选择线和时钟信号线。本系统由系统主控制器提供时钟信号,控制数字音频数据在各个 IC 之间的流向。此时,发送器在外部时钟信号的控制下产生数据,处于从模式。 本设计硬件连接图比较简单,如图 1所示。图中的处理器采用了 AT91RM9200处理器,其内置 IIS 音频总线,内置的 IIS 接口能读取 IIS 总线上的数据,并由UDA1341TS 芯
7、片外扩,通过总线和系统连接,需要处理器提供系统时钟和 3 根控制线。 图 1 硬件设计简图 AT91RM9200的 IIS控制器由 5个引脚与外部的音频编解码器相连。这些引脚分别是:系统时钟 ;位速率时钟 (可使用内部或外部时钟源 );字段选择 ;串行声音输入 ;串行声音输出。本设计中, UDA1341TS 使用的是 L3 接口 ,该接口用来控制音频信号的音量大小以及低 音等。 L3 接口有 3 个信号: L3MODE, L3CLK, L3DATA,将字节写入 L3总线寄存器。 IIS总线控制器通过软件控制 AT91RM9200的通用 I/O引脚 (笔者选用的是 PA0、 PA1、 PA2三个
8、通用 I/O口 )来支持 L3接口。下图是本嵌入式音频系统的硬件电路连接图,见图 2。 图 2.硬件电路连接图 扬声器 麦克风 语音处理芯片 UDA1341TS 微处理器 AT91RM9200 TCLK3 TD0 TK0 RD0 PA0 PA1 PA2 SYSCLK BINL2 BCK VINR2 WS DATAO VOUTR DATAI VOUTL L3MODE L3CLOCK L3DATA 音频输入 音频输出 2.2 S3C2410 的 IIS 模块 S3C2410 的 IIS 总线简介 IIS 总线是近年出现的一种面向多媒体计算机的音频总线,该总线专责于音频设备之间的数据传输,为数字 立
9、体声提供一个序列连接至标准编码解码器。 S3C2410 的IIS 总线接口可以用实现对外部 8/16 位立体声音频数字信号编码解码电路的接口功能。它支持 IIS 总线数据格式和 MSB-justified 数据格式。 IIS 总线接口为 FIFO 操作提供 DMA 传输模式,代替中断模式,它可以同时传送或接收数据。 IIS 模块特性: 兼容 IIS, MSB-justified 格式数据 每通道 8/16 位数据 每通道 16, 32, 48fs(采样频率)串行时钟 可编程的分频器提供给主设备时钟和编解码 时钟 供给发送和接收用的 32字节( 2X16)的 FIFO 正常( Normal)传输
10、模式和 DMA 传输模式 下面为 IIS 模块框图: 传输模式 传输模式分为正常( Normal)传输模式和 DMA 传输模式 1).正常模式 IIS 控制寄存器中有一个 FIFO 准备好标志位( ready flag bits)用于 FIFO 发送和接收。当 FIFO 准备好发送数据,如果发送 FIFO 中不为空, FIFO 准备好标志将被设置为 1。如果发送 FIFO 为空, FIFO 准备好标志被置 0,当接收 FIFO 满,接收 FIFO准备好标志被设 置为 0,这些标志可以决定 CPU 读写 FIFO 的时间。串行数据就通过这种方式被发送或接收的。 2).DMA 传说模式 在这个模式
11、中, IIS 的发送和接收 FIFO 操作都由 DMA 控制器完成,在发送和接收模式中有 FIFO 准备好标志来自动产生 DMA 服务请求。 音频串行接口格式 1).IIS 总线格式 IIS 总线具有 4根信号线,包括串行数据输入( IISDI),串行数据输出( IISDO),左 /右声道选择( IISLRCK)和串行数据时钟( IISCLK);产生 IISLRCK 和 IISCLK 的是主设备。 串行数据总是以偶数个数据 (为奇数时填充)且高位在先( MSB)发送。高位在先是因为发送器和接收器可能具有不同的字长,发送器没有必要了解接收器能够处理多少为数据,接收器也不需了解多少位的数据正在被发
12、送。 被发送器发出的串行数据可以依据始终信号的下降沿或者上升沿来同步。但是,串行数据必须在上升沿处锁入接收器。左右声道选择线决定被传输的通道。 IISLRCK可以在下降沿或者上升沿处改变。它不要求是均匀的。在从设备端,这个信号在上升沿处被锁定。 IISLRCK 信号线改变到 MSB 发送之间有一个时钟周期的时间。 2).Msb-Justified 格式 MSB-Justified 格式与 IIS 格式有相同的信号线,唯一的不同是, IISLRCK 信号线改变后, MSB 立即发送,期间没有一个时钟周期的时间。 IIS 采集频率和主设备时钟 IIS 主设备时钟频率可以通过采样频率来选择,如下表一
13、所示。因为 IIS 主设备时钟频率是由 IIS 分频器产生的(主设备时钟频率 =PCLK/预分频器值),因此必须选择合适的预分频值和 CODECLK 的采样频率类型( 256 或者 384fs),才能获得合适的IISLRCK 频率( IISLRCK 频率 =主设备时钟频率 /CODECLK)。 串行 位采样频率类型( 16/32/48fs)可以通过配置信道的串行位数和 CODECLK 采样频率类型来完成(串行位时钟频率类型 =CODECLK 的采样类型 /串行数据位数),如下表 2 所示。 表一 CODEC clock(CODECLK=256 或者 384fs) 表二 可用的 serial b
14、it clock frequency( IISCLK=16 or 32 or 48fs) 2.3 音频芯片 UDA1341 UDA1341TS是 Philips 公司的音频 CODEC。 UDA134TS 片内集成了立体声 ADC、 DAC,可以实现模拟信号和数字信号的相互转换,其模拟输入通道可用可编程增益放大器( PGA)和数字自动增益控制( AGC)对模拟信号进行处理。同时该芯片提供了 DSP,可以处理数字音频信号。 UDA134TS 提供 2 组音频信号输入线, 1 组音频信号输出线, 1 组 IIS 总线接口信号线 L3 总线。音频输入和输出线各有左右两个声道。 IIS 总线接口信号线
15、包括位时钟输入 BCK,字选择输入 WS,数据输入 DATAI,数据输出 DATAO 和音频系统时钟 SYSCLK信号线。 IIS 总线只处理音频数据 UDA134TS 内置的 L3 总线相当于 混音频控制接口,可使微处理器对 UDA134TS 中得数字音频处理参数和系统控制参数进行配置,如输入 /输出音频信号的音量存在很大差别;对 UDA134TS 的所有功能控制和状态均通过 L3 总线实现。该接口包含了 3个信号线,分别是串行数据线 L3DATA、接口模式选择线 L3MODE和串行时钟线 L3CLOCK。 L3 接口操作有两种模式:地址模式和数据传输模式。 L3MODE为低电平时操作为地址
16、模式,高电平时操作为数据传输模式。 3 系统的软件设计 3.1 软件整体设计 嵌入式 Linux 是一种完全开放且免费的操作系统,其 支持多种硬件体系结构,运行稳定 ,拥有完善的开发工具,为开发人员提供了优良的开发环境 5。在嵌入式 Linux 系统中,设备驱动程序提供了应用程序和实际设备之间的一个软件层 (接口 ),为应用程序屏蔽了硬件细节。本设计中,音频设备驱动程序主要通过对硬件的控制实现音频流的传输,同时向上层提供标准的音频接口。整个音频驱动程序包括设备初始化、打开设备、数字音频处理 (DSP)驱动、混频器 (MIXER)驱动和释放设备等部分。本文由于篇幅的限制,仅介绍设备初始化及打开设
17、备的实现。 设备初始化是整个音频驱动程序的开始部分,主 要完成对 UDA1341TS 音量、采样频率、 L3 接口等的初始化,并且注册设备。通过函数 audio_init(void)完成以下具体功能: AT91RM9200 控制端口 (PA0、 PA1、 PA2)的初始化 ;为 UDA1341TS 分配 DMA 通道 ;初始化 UDA1341TS 芯片 ;注册音频 audio 设备和混频器设备。 3.2 WAV 文件格式 WAV 声音格式文件是 Windows 环境下的一种常用音频文件格式,它遵循着一种 称为 “资源互换文件格式 “(Resources lnterchange File For
18、mat)的结构 ,简称 RIFF。RIFF 可以看作是一种树状结构,其基本构成单位为 chunk,犹如树状结构中的节点,每个 chunk 由 “辨别码 “、 “数据大小 “及 “数据 “所组成。 WAV 为 WAVEFORM 的缩写。 “RIFF“格式辨别码为 “WAVE“。整个文件由两个 chunk所组成:辨别码 “fmt“及 “data“。 在“ fmt”的 chunk 下包含了一个 PCMWAVEFORMAT 数据结构,在“ fmt” chunk 之后是原始声音的采样数据,这些数据是可以直接送到 IIS 总线的数字音频信号。 典型的 WAV 文件结构: 它包含 8字节 RIFF 头、 4
19、 字节数据类型“ WAVE”、 “fmt “chunk(共 0x18 字节)和 “data“ chunk。因此, WAV 文件中从下式中的 sizeoff 开始的四个字节表示声音数据的大小, dataoff 开始的位置为具体的声音数据。 sizeoff = 0x8+0x4+0x18+0x4=0x28 dataoff = 0x8+0x4+0x18+0x8=0x2C 3.3 初始化 UDA1341 模块 1.初始化 UDA1314 模块 流程图如下: RIFF header data type fmt chunk data chunk开始 端口初始化 地址选择 AD 和 DA 增益控制 录音 选择
20、模式 2.1314 初始化 程序代码如下: static void Init1341(char mode) U16 FsIdx; /Port Initialize /- / PORT B GROUP /Ports : GPB4 GPB3 GPB2 /Signal : L3CLOCK L3DATA L3MODE /Setting: OUTPUT OUTPUT OUTPUT / 9:8 7:6 5:4 /Binary : 01 , 01 01 /- rGPBDAT = rGPBDAT /Start condition : L3M=H, L3C=H rGPBUP = rGPBUP /The pull
21、 up function is disabled GPB4:2 1 1100 rGPBCON = rGPBCON /GPB4:2=Output(L3CLOCK):Output(L3DATA):Output(L3MODE) /L3 Interface _WrL3Addr(0x14 + 2); /STATUS (000101xx+10) _WrL3Data(0x60,0); /0,1,10, 000,0 : Status 0,Reset,256fs,IIS-bus,no DC-filtering _WrL3Addr(0x14 + 2); /STATUS (000101xx+10) FsIdx =
22、mode?RecStatus.FsIdx:PlayStatus.FsIdx; if(CodecParaFsIdx.ofs) _WrL3Data(0x18,0); /0,0,01, 000,0 : Status 0,No reset,384fs,IIS-bus,no DC-filtering else _WrL3Data(0x28,0); /0,0,10, 000,0 : Status 0,No reset,256fs,IIS-bus,no DC-filtering _WrL3Addr(0x14 + 2); /STATUS (000101xx+10) _WrL3Data(0xc1,0); /1,
23、0,0,0, 0,0,01 /Status 1,Gain of DAC 6 dB,Gain of ADC 0dB,ADC non-inverting,DAC non-inverting /,Single speed playback,ADC-Off DAC-On /Record if(mode) _WrL3Addr(0x14 + 2); /STATUS (000101xx+10) / _WrL3Data(0xa2,0); /1,0,1,0, 0,0,10 /Status 1,Gain of DAC 0 dB,Gain of ADC 6dB,ADC non-inverting,DAC non-i
24、nverting /,Single speed playback,ADC-On DAC-Off _WrL3Data(0xe3,0); /1,1,1,0, 0,0,11 /Status 1,Gain of DAC 6 dB,Gain of ADC 6dB,ADC non-inverting,DAC non-inverting /,Single speed playback,ADC-On DAC-On,DAC 打开 使录音时可从耳机听到声音 / _WrL3Addr(0x14 + 0); /DATA0 (000101xx+00) / _WrL3Data(0x3f,0); /00,11 1111 :
25、Volume control (6 bits) / _WrL3Data(0x00,0); /00,00 0000 : Volume control (6 bits) 0dB _WrL3Addr(0x14 + 0); /DATA0 (000101xx+00) _WrL3Data(0x7b,0); /01,11 10,11 : Data0, Bass Boost 1824dB, Treble 6dB / _WrL3Addr(0x14 + 0); /DATA0 (000101xx+00) _WrL3Data(0xc4,0); /1100 0,100 : Extended addr(3bits), 1
26、00 / _WrL3Data(0x90,0); /100,1 00,00 : DATA0, Enable AGC, 00, input amplifier gain channel 2 (2bits) _WrL3Data(0xf0,0); /111,1 00,00 : DATA0, Enable AGC, 00, input amplifier gain channel 2 (2bits) / _WrL3Addr(0x14 + 0); /DATA0 (000101xx+00) _WrL3Data(0xc0,0); /1100 0,000 : Extended addr(3bits), 000 _WrL3Data(0xe4,0); /111, 00000 : MA = 0dB _WrL3Data(0xc1,0); /1100 0,001 : Extended addr(3bits), 001 _WrL3Data(0xe4,0); /111, 00000 : MB = 0dB