基于单片机的嵌入式音频系统.docx
《基于单片机的嵌入式音频系统.docx》由会员分享,可在线阅读,更多相关《基于单片机的嵌入式音频系统.docx(28页珍藏版)》请在冰点文库上搜索。
绪论 5
1系统的总体结构 6
2系统原理与方案选择 7
2.1S3C2440芯片选型及其原
理 8
2.2IIS总线和系统音频 9
2.2.1IIS音频总线物理连接 9
2.2.2IIS的总线协议 10
2.2.3 S3C2440的IIS接口 10
2.2.4UDAl341音频
codec 12
2.2.5S3C2440+UDAl341音频双工系统 13
2.3实现s3c2440对音频信号输出程序 16
3软件设计 17
4.音频设计 22
5软硬件调试 23
6结论 24
7致谢 25
8参考文献 26
4
绪论
随着Internet技术和多媒体技术的快速发展,语音通信技术的应用越来越广泛,也越来越受到重视。
如今的嵌人式设备日益复杂化,功能比以前更加丰富,性能也越来越高。
在多种嵌人式终端产品中,音频处理功能已成为不可缺少的重要组成部分,高质量的音效是当前发展的重要趋势。
随着对音频技术要求的不断提高,各种附加功能模块的加入,系统越来越复杂,利用传统方式很难对众多的任务进行有效地管理,加入了嵌入式技术,使得音频系统在性能提高的前提下,研究成本较少。
嵌入式语音系统广泛应用于GPS自动导航、PDA,3G手机等嵌入式领域。
在语音功能需求的驱动下,越来越多的厂商纷纷推出了具有各种功能和标准的语音处理接口协议。
IIS是
Philips公司推出的一种主要针对数字音频处理技术和设备的标准接口,它将音频数据和时钟信号分离,从而避免了由时钟带来的抖动问题,系统中不再需要消除抖动的器件。
随着该标准的广泛应用,不同厂家纷纷开发了支持该标准的语音芯片,但大多数受于功能单一,操作复杂,没有得到广泛应用。
Philips生产了一种支持IIS总线数据格式的音频编解码芯片UDAl34l,它是Philips 推出的一款适用于手持设备的低成本、小尺寸、低功耗的高性能音频编解码器。
该器件提供2个麦克风输入,可实现单端输入、差分输入等灵活配置,并设置了可编程增益放大器和自动增益控制器,保证高质量的音频获取;该芯片还集成了听筒和喇叭输出的驱动器,喇叭音量可以编程调整或进入静音状态。
在ADC 路径上,还提供了可编程滤波器、混频器等。
目前UDAl34l广泛应用于各种嵌入式语音系统中。
Sumsang公司生产的嵌入式处理器S3C2440芯片主频最高500MHz,作为硬件平台的中央处理器,通过IIS 音频总线与UDA1341型CODEC 构成嵌入式音频系统。
本文对llS协议及S3C2440的IIS接口进行了介绍,并在此基础上介绍了支持IIS协议的UDAl34l语音芯片在基于S3C2440的嵌入式系统中的应用。
文中给出了整个系统的软硬件实现方案,详细设计了存储器、LCD、电源管理模块的电路,最终实现音频的采集和播放。
1 系统的总体结构
1.1课题的任务
本课题是针对ARM处理器S3C2440、IIS音频总线,UDA1341,基于ADS1.2软件为开发环境,制定系统总体设计方案。
该音频播放器的具体的设计的内容包括以下几个方面:
(1)系统硬件总体设计首先参考系统的性能指标,确定系统总体框架,将构成系统整体的各个模块的功能进行划分和详细定义,然后针对各个模块功能进行详细的器件选型分析。
(2)软件设计,系统软件流程的测试。
(3)完成软硬件的调试,实现系统的功能,播放音频。
1.2整体方案设计
在对系统功能要求进行分析的基础上,结合技术指标和实现成本,对基于
ARM9的嵌入式音频设计实现提出如下整体设计方案:
图1-1整体方案设计
1.2系统组成框图介绍
该系统的硬件平台主要有八个部分组成,如图1-1所示。
其组成部分的简要介绍如下:
(1)处理器模块:
由于处理器的计算能力直接影响流媒体数据传输及对
MP3数据解码的速率和音质,系统采用了Samsung公司性价高且主频最高500MHz的S3C2440芯片作为硬件平台的中央处理器。
(2)存储模块:
64M的FLASH芯片K9F5608U0C(Samsung公司),
Flash存储器是一种可在系统电擦写,掉电后信息不丢失的存储器,用于存储启动引导程序U-boot(该系统选用的是Samsung的vivi)、内核及文件系统。
(3)内存模块:
64M的SDRAM芯片HY57V51620BT(Samsungsemi公司)用做系统的内存。
SDRAM不具有掉电保持数据的特性,但存取速度大大高于Flash存储器,且具有读写特性。
因此系统中SDRAM主要用作程序的运行空间、数据及堆栈区。
(4)音频D/A转换模块:
选用的芯片是Philips公司的UDA1341,其具有IIS接口可以方便地同ARM通信。
(5)显示模块:
LcD(LiquildCrystalDisplay)显示器,它是一种采用
T液晶控制透光度技术来实现色彩的显示器,LCD控制器传送图像数据。
(6)外围电路及接口模块。
(7)电源模块:
系统电源接入后,经过开关电源稳压芯片进行变压,输
出5V电压,然后在经过滤波、线性稳压进行变压,输出3.3V电压,再经过滤波,向系统供电,LED用来显示系统电源供电是否正常。
5
2系统硬件设计
2.1 S3C2440芯片选型及其原理
2.1.1 S3C2440芯片的选型
三星公司推出的16/32位RISC微处理器S3C2440,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。
为了降低整体系统成本,S3C2440提供了丰富的内部设备S3C2440采用了ARM920的内核,
0.13um的CMOS标准宏单元和存储器单元。
S3C2440的杰出特点该处理器是最高主频达500Hz,内部集成了ARM公司ARM920T处理器核的32位微控制器,资源丰富,带独立的16KB的指令Cache和16KB数据Cache、MMU虚拟内存管理单、LCD控制器、RAM控制器、NAND闪存控制器、3路UART、4路DMA、4路带PWM的Timer、并行I/O口、8路10位ADC、TouchScreen接口、IIS接口、2个USB接口控制器、2路SPI,且具有较高的性价比。
ARM920T实现了MMU,AMBABUS和Harvard高速缓冲体系结构。
这一结构具有独立的16KB指令
Cache和16KB数据Cache,每个都是由具有8字长的行组成,通过提供一套完整的通用系统外设,S3C2440减少整体系统成本和无需配置额外的组件。
2.1.2 S3C2440芯片原理图
图2-1s3c2440芯片原理图
S3c2440芯片具体信息资源如下:
CPU处理器
.SamsungS3C2440A,主频400MHz,最高533Mhz
SDRAM内存
.在板“64MSDRAM
.32bit数据总线
.SDRAM时钟频率高达100MHz
FLASH存储
在板64MNandFlash,掉电非易失
.在板2MNorFlash,掉电非易失,已经安装BIOS
LCD显示
.NEC256K色240x320/3.5英寸TFT真彩液晶屏,带触摸屏;接口和资源
.1个10M以太网RJ45接口(采用CS8900网络芯片)
.3个串行口
.1个USBHost
.1个USBSlaveB型接口
.1个SD卡存储接口
.1路立体声音频输出接口,一路麦克风接口;
.1个2.0mm间距20针标准JTAG接口
.4USERI.,eds
.4USERbuttons
.1个PWM控制蜂鸣器
.1个可调电阻,用于AD模数转换测试
。
1个12C总线AT24C08芯片,用于12C总线测试
6
.1个20pin摄像头接口
.板载实时时钟电池
.电源接UI(12V),带电源开关和指示灯系统时钟源
.12M无源晶振
’实时时钟
.内部实时时钟(带后备锂电池)扩展接口
.1个34pin2.0mmGPIO接口
.1个44pin2.0mm系统总线接i:
3
规格尺寸
120X100(mm)
2.2
2.2.1IIS音频总线物理连接
IIS(Intcr-ICSoundbus)又称12S,是菲利浦公司提出的串行数字音频总线协议。
目前很多音频芯片和MCU都提供了对IIS的支持,作为一种数字音频设备之间进行音频数据传输的总线标准,IIS有3~5根物理连接线,如下所示:
IISDI:
串行数据输入线
IISDO:
串行数据输出线SCLK:
为串行数据提供位时钟LRCK:
切换左右声道数据帧
MCLK:
为系统提供的同步时钟,又称CDCLK(编解码器时钟)
数据的发送方和接收方需要有一个时钟信号来控制数据的传输,因此数据发送方(主设备)必须产生字段选择信号、时钟信号和数据信号。
2.2.2IIS的总线协议
7
图2-1为IIS总线的时序状态图,图中描述了IIS总线的时钟信号、字段选择信号和串行数据传输信号之间的同步关系。
图2-1 IIS总线的时序状态图
串行传输(SD)
串行数据的传输主要由时钟信号控制,每次传送一个字节的数据。
当音频数据被数字化处理成二进制数据流后,将数据分成8bit或16bit传输。
每个字节的数据传输从左边的二进制位MSB(MostSignificantbit)开始。
当接收方和发送方的数据宽度不一样的时候,发送方不考虑接收方的数据宽度。
如果发送的数据宽度小于系统字段宽度,可以在低位补0;如果发送数据宽度大于接收数据宽度,超过LSB的部分将被截断。
左右声道选择(LRCK)音频由左声道和右声道组成,使用字段选择可以区分左右声道。
数据格式不同声道选择信号的含义也不相同。
时钟信号(SCLK)IIS总线中,任何一个能产生时钟信号的器件均可以成为主设备,从设备从外部输入取得时钟信号,IIS的规范中规定了一系列关于时钟信号频率和实验的限制。
2.2.3S3C2440的IIS接口
S3C2440A的Inter-ICSound(IIS)总线接口作为一个编解码接口连接外部8/16位立体声音频解码IC用于迷你碟机和可携式应用。
IIS总线接口支持IIS总线数据格式和MSB-justified数据格式。
该接口对FIFO的访问采用了DMA模式取代了中断。
它可以在同一时间接收和发送数据。
总线接口,寄存器组和状态机(BRFC):
总线接口逻辑和FIFO访问由状态机控制。
(1)5位双预定标器(IPSR):
一个预定标器用于IIS总线接口的主时钟发生器,另外一个用作外部编解码时钟发生器。
(2)64位FIFO(TxFIFO和RxFIFO):
在发送数据传输时,数据写到
12
TxFIFO;
在接收数据传输时,从RxFIFO读取数据。
(3)主IISCLK发生器(SCLKG):
在主设备模式,串行位时钟是从主时钟生成。
(4)通道发生器和状态机(CHNC):
IISCLK和iislrck是由通道状态机生成并控制。
(5)15位移位寄存器(SFTR):
在发送模式下并行数据移位成串行数据输出,在接收模式下串行数据输入移位成并行数据。
(6)在DMA传输下,发送或接收FIFO对DMA控制器是可访问的。
在发送或接收模式下的DMA服务请求是由FIFO准备标志自动执行。
(7)IIS 总线有四线包括串行数据输入(IISDI),串行数据输出
(IISDO),左右通道选择。
(8)(IISLRCK)和串行位时钟(IISCLK),生成IISLRCK和IISCLK的设备是主设备。
串行数据以2的补码发送,MSB(MostSignificantBit最高位)先发。
因为发送器和接收器可能有不同的字长,MSB(最高位)先发。
发送器不必知道接收器可以处理多少位,接收器也不必知道会收到多少位。
当系统字长大于发生器的字长,字为了数据发送而被截断(最低位被置0)。
如果接收器接收大于其字长的位,在LSB(最低位)后的位被忽略。
另外,如果接收器收到的位数小于其
字长,缺少的位被置0。
因此MSB有一个固定的位置,而LSB的位置取决于字长。
只要IISLRCK发送改变,发送器在一个时钟周期内发送下一个字的MSB。
由发送器发送的串行数据可以和时钟信号的下降沿和上升沿同步。
但是,串行数据
必须在串行时钟信号的上升沿锁存到接收器。
因此当同步上升沿的数据发送时有一些限制。
左右通道选择线指出了正在发送的通道。
IISLRCK可以在串行时钟的下降沿或上升沿被改变,当时其不需要对称。
在从设备,信号在串行时钟的下降沿或上升沿被锁存。
在MSB被发送,IISLRCK线改变一个时钟周期此允许发送器导出用于建立发送的串行数据同步时序。
此外,其使能接收存储前一个字且为下一个字的接收清除输入。
主设备时钟频率(PCLK或MPLLin)可以在采样频率中选择。
因为主设备时钟由
IIS预分频器(预定标器)产生,预分频器(预定标器)的值和主设备时钟类型
(256或384fs)应该合适确定。
串行位时钟频率类型可以由每个通道的串行位和主设备时钟来选择。
2.2.4UDAl341音频codec
UAl341是飞利浦公司的一款经济型音频CODEC,用于实现模拟音频信号的采集
(音频AD)和数字音频信号的模拟输出∞|A),并通过Ⅱs数字音频接口,实现音频信号的数字化处理。
具有3伏的低电压、低功耗、高保真,宽动态范围和低失真的高品质特性,大量应用于家庭袖珍多媒体立体声音响设备,笔记本电脑、数字摄像机及计算机音频信号处理设备中。
UDAl341TS支持下列数据格式
1)字长可达20位的IIS总线数据格式;
2)字长可达20位的MSB2justified的串行数据格式;
3)字长16,18或20位LSB2jusfified的串行数据格式;
L3控制特性
由微处理器与UDAl341芯片L3接口,完成下列控制功能:
1)电源控制;
2)芯片复位;
3)数模、模数转换的增益开关;
4)数模、模数转换的极性控制;
5)倍速录音控制;
6)音量、高低音、静音控制:
7)麦克风灵敏度控制;
8)可编程增益放大器控制;数字AGC自动增益控制。
UDAl341对外提供2组音频信号输入接口,每组包括左右2个声道。
如图2-2图所示,2组音频输入在UDAl341内部的处理存在很大差别:
第一组音频信号输入后经过1个0dB/6dB开关后采样送入数字混音器:
第二组音频信号输入后先经过可编程增益放大器(PGA),然后再进行采样,采样后的数据要再经过数字自动增益控制器(AGC)送入数字混音器。
设计硬件电路时选用第二组输入音频信号,这样可以通过软件的方法实现对系统输入音量大小的调节。
显然选用第二组可以通过L3总线接口控制AGC来实现。
另外,选择通道2还可以通过PGA对从MIC输入的信号进行片内放大。
图2-2udal341方框图
2.2.5S3C2440+UDAl341音频双工系统
本文采用S3C2440利用IIS总线控制udal 341实现音频录放。
S3C2440A
芯片内置了IIS总线接口,可实现三种数据传输模式:
(1)正常传输模式:
正常传输模式基于FIFO寄存器。
该模式下CPU将通过轮询方式访问FIFO寄存器,通过IISCON寄存器的第七位控制FIFO。
如果FIFO缓存已满,IISCON的第七位被设置成“0”,表示不能继续传输数据;若IISCON的第7位被设置成“1",表示可以继续传输数据。
同理,数据接收时,如果FIFO已满,标识位置“0",让CPU对FIFO进行处理;如果FIFO未满,标识位置“l一,可以继续接收数据。
(2)DMA模式
此模式是一种外部设备控制方式,通过设置IISFCON寄存器可以使IIS接口作在该模式下。
它使用窃取总线控制权的方法使外部设备于主存交换数据,从而高系统的吞吐能力。
这种模式下,FIFO寄存器组的控制权在DMA控制器上,当FIFO满时,DMA控制器直接处理FIFO中的数据。
DMA模式的选择可以在IISCON寄存器的第4位和第5位进行设置。
(3)传输接收模式
这种模式下,IIS数据线将通过双通道DMA同时接收和发送音频数据。
在这种体系结构中,为了实现全双工,数据传输使用两个DMA通道,与IIS交互的数据经过IIS控制器写入FIFO寄存器组。
当FIFO被填满后,DMA控制器一
次性将数数据写入预先分配的内存区域内。
本文采用了第三种传输接收方式,图2-3为S3C2440A与udal341的连接示意图
图2-3为$3C2440A与udal341的连接示意图
S3C2440内部集成了一个IIS总线控制器,该控制器实现了一个外部8/16位立体声音频处理芯片的接口,支持IIS总线数据格式和MSB-justified数据格式和DMA传输,内部包含FIFO。
IIS总线控制器的结构如图2-4所示:
图2-4IIS总线控制器
图中各组成部分的功能如下:
IPSR是两个5位的预除器,IPSRA用于产生IIS总线的主时钟,IPSRB
用作外部音频芯片的时钟产生器。
FIFO缓冲共有16个字节,发送数据写入TxFIFO,接收数据从RxFIFO读取。
SCLKG是主IISCLK产生器,在主模式下由主时钟产生串行位时钟。
13
通道产生器和状态机(CHNC)负责产生并控制IISCLK和IISLRCK。
16位移位寄存器SFTR,它主要对数据进行串并转换。
IIS相关的寄存器包括IIS控制器IISCON、llS模式寄存器IISMOD和IIS
分频寄存器IISPSR,下面对各寄存器的功能和设置方法进行介绍。
IIS控制寄存器的描述如表2.1和表2.2所示。
表2.1IIS控制寄存器
表2.2IIS控制寄存器
IISCON是IIS控制寄存器,通过它可以选择声道(左佑)、设置FIFO状态、
DMA
使能,预分频器使能以及IIS接口使能等。
IIS模式寄存器的描述如表2.3和表2.4所示
表2.3IIS模式寄存器
IIS模式寄存器(IlsMOD)用来设置IIS总线的工作模式。
其中包括主/从模式选择、传输/接收模式选择、串行接口格式以及时钟采样频率等。
IIS分频寄存器的描述如表2-5和表2-6所示IIS分频寄存器设置预分的值,其中【9:
5】设置预分频值A,【4:
0】设置预分频值B.
表2-5IIS分频寄存器
表2-6IIS分频寄存器设置
2.3 实现s3c2440对音频信号输
出程序
//L3接口
#defineL3C(1<<4)//GPB4=L3CLOCK#defineL3D(1<<3)//GPB3=L3DATA
28
#defineL3M(1<<2)//GPB2=L3MODE
//纯音频信号数据数组unsignedcharmusic[]={
0xB8,0xFF,0xBA,0xFF,0xBF,0xFF,0xC0,0xFF,0xD4,0xFF,0xD3,
0xFF,0xF2,0xFF,0xED,0xFF,
0x0E,0×00,0×05,0×00,0x1C,0×00,0x0F,0×00,0×15,0×00,
0×06,0×00,0xFC,0xFF,0xEC,0xFF,
…………
}
//L3总线接口的写函数
//输入参数data为要写入的数据
//输入参数address,为1表示地址模式,为0表示数据传输模式staticvoidWriteL3(U8data,U8address)
{
inti,j;
if(address==1)//地址模式;
rGPBDAT=rGPBDAT&~(L3D|L3M|L3C)|L3C;//L3D=L,L3M=L(地址模式),L3C=H
Else//数据模式;
rGPBDAT=rGPBDAT&~(L3D|L3M|L3C)|(L3C|L3M);//L3M=H(数据传输模式)
for(i=0;i<10;i++)
;//等待一段时间
//并行数据转串行数据输出,以低位在前、高位在后的顺序for(i=0;i<8;i++)
{
if(data&0×1)//H
{
rGPBDAT&=~L3C;//L3C=LrGPBDAT|=L3D;//L3D=H
for(j=0;j<5;j++)
;//等待一段时间rGPBDAT|=L3C;//L3C=HrGPBDAT|=L3D;//L3D=Hfor(j=0;j<5;j++)
;//等待一段时间
}
else//L
{
rGPBDAT&=~L3C;//L3C=LrGPBDAT&=~L3D;//L3D=Lfor(j=0;j<5;j++)
;//等待一段时间
rGPBDAT|=L3C;//L3C=H使CLOCK为1;rGPBDAT&=~L3D;//L3D=Lfor(j=0;j<5;j++)
;//等待一段时间
}
data>>=1;
}
rGPBDAT=rGPBDAT&~(L3D|L3M|L3C)|(L3C|L3M);
//L3M=H,L3C=H
}
//放音
voidplaysound(unsignedchar*buffer,intlength)
{
intcount,i;charflag;
rGPBDAT=rGPBDAT&~(L3M|L3C|L3D)|(L3M|L3C);//L3开始传输:
L3M=H,L3C=H
//配置UDA1341
WriteL3(0×14+2,1);//状态模式(000101xx+10)WriteL3(0×60,0)