嵌入式论文文档格式.docx
《嵌入式论文文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式论文文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
嵌入式系统的核心是嵌入式微处理器。
嵌入式微处理器一般就具备以下4个特点:
1)对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。
2)具有功能很强的存储区保护功能。
这是由于嵌入式系统的软件结构已模块化。
3)可扩展的处理器结构,以能最迅速地开展出满足应用的最高性能的嵌入式微处理。
4)低功耗,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统更是如此,如需要功耗只有mW甚至μW级。
如今嵌入式进入市场有以下几个领域:
1、工业控制领域:
基于ARM核的微控制器不但占据了高端微控制器市场的大部分份,同时也逐渐向低端微控制器应用领域扩展,ARM微控制器的低功耗、高性价比,向传统的8位/16位微控制器(单片机)提出了挑战。
2、无线通讯领域:
目前已有超过85%的无线通讯设备采用了ARM技术,ARM以其高性能和低成本,在该领域的地位日益巩固。
3、网络应用:
随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。
此外,ARM在语音及视频处理上行了优化,并获得广泛支持,也对DSP的应用领域提出了挑战。
4、消费类电子产品:
ARM技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛采用。
1.2数字音频系统的应用
随着计算机技术、电子技术和通信技术的迅猛发展,嵌入式系统已经成为通讯和消费产品的共同发展方向,广泛应用在人们工作生活的各个方面。
在嵌入式技术快速发展的同时,数字音频技术发展的速度也相当惊人,数字音频技术在我们社会生活中的应用也己经非常广泛,受到越来越多消费者的青睐。
WAV、MPEG和WMA相继出现的同时,MP3、MP4也正如暴风雪一般横扫整个音乐界,可见数字音频领域的研究有着非常广阔的前景。
在MP3、手机等消费类电子产品中,人们对于这些个人终端的要求早已不限于单纯通话和简单的文字处理,高质量的音效和实时的音频定制是当前发展的重要趋势。
2系统的硬件设计
2.1系统设计方案
由于IIS总线只处理音频数据,而其他的信号如编码、控制等信号单独传送。
为了使必需的引脚数最小并且保持连线简单,IIS总线由3条信号线组成:
时分复用的数据通道线、字段选择线和时钟信号线。
本系统由系统主控制器提供时钟信号,控制数字音频数据在各个IC之间的流向。
此时,发送器在外部时钟信号的控制下产生数据,处于从模式。
2.2S3C2410的IIS模块
IIS总线仅处理音频数据,对其它信号(如控制信号等)单独传送。
基于减少引脚数目和布线的目的,IIS总线只由3根串行线组成,即分时复用的数据通道线(SerialData,SD)、字选择线(WordSelect,WS)和时钟线(ContinuousSerialClock,CSK),如图1。
图1IIS总线示意图
数据的发送方和接收方需要同步时钟信号来控制数据的传输,因此主设备一方必须产生字段选择信号、时钟信号和数据信号。
比较复杂的系统会有多个接收方和发送方,这时就需要有一个系统主控模块,用于控制音频在不同电路间传输,如图2:
图2IIS数据传输模式
IIS的总线协议:
①串行传输(SD)
串行数据传输主要是由时钟信号控制,每次发送一个字节的数据。
当音频数据被数字化处理成二进制数据流后,将数据分成8bits和16bits传输。
每个字节的数据传输从左边的二进制位MSB(MostSignificantBit)开始。
当发送方和接收方的数据宽度不一样时,发送方不考虑接收方的数据宽度,如果发送方的数据宽度小于系统字段宽度,可以在低位补0;
反之超过LSB(LeastSignificantBit)的部分被截断。
②字段选择(WS)
音频由左右声道组成,使用字段选择可以区分左右声道。
WS=0时选择左声道,WS=1时选择右声道。
如果不在外部加以控制,WS会在MSB传输前的一个时钟周期发生变化,这样有利于接收方和发送方的信号同步。
除此之外,WS还能让接收方设备存储前一个字节,并准备接收下一个字节。
③时钟信号(SCK)
IIS总线中,任何一个可产生时钟信号的器件都能成为主设备,从设备的外部输入取得时钟信号。
IIS总线的寄存器
图3是S3C2410处理器内部集成的IIS总线控制器结构图,该控制器实现了一个到外部8/16位立体声音频处理芯片的接口,支持IIS总线数据格式和MSB-justified数据格式,支持DMA传输,内部包含FIFO。
IIS相关的寄存器包括IIS控制寄存器IIS-CON、IIS模式寄存器IISMOD和IIS分频寄存器IISPSR,在下面的驱动程序编写中会对这些相关寄存器进行设置。
图3 IIS总线控制器结构图
2.3音频芯片UDA1341
UDA1341芯片除了提供IIS接口和麦克风扬声器接口,还提供L3接口控制音量。
IIS总线接口信号线包括位时钟输入BCK、字段选择WS、数据输入DATAI、数据输出DATAO和系统时钟SY-SCLK。
L3接口分别连在S3C2410的3个I/O引脚上。
芯片连接示意图如图4所示:
图4芯片连接示意图
图5UDA1341TS连接电路
硬件电路的连接:
各个引脚的连接说明如下:
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连接。
3系统的软件设计
3.1软件整体设计
嵌入式Linux是一种完全开放且免费的操作系统,其支持多种硬件体系结构,运行稳定,拥有完善的开发工具,为开发人员提供了优良的开发环境。
在嵌入式Linux系统中,设备驱动程序提供了应用程序和实际设备之间的一个软件层(接口),为应用程序屏蔽了硬件细节。
本设计中,音频设备驱动程序主要通过对硬件的控制实现音频流的传输,同时向上层提供标准的音频接口。
整个音频驱动程序包括设备初始化、打开设备、数字音频处理(DPS)驱动、混频器(MIXER)驱动和释放设备等部分。
3.2WAV
文件格式
WAV声音格式文件是Windows环境下的一种常用音频文件格式,它依循着一种称为“资源互换文件格式”(ResourcesInterchangeFileFormat)的格式,简称RIFF。
RIFF可以看作是一种树状结构,其基本构成单位为chunk,犹如树状结构中的节点,每个chunk由“辨别码”、“数据大小”及“数据”所组成。
WAV为WAVEFORM(波形)的缩写。
“RIFF”的格式辨别码为“WAVE”。
整个文件由两个chunk所组成:
辨别码“fmt”(注意:
最后一个是空白字符!
)及“data”。
在“fmt”的chunk下包含了一个PCMWAVEFORMAT数据结构,在“fmt”chunk之后是原始声音的采样数据,这些数据是可以直接送到IIS总线的数字音频符号。
一个典型的WAV格式文件结构如图6所示。
图6WAV文件结构
它包含8字节RIFF头、4字节数据类型“WAVE”、“fmt”chunk(共0x18字节)和“data”chunk。
WAV文件中声音数据的大小存放在si2zeoff开始的四字节中,具体的声音数据从dataoff开始。
其中:
sizeoff=0x8+0x4+0x18+0x4
dataoff=0x8+0x4+0x18+0x8
3.3初始化UDA1341模块
程序:
staticvoidInit1341(charmode)
{
//PortInitialize
//----------------------------------------------------------
//PORTBGROUP
//Ports:
GPB4GPB3GPB2
//Signal:
L3CLOCKL3DATAL3MODE
//Setting:
OUTPUTOUTPUTOUTPUT
//[9:
8][7:
6}[5:
4]
//Binary:
01,0101
//----------------------------------------------------------
rGPBDAT=rGPBDAT&
~(L3M|L3C|L3D)|(L3M|L3C);
//启动条件L3M=H,L3C=H
rGPBUP=rGPBUP&
~(0x7<
<
2)|(0x7<
2);
//禁止上拉电阻GPB[4:
2]
rGPBCON=rGPBCON&
~(0x3f<
4)|(0x15<
4);
//GPB[4:
2]=Output(L3CLOCK):
Output(L3DATA):
Output(L3MODE)
//L3Interface
_WrL3Addr(0x14+2);
//地址设置(000101xx+10)
_WrL3Data(0x60,0);
//数据输入0,1,10,000,0