周欣嵌入式设计论文lzc.docx
《周欣嵌入式设计论文lzc.docx》由会员分享,可在线阅读,更多相关《周欣嵌入式设计论文lzc.docx(14页珍藏版)》请在冰豆网上搜索。
![周欣嵌入式设计论文lzc.docx](https://file1.bdocx.com/fileroot1/2023-1/31/68165f2e-ca01-448a-85b2-5e8cc3d1d327/68165f2e-ca01-448a-85b2-5e8cc3d1d3271.gif)
周欣嵌入式设计论文lzc
《嵌入式系统原理及接口技术》
课程论文
题目:
嵌入式通信服务器的设计与实现
院(系)电子与信息工程学院
专业电子信息工程
班级08电子信息工程
(2)
学生姓名黄慧
学号20081305095
指导教师周欣
1、概述
1.1嵌入式系统的简介
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。
嵌入式系统一般指非PC系统,它包括硬件和软件两部分。
硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。
软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序编程。
有时设计人员把这两种软件组合在一起。
应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。
嵌入式系统的组成
嵌入式系统的核心是嵌入式微处理器。
嵌入式微处理器一般就具备以下4个特点:
1)对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核的执行时间减少到最低限度。
2)具有功能很强的存储区保护功能。
这是由于嵌入式系统的软件结构已模块化。
3)可扩展的处理器结构,以能最迅速地开展出满足应用的最高性能的嵌入式微处理。
4)低功耗,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统更是如此,如需要功耗只有mW甚至μW级。
相对通用计算机系统而言,嵌入式系统主要是面向特定应用额设计的。
系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化。
同时嵌入式系统的硬件和软件都必须高效率地设计,量体裁,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。
另外,嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
1.2数字音频系统的应用
随着计算机技术、电子技术和通信技术的迅猛发展,嵌入式系统已经成为通讯和消费产品的共同发展方向,广泛应用在人们工作生活的各个方面。
在嵌入式技术快速发展的同时,数字音频技术发展的速度也相当惊人,数字音频技术在我们社会生活中的应用也己经非常广泛,受到越来越多消费者的青睐。
WAV、MPEG和WMA相继出现的同时,MP3、MP4也正如暴风雪一般横扫整个音乐界,可见数字音频领域的研究有着非常广阔的前景。
在MP3、手机等消费类电子产品中,人们对于这些个人终端的要求早已不限于单纯通话和简单的文字处理,高质量的音效和实时的音频定制是当前发展的重要趋势。
2、硬件设计
2.1系统设计方案
录音是对模拟信号的一种量化,对模拟信号进行采样,对振幅进行量化(AD)如图1
放音就是将数字信号转变成模拟的音频信号(DA),推动耳机,功放等模拟音响设备
图1:
数字音频的产生过程
2.2S3C2410的IIS模块
2.2.2S3C2410的IIS总线简介
IIS总线是飞利浦公司提出的音频总线协议,全称是数字音频集成电力通信协议,它是一种串行的数字音频总线协议。
IIS总线只处理声音数据,其他信号(比如控制信号)必须单独传输。
IIS只使用了3根串行总线,以尽量减少引出管脚,这3根线分别是:
时分复用功能的数据线,字选择线,时钟信号线。
图1IIS总线示意图
2.2.3IIS音频传输模式
(a)正常传输模式:
此模式基于FIFO寄存器。
该模式下CPU将通过轮询方式访问FIFO寄存器,通过IISCON寄存器的第七位控制FIFO。
(b)DMA模式:
此模式是一种外部设备控制方式,它使用窃取总线控制权的方法使外部设备与主存数据,从而提高系统的吞吐能力。
在三星公司的ARM芯片中有4个通道DMA控制器用于控制各种外部设备,其中IS与其他串行外设共用两个桥联DMA(BDMA)类型DM通道。
通过设置CPU的IISFCON寄存器可以使IIS接口工作在DMA模式下。
此模式下FIFO寄存器组的控制权掌握在DMA控制器上。
当FIFO满时,由DMA控制器对FIFO中的数据进行处理。
DMA模式的选择由IISCON寄存器的第四和第五位控制。
在本文所设计的系统中就采用的这种模式进行数据传输。
2.2.4IIS音频串行接口格式
IIS总线一般具有4根信号线,如图1所示,包括串行数据输入(IISDI)、串行数据输出(IISD0)、左/右声道选择(IISLRCK)和串行数据时钟(IISCLK);产生IISLRCK和IISCLK的是主设备。
串行数据总是以偶数个数据且高位在先发送。
这样发送器就没有必要了解接收器能够处理多少位数据,接收器也不需了解多少位数据正在被发送。
被发送器发出的串行数据可以依据始终信号的下降沿或者上升沿来同步。
但是,串行数据必须在上升沿出锁入接收器。
左右声道选择决定被传输的通道。
IISCRCK可以在下降沿或者上升沿出改变。
它不要求是均匀的,在从设备端,这个信号在上升沿处被锁定。
IISLRCK信号线改变到MSB发送之间有一个时钟周期的时间。
图2IIS数据传输模式
2.3音频芯片UDA1341
本文采用的音频设备是生产的低功耗、全双工UDA1341TS芯片。
该芯片集成了Philips公ADC(Analog-to-DigitalConverter)DAC(Digital-to-AnalogConverter)、编程增益控GA)和数字自动增益控制(AGC),UDA1341TS支持IIS总线格式,数据传输字长可为16、18、20位,采样率32、44.1或48KHz。
由于IIS总线只处理音频数据,所以UDA1341TS内置了用于传输控制信号的L3总线接口。
L3接口相当于混音器控制接口,可以控制声音的重音、音量、高音以及静音,在声音回放的时候具有DSP功能。
同时该芯片采用3.3V电压供电,与S3C2410的I/O电压完全兼容,使设计变得更加容易。
UDA1341TS芯片主要应用于立体声的磁盘系统和便携式的各种设备中,如MD/CD机、笔记本电脑和数码相机等。
该芯片封装为SSOP28。
图3UDA1341TS连接电路
3、软件设计
图4IIS音频系统
3.1初始化UDA1341模块
3.1.1流程图
端口初始化
地址选择
AD和DA
增益控制
Mode=1
执行录音
1341初始化流程图
3.1.2程序
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
_WrL3Addr(0x14+2);//STATUS(000101xx+10)
FsIdx=mode?
RecStatus.FsIdx:
PlayStatus.FsIdx;
if(CodecPara[FsIdx].ofs)
_WrL3Data(0x18,0);
else
_WrL3Data(0x28,0);
_WrL3Addr(0x14+2);//STATUS(000101xx+10)
_WrL3Data(0xc1,0);//1,0,0,0,0,0,01
//DAC增益控制为6dB,ADC增益为dB。
//Record
if(mode){//mode为1时选择录音状态
_WrL3Addr(0x14+2);//STATUS(000101xx+10)
//_WrL3Data(0xa2,0);//1,0,1,0,0,0,10
//状态1,DAC增益为0dB,ADC增益为6dB。
_WrL3Data(0xe3,0);//状态1,DAC增益为6dB,ADC增益为0dB。
打开使//录音时可从耳机听到声音
//_WrL3Addr(0x14+0);//DATA0(000101xx+00)
//_WrL3Data(0x3f,0);//00,111111Volumecontrol(6bits)
//_WrL3Data(0x00,0);//00,000000Volumecontrol(6bits)0dB
_WrL3Addr(0x14+0);//DATA0(000101xx+00)
_WrL3Data(0x7b,0);//01,1110,11:
Data0,BassBoost18~24dB,Treble6dB
//_WrL3Addr(0x14+0);//DATA0(000101xx+00)
_WrL3Data(0xc4,0);//11000,100:
Extendedaddr(3bits),100
//_WrL3Data(0x90,0);//100,100,00:
DATA0,EnableAGC,00,inputamplifiergainchannel2(2bits)
_WrL3Data(0xf0,0);//111,100,00:
DATA0,EnableAGC,00,inputamplifiergainchannel2(2bits)
//_WrL3Addr(0x14+0);//DATA0(000101xx+00)
_WrL3Data(0xc0,0);//11000,000:
Extendedaddr(3bits),000
_WrL3Data(0xe4,0);//111,00000:
MA=0dB
_WrL3Data(0xc1,0);//11000,001:
Extendedaddr(3bits),001
_WrL3Data(0xe4,0);//111,00000:
MB=0dB
//_WrL3Addr(0x14+0);//DATA0(000101xx+00)
_WrL3Data(0xc2,0);//11000,010:
Extendedaddr(3bits),010
//_WrL3Data(0x59,0);//010,110,01:
DATA0,MICAmplifierGain27dB,inputchannel1select(inputchannel2off)
_WrL3Data(0xf9,0);//111,110,11:
DATA0,MICAmplifierGain27dB,input1XMA+input2XMB
}
}
3.2录音模块
3.2.1流程图
录音模块流程图
3.2.2程序
voidRecordTest(void)
{
intsize,i,j,err;
WAVEFORMATEXfmt;
WAVEHDRhdr[2048];
HWAVEINhwi=1;
fmt.nSamplesPerSec=fsTable[3];
fmt.wBitsPerSample=16;
fmt.wFormatTag=WAVE_FORMAT_PCM;
fmt.nChannels=2;
fmt.nBlockAlign=fmt.wBitsPerSample*fmt.nChannels/8;
fmt.nAvgBytesPerSec=fmt.nSamplesPerSec*fmt.nBlockAlign;
download_addr=0x30800000;//_NONCACHE_STARTADDRESS;
download_len=size=2*1024*1024;
for(i=0;ii=0;
while(size>0)
{
hdr[i].lpData=(LPSTR)(download_addr+0x2c+i*BUF_SIZE);
hdr[i].dwBufferLength=(size>BUF_SIZE)?
BUF_SIZE:
size;
size-=BUF_SIZE;
i++;
}
*(U16*)(download_addr+0x14)=fmt.wFormatTag;
*(U16*)(download_addr+0x16)=fmt.nChannels;
*(U32*)(download_addr+0x18)=fmt.nSamplesPerSec;
*(U32*)(download_addr+0x1c)=fmt.nAvgBytesPerSec;
*(U16*)(download_addr+0x20)=fmt.nBlockAlign;
*(U16*)(download_addr+0x22)=fmt.wBitsPerSample;
*(U32*)(download_addr+0x28)=download_len;
err=waveInOpen(&hwi,
0,
&fmt,
0,
0,
0);
printf("\nerr=%x\n",err);
for(j=0;j
if(waveInAddBuffer(hwi,&hdr[j],0))
puts("Addbuffererror!
");
printf("Added%dbufferforrecord\n",i);
//puts("PressanytoRecord\n");
//getch();
puts("Nowbeginrecording,PressEsctoexit\n");
waveInStart(hwi);
while
(1)
{
U8key;
key=getkey();
if(key==ESC_KEY)
break;
}
waveInClose(hwi);
REC_OK=0xff;
PlayMusicTest();
REC_OK=0;
}
3.3放音模块
3.3.1程序
voidPlayMusicTest(void)
{
intsize,i,j,err;
WAVEFORMATEXfmt;
WAVEHDRhdr[2048];
HWAVEOUThwo;
U8pause=0;
U8mute=0;
U32volume;
unsignedchar*buf;
if(REC_OK==0)
{
download_addr=DFT_DOWNLOAD_ADDR;
buf=(unsignedchar*)download_addr;
for(i=0;i<243552;i++)buf[i]=WindowsXP_Wav[i];
download_len=243552;
}
size=*(U32*)(download_addr+0x28);
i=0;
while(size>0)
{
hdr[i].lpData=(LPSTR)(download_addr+0x2c+i*BUF_SIZE);
hdr[i].dwBufferLength=(size>BUF_SIZE)?
BUF_SIZE:
size;
size-=BUF_SIZE;
i++;
}
fmt.wFormatTag=WAVE_FORMAT_PCM;
fmt.nChannels=*(U16*)(download_addr+0x16);
fmt.nSamplesPerSec=*(U32*)(download_addr+0x18);
fmt.nAvgBytesPerSec=*(U32*)(download_addr+0x1c);
fmt.nBlockAlign=*(U16*)(download_addr+0x20);
fmt.wBitsPerSample=*(U16*)(download_addr+0x22);
printf("SampleRate=%d,Channels=%d,%dBitsPerSample,size=%d\n",
fmt.nSamplesPerSec,fmt.nChannels,fmt.wBitsPerSample,*(U32*)(download_addr+0x28));
hwo=0;
err=waveOutOpen(&hwo,
0,
&fmt,
0,
0,
0);
printf("\nerr=%x\n",err);
for(j=0;j
waveOutWrite(0,&hdr[j],0);
puts("Nowplayingthefile\n");
puts("PressEsctoexit,'+'toincvolume,'-'todecvolume,'y'tomute,Enterto'pause'\n");
waveOutGetVolume(0,&volume);
while
(1)
{
U8key=getch();
if(key==ESC_KEY)
break;
if(key==ENTER_KEY)
{
pause^=1;
if(pause&1)
waveOutPause(0);
else
waveOutRestart(0);
}
if(key=='y'||key=='Y')
{
mute^=1;
if(mute&1)
waveOutSetVolume(0,0);
else
waveOutSetVolume(0,volume);
}
if((key=='+')&&(volume<=64535))
{
volume+=1000;
waveOutSetVolume(0,volume);
}
if((key=='-')&&(volume>=1000))
{
volume-=1000;
waveOutSetVolume(0,volume);
}
}
waveOutClose(0);
}
4、总结
虽然学习的时间只有十六周,但我觉得嵌入式系统是一很有应用前景的事业,也许这将是我所要从事的产业。
我们国家现在大力发展信息产业,前一段时间的学习和实验学到很多关于嵌入式系统方面的东西,也认识到我们国家目前水平还不高。
在写论文的资料查找过程中,自己感觉学到了不少东西,对该学科有所了解,认识到我们要努力学习,这样我们国家的科技水平才能够提高。
目前最体现科技水平就是芯片和软件,也就是在这些方面,我和别的同学相差很远,但我会努力的。
这次的设计对我来说还是有难度的,在查阅了好几本资料和网上搜后,我才决定做这个设计,课上讲的比较理论化,这一点需要化理论为实际。
在做设计的过程中,我有了一下的经验:
首先,面对复杂的程序不要有畏惧心理,觉得其很高深而不去看程序。
只要了解基本原理,就应认真耐心的看懂参考程序。
进而调试成功。
通过本次设计,学习音频接口、IIS接口的相关知识。
了解了ARM程序的设计方法。
特别是ARM的程序设计的模块式方法有了更深的体会。
参考文献
[1]黄智伟.ARM9嵌入式系统设计基础[M].北京航空航天大学出版2006.
[2]专业实验辅导资料
(一)[R].2009
[3]庄海军.基于S3C2410的IIS音频总线研究及其驱动实现[D].淮安2008