已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号成绩 嵌入式应用系统设计课程论文 题目 基于ARM的音频系统设计 作 者 汪渝 班 级 08-3BF 院 别 信息与通信工程 专 业 电子信息工程 完成时间 2011年12月15日 1 概述1.1 嵌入式系统的技术背景 在许多领域中广泛应用的嵌入式计算系统(简称为嵌入式系统),是在更大的电子器件中嵌入的重复完成特定功能的计算系统,它经常不被器件的使用者所识别,但在各种常用的电子器件中能够找到这些嵌入式系统。例如,消费类电子产品中的手机、寻呼机、数字相机、摄像机、录像机、个人数字助理等,家用电器中的微波炉、洗衣机、烤箱、门禁系统、照明系统等,商用装置中的卡片读入器、扫描仪、打印机等。1.2 数字音频系统的应用数字音频信号是对模拟信号的一种量化,典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是ADC(模拟-数字转换)过程。DAC(数字-模拟转换)过程相反,将连续的数字按采样时候的频率顺序转换成对应的电压。2 系统的硬件设计2.1系统设计方案音频ADC/DAC通俗一点来讲就是录音(音频ADC)和放音(音频DAC)。放音是数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音响设备,而录音则是要将麦克风等产生的模拟音频信号转换成数字音频信号,并最终转换成计算机可以处理的通用音频文件格式。2.2 S3C2410的IIS模块n S3C2410的IIS总线简介IIS总线是近年出现的一种面向多媒体计算机的音频总线,该总线专责于音频设备之间的数据传输,为数字立体声提供一个序列连接至标准编码解码器。S3C2410的IIS总线接口可以用实现对外部8/16位立体声音频数字信号编码解码电路的接口功能。它支持IIS总线数据格式和MSB-justified数据格式。IIS总线接口为FIFO操作提供DMA传输模式,代替中断模式,它可以同时传送或接收数据。IIS模块特性: 兼容IIS,MSB-justified格式数据 每通道8/16位数据 每通道16,32,48fs(采样频率)串行时钟 可编程的分频器提供给主设备时钟和编解码时钟 供给发送和接收用的32字节(2X16)的FIFO正常(Normal)传输模式和DMA传输模式2.3 音频芯片UDA1341UDA1341是飞利浦公司的一款经济型音频CODEC,用于实现模拟音频信号的采集(音频AD)和数字音频信号的模拟输出(DA),并通过IIS数字音频接口,实现音频信号的数字化处理。 UDA1341的IIS引脚分别连接到S3C2410对应的IIS引脚上,音频输入输出(VIN,VOUT)分别和麦克风扬声器连接:UDA1341的L3接口相当于一个Mixer控制器接口,可以用来控制输入/输出音频信号的音量大小,低音等。L3接口的引脚L3MODE,L3DATA和L3CLOCK分别连接到S3C2410的IICSCL,IICSDA和GPF6引脚上。 3 系统的软件设计3.1 软件整体设计嵌入式 Linux是一种完全开放且免费的操作系统,其支持多种硬件体系结构,运行稳定,拥有完善的开发工具,为开发人员提供了优良的开发环境。在嵌入式 Linux系统中,设备驱动程序提供了应用程序和实际设备之间的一个软件层(接口),为应用程序屏蔽了硬件细节。本设计中,音频设备驱动程序主要通过对硬件的控制实现音频流的传输,同时向上层提供标准的音频接口。整个音频驱动程序包括设备初始化、打开设备、数字音频处理(DPS)驱动、混频器(MIXER)驱动和释放设备等部分。3.2 WAV文件格式WAV声音格式文件是Windows环境下的一种常用音频文件格式,它遵循着一种称为资源互换文件格式(Resources lnterchange File Format)的结构,简称RIFF。RIFF可以看作是一种树状结构,其基本构成单位为chunk,犹如树状结构中的节点,每个chunk由辨别码、数据大小及数据所组成。WAV为WAVEFORM的缩写。RIFF格式辨别码为WAVE。整个文件由两个chunk所组成:辨别码fmt及data。 在“fmt”的chunk下包含了一个PCMWAVEFORMAT数据结构,在“fmt” chunk之后是原始声音的采样数据,这些数据是可以直接送到IIS总线的数字音频信号。典型的WAV文件结构:它包含8字节RIFF头、4字节数据类型“WAVE”、fmt chunk(共0x18字节)和 data chunk。因此,WAV文件中从下式中的sizeoff开始的四个字节表示声音数据的大小,dataoff开始的位置为具体的声音数据。sizeoff = 0x8+0x4+0x18+0x4=0x28dataoff = 0x8+0x4+0x18+0x8=0x2C3.3 初始化UDA1341模块端口初始化开始地址选择AD和DA增益控制执行录音模式选择Mode1程序:static void Init1341(char mode)/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 & (L3M|L3C|L3D) |(L3M|L3C); /启动条件L3M=H, L3C=HrGPBUP = rGPBUP & (0x72) |(0x72); /禁止上拉电阻GPB4:2 rGPBCON = rGPBCON & (0x3f4) |(0x154); /GPB4:2=Output(L3CLOCK):Output(L3DATA):Output(L3MODE)/L3 Interface_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(CodecParaFsIdx.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,11 1111 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), 100/_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/_WrL3Addr(0x14 + 0);/DATA0 (000101xx+00)_WrL3Data(0xc2,0);/1100 0,010 : Extended addr(3bits), 010/_WrL3Data(0x59,0);/010,1 10,01 : DATA0, MIC Amplifier Gain 27dB, input channel 1 select(input channel 2 off)_WrL3Data(0xf9,0);/111,1 10,11 : DATA0, MIC Amplifier Gain 27dB, input 1 X MA + input 2 X MB 3.4 录音模块程序:void RecordTest(void)int size, i, j, err;WAVEFORMATEX fmt;WAVEHDR hdr2048;HWAVEIN hwi = 1;fmt.nSamplesPerSec = fsTable3;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; i 0)hdri.lpData = (LPSTR)(download_addr+0x2c+i*BUF_SIZE);hdri.dwBufferLength = (sizeBUF_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 = %xn, err);for(j=0;ji;j+)if(waveInAddBuffer(hwi, &hdrj, 0)puts(Add buffer error!);printf(Added %d buffer for recordn, i);/puts(Press any to Recordn);/getch();puts(Now begin recording, Press Esc to exitn);waveInStart(hwi);while(1)U8 key;key = getkey();if(key=ESC_KEY)break;waveInClose(hwi);REC_OK = 0xff ;PlayMusicTest() ;REC_OK = 0 ;3.5 放音模块程序:void PlayMusicTest(void)int size, i, j, err;WAVEFORMATEX fmt;WAVEHDR hdr2048;HWAVEOUT hwo;U8 pause = 0;U8 mute = 0;U32 volume;unsigned char *buf;if( REC_OK = 0 )download_addr = DFT_DOWNLOAD_ADDR;buf = (unsigned char *)download_addr;for( i = 0; i 0)hdri.lpData = (LPSTR)(download_addr+0x2c+i*BUF_SIZE);hdri.dwBufferLength = (sizeBUF_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(Sample Rate = %d, Channels = %d, %dBitsPerSample, size = %dn,fmt.nSamplesPerSec, fmt.nChannels, fmt.wBitsPerSample, *(U32 *)(download_addr+0x28);hwo = 0;err = waveOutOpen(&hwo,0,&fmt,0,0,0);printf(nerr = %xn, err);for(j=0;ji;j+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年泰宁县教师招聘考试参考题库及答案解析
- 2025年青岛莱西市中小学教师招聘笔试参考试题及答案解析
- 2025年虚拟形象定制协议
- 2025年虚拟数字人直播协议
- 2025年德阳市中小学教师招聘笔试参考题库及答案解析
- 2025年彭山县中小学教师招聘笔试参考试题及答案解析
- 西藏林芝市一中2025年高一化学第一学期期中学业水平测试试题含解析
- 天津市新四区示范校2025年高一生物第一学期期末教学质量检测试题含解析
- 新疆政法学院《专题设计研究》2024-2025学年第一学期期末试卷
- 2025年虚拟数字人表情包开发
- 土壤肥料学 7植物氮素营养与氮肥学习资料
- 郑商所苹果期货培训课件
- 2025年湖南高速铁路职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 催收专业知识培训课件
- 《传感器测量在工业中的应用》课件
- DB33∕642-2019热电联产能效、能耗限额及计算方法
- 职业健康安全管理体系培训课件
- 2024消化道出血临床指南
- T-ISC 0041-2024 信息通信行业安全生产事故隐患排查治理机制实施指南
- 失语症的训练
- GB/T 18376.2-2024硬质合金牌号第2部分:凿岩及工程用硬质合金牌号
评论
0/150
提交评论