ARM9数字音频信号I2S介绍.ppt

上传人:牧羊曲112 文档编号:6501657 上传时间:2023-11-07 格式:PPT 页数:22 大小:316KB
返回 下载 相关 举报
ARM9数字音频信号I2S介绍.ppt_第1页
第1页 / 共22页
ARM9数字音频信号I2S介绍.ppt_第2页
第2页 / 共22页
ARM9数字音频信号I2S介绍.ppt_第3页
第3页 / 共22页
ARM9数字音频信号I2S介绍.ppt_第4页
第4页 / 共22页
ARM9数字音频信号I2S介绍.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《ARM9数字音频信号I2S介绍.ppt》由会员分享,可在线阅读,更多相关《ARM9数字音频信号I2S介绍.ppt(22页珍藏版)》请在三一办公上搜索。

1、第十四章 数字音频信号(I2S)介绍和S3C2410的I2S控制,数字音频信号(I2S)介绍数字音频信号是相对模拟音频信号来说的。我们知道声音的本质是波,人能听到的声音的频率在0.0220kHz之间。数字音频信号是对模拟信号的一种量化(如图14-1),典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是ADC(模拟-数字转换)过程,DAC(数字-模拟转换)过程相反,将连续的数字按采样时候的频率顺序转换成对应的电压。音频ADC/DAC通

2、俗一点来讲就是录音(音频ADC)和放音(音频DAC)。放音是数字音频信号转换成模拟音频信号,以驱动耳机、功放等模拟音响设备,而录音则是要将麦克风等产生的模拟音频信号转换成数字音频信号,并最终转换成计算机可以处理的通用音频文件格式。,I2S总线是近年出现的一种面向多媒体计算机(Multimedia PC)的音频总线,该总线专门用于音频设备之间的数据传输,为数字立体声提供一个连接至标准编码解码器的总线。S3C2410内置一个I2S总线控制器,该控制器实现了到一个外部8/16位立体声音频CODEC IC的接口。支持I2S总线数据格式和MSB-justified数据格式。此控制器包含FIFO,支持DM

3、A传输模式。I2S总线控制器结构如图14-2所示:,图14-1 模拟音频信号数字化,其中:两个5 bit预除器(IPSR)。一个(IPSR_A)用于产生I2S总线接口的主时钟,另外一 个(IPSR_B)用作外部CODEC时钟产生器。十六字节FIFO。在发送数据时数据被写进TXFIFO,在接收数据时数据从RXFIFO中读取。主IISCLK产生器(SCLKG):在主模式,由主时钟产生串行移位时钟。通道产生器和状态寄存器(CHNC):IISCLK和IISLRCK由通道状态寄存器产生并控制。16 bit移位寄存器(SFTR):在发送数据时,并行数据经由SFTR变成串行数据输出,在接收数据时,串行数据由

4、SFTR转变成并行数据。UDA1341是飞利浦公司的一款经济型音频CODEC,用于实现模拟音频信号的采集(音频AD)和数字音频信号的模拟输出(DA),并通过I2S数字音频接口,实现音频信号的数字化处理。,图14-2 I2S总线控制器结构图,14.2 I2S 控制寄存器S3C2410 I2S相关的寄存器包括I2S控制寄存器IISCON,I2S模式寄存器IISMOD和I2S分频寄存器IISPSR。I2S控制寄存器及其各位的定义如表14-1和表14-2所列。,表14-1 I2S控制寄存器,表14-2 I2S控制寄存器IISCON各位的定义,表14-4 I2S模式寄存器IISMOD各位的定义,I2S模

5、式寄存器及其各位的定义如表14-3和表14-4所列。,I2S分频寄存器及其各位的定义如表14-5和表14-6所列。,表14-6 I2S分频寄存器IISPSR各位的定义,14.3 WAV声音格式文件 WAV声音格式文件是Windows环境下的一种常用音频文件格式,它依循着一种称为“资源互换文件格式”(Resources Interchange File Formal)的结构,简称RIFF。RIFF可以看做是一种树状结构,其基本构成单位为“块”(chunk),犹如树状结构中的节点,每个chunk由“辨别码”、“数据大小”及“数据”所组成。WAV为WAVEFORM(波形)的缩写。“RIFE”的格式辨

6、别码为“WAVE”。整个文件由两个chunk所组成:辨别码及“Data”。在“fmt”chunk下包含了一个PCMWAVEFORMAT数据结构,在其之后是原始声音的采样数据,这些数据是可以直接送到IIS总线的数字音频信号。一个典型的WAV格式文件结构如图14-3所示。,它包含8字节RIFF头、4字节数据类型“WAVE”、0 x18字节的“fmt”chunk和4字节数据“data”chunk。因此,WAV文件中从下式中的sizeoff开始的四个字节表示声音数据的大小,dataoff开始的位置为具体的声音数据。sizeoff=0 x8+0 x4+0 x18+0 x4dataoff=0 x8+0 x

7、4+0 x18+0 x8,图14-3 典型的WAV格式文件结构图,14.4 I2S控制程序编写1,系统初始化I2S时钟从系统时钟分频得到,由于音频比系统时钟频率低很多,必须对系统时钟进行适当的降频处理,下面的代码降系统PCLK到33MHx,然后对串口进行初始化。ChangeClockDivider(1,1):/1:2:4ChangeMPllValue(Ox96,0 x5,0 x1);/FCLK=135.428571MHz(PCLK=33.857142MHz)Uart_Init(33857142,115200);I2S用到的端口有G和E,所以使用这些端口前要把这些端口状态保存起来,使用完毕再恢复

8、这些端口原状态。save_ G=rGPGCON;save_ E=rGPECON;save_ PG=rGPGUP;save_ PE=rGPEUP;,I2S可以采用DMA中断方式进行语音录音和播放,因此需要设置DMA中断向量。pISR_DMA2=(unsigned)DMA2_Done;然后获取语音数据及其大小以及采样频率。其中_IIS_WAV_是一个数组,它定义在iis_wave.h文件中,它是从一个完整的wav文件转换来的,因此,从中可以获得采样数据大小以及采样频率等信息,其中采样频率位于fmt chunk的第0 x0c个字节开始的四个字节中。Buf=(unsigned char*)_IIS_W

9、AV_;size=*(Buf)+0 x28)|*(buf)+0 x29)8|*(buf)+0 x2a)16|*(buf)+0 x2b)24;fs=*(Buf)+0 x28)|*(buf)+0 x29)8|*(buf)+0 x2a)16|*(buf)+0 x2b)24;,2,播音程序编写:首先初始化UDA1341,设置为播音模式。Init1341(PLAY);接着进行DMA初始化。/DMA2初始化rDISRC2=(int)(buf+0 x2c);rDISRCC2=(01)+(00);/源地址位于系统总线(AHB),地址递增rDIDST2=(U32)IISFIFO);/IISFIFOrDIDSTC

10、2=(11)+(10);/目的地址位于外设总线(APB),地址固定rDCON2=(131)+(130)+(129)+(128)+(127)+(124)+(123)+(122)+(120)+(size/4);/1010 0000 1001 xxxx xxxx xxxx xxxx xxxx,/Handshake31,Sync,PCLK30,CURR_TC,Interrupt,Request29,Single,Tx28,Single,service/I2SSD026:24,DMA source selected23,Auto-reload22,Half-word21:20,size/219:0 rD

11、MASKTRIG2=(02)+(11)+(00);/No-stop2,DMA2 channel On1,No-sw trigger0然后I2S初始化并启动I2S功能。/IIS Initializeif(fs=44100)/11.2896MHz(256fs)rIISPSR=(25)+2;/Prescaler A,B=2-FCLK 135.4752MHz(1:2:4)else/fs=22050,5.6448MHz(256fs)rIISPSR=(55)+5;/Prescaler A,B=5-FCLK 135.4752MHz(1:2:4),rIISCON=(1start piling/IIS Tx S

12、tartrIISCON|=0 x1;/I2S接口启动rINTMSK/取消DMA2中断屏蔽,等播放完毕后DMA2中断,I2S启动后,将来用DMA中断方式播放语音数据,播放完毕后将引发DMA2中断,在其中断处理函数中将dma2_done设置为非零,因此,在主程序中可以通过判断dma2_done是否为0决定播放是否结束:dma2_done=0;while(dma2_done=0)Delay(1);dma2_done=0;PRINTF(“播放结束n”);语音播放结束,通知I2S,并恢复寄存器设置,关闭中断并将时钟恢复。/IIS Tx StopDelay(10);/for end of H/W TxrI

13、ISCON=0 x0;/I2S Interface stoprDMASKTRIG2=(12);/DMA2 stoprIISFCON=0 x0;sine=0;,rGPGCON=save_G;rGPECON=save_E;rGPGUP=save_PG;rGPEUP=save_PE;rINTMSK|=(BIT_DMA2);ChangeMPllValue(0 xa1,0 x3,0 x1);/FCLK=202.8MHzUart_Init(0,115200);mute=1;,3,录音程序编写:录音程序在初始化等动作上与放音类似,代码如下所示:void Record_ Iis(void)unsigned i

14、nt save_G,save_ E,save_PG,save_PE;Uart_TxEmpty(0):ChangeClockDivider(1,1);/1:2:4 ChangeMP11Value(0 x96,0 x5,0 x1);/FCLK=135428571Hz,PCLK=3.385714MHz Uart_Init(33857142,115200);PRINTF(“-录音测试-n”);PRINTF(1请接上耳机和麦克风n);save_G=rGPGCON;save_E=rGPECON;save_ P=rGPGUP;save_PG=rGPEUP;IIS_portSetting();,录制的声音数据

15、保存与rec_ buf中,录制长度为REC_LEN:/Record Buf initialize,Non-cacheable area=0 x310000000 x33feffff rec_buf=(unsigned short*)0 x31000000;pISR_BMA2=(unsignedDMA2_Rec_Dane;rINTMSK/0 x31000000,rDCON2=(131)+(030)+(129)+(028)+(027)+(124)+(123)+(122)+(120)+REC_LEN;/Handshake,sync PCLK,TC int,single tx,single servi

16、ce,12SSDI,I2S Rx request,/Off-reload,half-word,0 x50000 half word.rDMASKTRIG2=(02)+(11)+0;/No-stop,DMA2 channel on,No-sw trigger,/IIS Tnitialize,Master,Rx,L-ch=low,IIS,l6bit ch,CDCLK=256fs,IISCL,rIISMOD=(0start piling 开始录音:PRI NTF(2开始录音n);/Rx start rIISCON=0 xl;录音完毕将引发DMA2中断,如下代码等待录音结束:,While(!Rec_D

17、one)Delay(1);rINTMSK=BIT_ DMA2;Rec_ Done=0;PRINTF(“录音完毕n”);/IIS Stop Delay(10);/For end of H/W Rx rIISCON=0 x0;/IIS stop rDMASKTRIG2=(12);/DMA2 stop rIISFCON=0 x0;/For FIF0 flush,第十四章习题和练习1,简单回答什么是数字音频的采样频率和采样精度?数字音频的编码有几种?数字音频控制寄存器有几个?各有什么作用?简单说明音频芯片UDA1341的使用。IIS使用系统时钟为什么要降频?IIS使用系统哪几个I/O口?IIS使用DMA中断,如何设置DMA中断向量?如何进行DMA初始化?如何进行IIS初始化和使能IIS?10,仔细阅读例子程序,学会IIS录音和放音程序编写。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号