一基于ARM920T的嵌入式音频接口系统设计Word文档格式.docx
《一基于ARM920T的嵌入式音频接口系统设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《一基于ARM920T的嵌入式音频接口系统设计Word文档格式.docx(24页珍藏版)》请在冰点文库上搜索。
区别于嵌入式系统,我们将不使用嵌入式操作系统的基于MCU(微控制器)、MPU(微处理器)和DSP的循环控制系统称之为前后台系统。
嵌入式系统在应用数量上远远超过了各种通用计算机系统,一台通用计算机的外部设备中就包含了5-10个微处理器,键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡、打印机、扫描仪、数字相机、USB集线器等均是由嵌入式系统控制的。
在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均是嵌入式计算机的应用领域。
嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
纵观嵌入式系统的发展过程,可以看出嵌入式系统由简单的无操作系统的循环控制程序向具有强大功能的基于操作系统的方向发展,从独立的系统向基于网络的系统发展。
多媒体技术与Internet的应用迅速普及,消费电子、计算机、通信(3C)一体化趋势日趋明显,嵌入式技术已再次成为一个研究热点。
本课题主要以ARM920T为核心,舍弃大而复杂的模拟电路以及繁多的元器件,对ARM920T嵌入式音频接口系统主体部分的电路进行模仿设计,配置相应的外设及接口电路,只要写入简单的程序,就可以使以前的电路简单很多,却同样可以实现串口设置和初始化,中断,录/放音功能。
二、ARM体系结构介绍
(一)ARM920T的简介
ARM9内核采用了与StrongARM相同的五级流水线、提供1.1MIPS/MHz的哈佛结构、全性能的MMU单元、可配置的数据Cache和可分立和指令和数据高速AHB接口。
1.五级流水线
ARM920T处理器使用流水线来增加处理器指令流的速度。
这样可以使几个操作同时进行,并使处理和存储器系统连续操作,能提供1.1MIPS/MHz的指令执行速度。
流水线使用5个阶段,因此指令分5个阶段执行:
取址→译码→执行→存储→写。
2.ARM920T处理器结构
ARM920T处理器功能方框图如图1:
图1ARM920T处理器功能方框图
(二)ARMADS软件介绍
ARMADS全称为ARMDeveloperSuite。
是ARM公司推出的新一代ARM集成开发工具。
现在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0。
它除了可以安装在WindowsNT4,Windows2000,Windows98和Windows95操作系统下,还支持WindowsXP和WindowsMe操作系统。
ADS由命令行开发工具,ARM运行时库,GUI开发环境(CodeWarrior和AXD),实用程序和支持软件组成。
有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序了。
CodeWarrior集成开发环境(IDE)为管理和开发项目提供了简单多样化的图形用户界面。
用户可以使用ADS的CodeWarriorIDE为ARM和Thumb处理器开发用C,C++,或ARM汇编语言的程序代码。
通过提供下面的功能,CodeWarriorIDE缩短了用户开发项目代码的周期。
ADS的CodeWarriorIDE是基于MetrowerksCodeWarriorIDE4.2版本的。
它经过适当的裁剪以支持ADS工具链。
针对ARM的配置面板为用户提供了在CodeWarriorIDE集成环境下配置各种ARM开发工具的能力。
三、I2S(Inter–ICSound)音频接口的设计原理
(一)数字音频基础
1.采样频率和采样精度
在数字音频系统中,通过将声波波形转换成一连串二进制数据再现原始声音。
这个过程中使用的设备是A/D转换器,即ADC。
ADC以上万次每秒的速率对声波进行采样,每次采样都记录下了始声波在某一时刻的状态,称之为样本。
每秒采样的数目称为采样频率,单位为Hz。
采样频率越高,所能描述的声波频率就越高。
系统对于每个样本均会分配一定的存储位(Bit数)来表达声波的声波振幅状态,称之为采样精度。
采样频率和精度共同决定声音还原的质量。
人耳的听觉范围通常是20Hz~20kHz。
根据奈奎斯特采样定理,用两倍于一个正弦波的频率进行采样能够真实的还原该波形;
因此,当采样频率高于40kHz时,可以保证不产生失真。
CD音频的采样规格为16位、44kHz,就是根据以上原理制定的。
2.音频编码
脉冲编码调制PCM(PulseCodeModulation)编码的方法是对语言信号进行采样,然后对每个样值进行量化编码。
对语音量化和编码就是一个PCM编码过程。
ITU-T的64kb/s语音编码标准G.711采用PCM编码方式,采样频率为8kHz。
每个样值用8位非线性的μ律或A律进行编码,总速率为64kb/s。
CD音频即是使用PCM编码格式,采样频率为8kHz,对采样值采用16位编码。
使用PCM编码的文件在Windows系统中保存的文件格式为大家熟悉的wav格式,实验中用到的就是一个采样频率为44.100kHz、16位的立体声文件t.wav。
在PCM基础上发展起来的还有自适应差分脉冲编码调制ADPCM(AdaptiveDifferentialPulseCodeModulation)。
ADPCM编码的方法是对输入样值进行自适应预测,然后对预测误差进行量化编码。
CCITT的32kb/s语音编码标准G.721采用ADPCM编码方式,对每个语音采样值相当于使用4位进行编码。
其他编码方式还有线性预测编码LPC(LinearPredictiveCoding)、低时延码激励线性预测编码LD-CELP(LowDelay-CodeExcitedLinearPrediction)等。
目前流行的一些音频编码格式还有MP3(MPEGAudioLayer-3)、WMA(WindowsMediaAudio)和RA(RealAudio)。
它们有一个共同特点就是,压缩比高,主要针对网络传输,支持边读、边放。
(二)I2S音频接口
I2S是一种串行总线设计技术,是SONY和PHILIPS公司等电子巨头共同推出的接口标准,主要针对数字音频处理技术和设备,例如便携CD机、数字音频处理器等。
I2S将音频数据与时钟信号分离,避免由时钟带来的抖动问题,因此系统中不再需要消除抖动的器件。
I2S总线仅处理音频数据,对其他信号(如控制信号等)单独传送。
基于减少引脚数目和布线的目的,I2S总线只由3根串行线组成;
即分时复用的数据通道线(SerialData,SD)、字选择线(WordSelect,WS)和时钟线(ContinuousSerialClock,CSK)。
使用I2S技术设计的系统连接配置参见图2:
图2I2S系统连接配置图
I2S总线接口的基本时序参见图3
图3I2S总线接口的基本时序
WS信号线指示左通道或右通道的数据将被传输,SD信号线按高有效位MSB到低有效位LSB的顺序传送字长的音频数据。
MSB总在WS切换后的第一个时钟发送。
如果数据长度不匹配,那么接收器和发送器将对其自动截取或填充。
关于I2S总线的其它细节可参见《I2Sbusspecification》。
在实验中,I2S总线接口由处理器S3C2410的I2S模块和音频芯片UDA1341硬件来实现。
需要关注的是对I2S模块和UDA1341芯片正确的配置,音频数据的传输相对来说比较简单。
(三)WAV声音格式
WAV声音格式文件是Windows环境下的一种常用音频文件格式,它依循着一种称为“资源互换文件格式”(ResourcesInterchangeFileFormat)的格式,简称RIEF。
RIEF可以看做是一种树状结构,其基本构成单位为chunk,犹如树状结构中的节点,每个chunk由“辨别码”、“数据大小”及“数据”所组成。
WAV为WAVEFORM(波形)的缩写。
“RIEF”的格式辨别码为“WAVE”。
整个文件由两个chunk所组成:
辨别码“fmt”(注意,最后一个是空白字符!
)及“data”。
在“fmt”的chunk下包含了一个PCMWAVEFORMAT数据结构,在“fmt”chunk之后是原始声音的采样数据,该这些数据是可以直接送到I2S总线的数字音频符号。
一个典型的WAV格式文件结构如图4所示:
图4典型的WAV格式文件结构图
它包含8字节RIFF头、4字节数据类型“WAVE”、“fmt”chunk(共0x18即十进制的24字节)和“data”chunk。
因此,WAV文件中从下式中的sizeoff开始的四字节表示声音数据的大小,dataoff开始的位置为具体的声音数据。
sizeoff=0x8+0x4+0x18+0x4
dataoff=0x8+0x4+0x18+0x8
(四)I2S调用
1.voiduda1341_init(void):
UDA1341音频CODEC初始化函数
2.voiddma_init(unsignedchar﹡Buf,intsize,intbplay):
BDMAO控制寄存器设置,用于I2S录放音。
其中Buf为音频数据缓冲区指针,size为音频数据字节数,bplay为1时初始化BDMAO为放音方式,bplay为0时初始化BDMAO为录音方式。
3.voidiis_init(intbplay):
I2S控制器初始化函数,bplay为1时初始化I2S为放音方式,bplay为0时初始化I2S为录音方式,本实验采用16bit双声道采样,采样频率为22KHz。
4.voidiis_play(unsignedchar﹡Buf,intsize):
放音函数,Buf为音频数据缓冲区指针,size为音频数据字节数。
5.voidiis_record(unsignedchar﹡Buf,intsize):
录音函数,Buf为音频数据缓冲区指针,size为音频数据字节数。
(五)录放音流程图
播放WAV文件流程图A如下所示,录音流程图如下图B所示:
A放音流程图B录音流程图
程序如下:
void
Record_Iis(void)
{
unsigned
int
save_B,
save_E,
save_PB,
save_PE;
Uart_TxEmpty(0);
ChangeClockDivider(1,1);
//1:
2:
4
ChangeMPllValue(0x96,0x5,0x1);
//FCLK=135428571Hz,
PCLK=3.385714MHz
Uart_Init(33857142,115200);
Uart_Printf("
[
Record
test
using
UDA1341
]\n"
);
save_B
=
rGPBCON;
save_E
rGPECON;
save_PB
rGPBUP;
save_PE
rGPEUP;
IIS_PortSetting();
//Record
Buf
initialize,
Non-cacheable
area
0x31000000
~
0x33feffff
rec_buf
(unsigned
short
*)0x31000000;
pISR_DMA2
(unsigned)DMA2_Rec_Done;
pISR_EINT0
(unsigned)Muting;
rINTMSK
~(BIT_DMA2);
Init1341(RECORD);
//---
DMA2
Initialize
rDISRCC2
(1<
<
1)
+
0);
//APB,
Fix
rDISRC2
((U32)IISFIFO);
//IISFIFO
rDIDSTC2
(0<
//PHB,
Increment
rDIDST2
(int)rec_buf;
//0x31000000
~
rDCON2
31)+(0<
30)+(1<
29)+(0<
28)+(0<
27)+(1<
24)+(1<
23)+(1<
22)+(1<
20)+REC_LEN;
//Handshake,
sync
PCLK,
TC
int,
single
tx,
service,
I2SSDI,
I2S
Rx
request,
//Off-reload,
half-word,
0x50000
half
word.
rDMASKTRIG2
2)
0;
/-stop,
channel
on,
No-sw
trigger
//IIS
//Master,Rx,L-ch=low,IIS,16bit
ch,CDCLK=256fs,IISCLK=32fs
rIISMOD
8)
6)
5)
4)
3)
rIISPSR
(2<
2;
//Prescaler_A/B=2
-
FCLK
135.4752MHz(1:
4),11.2896MHz(256fs),44.1KHz
rIISCON
1);
/
DMA
disable,Rx
enable,Tx
idle,Rx
not
idle,prescaler
enable,stop
rIISFCON
14)
12);
//Rx
DMA,Rx
FIFO
-->
start
piling....
Press
any
key
to
record!
!
\n"
Uart_Getch();
Recording...\n"
start
|=
0x1;
while(!
Rec_Done);
BIT_DMA2;
Rec_Done
Stop
Delay(10);
//For
end
of
H/W
Rx
0x0;
stop
2);
//DMA2
flush
End
Record!
play
recorded
data\n"
If
you
want
mute
or
no
push
the
'
EIN0'
repeatedly\n"
size
REC_LEN
*
Size
%d\n"
size);
Init1341(PLAY);
(unsigned)DMA2_Done;
~(BIT_DMA2
|
BIT_EINT0);
//AHB,
//0x31000000
Fixed
27)+(0<
23)+(0<
20)+(size/2);
I2SSDO,
//Auto-reload,
size/2
2)+(1<
1)+0;
trigger