datasheet

S3C2440和S5PV210的声卡对比

2018-10-12来源: eefocus 关键字:S3C2440  S5PV210  声卡对比

IIS(Inter-IC Sound)由飞利浦公司开发,是一种常用的音频设备接口,主要用于CD、MD、MP3等设备。

1.播放音频的过程:

                   IIS接口发送声音

  DDR——>S5PV210——————————>解码芯片WM8960(DAC的过程)——>耳机

2.录音的过程:

                                           IIS接收声音数据

  MIC——>编码芯片WM8960(ADC的过程)———————————>S5PV210——>DDR

3.IIS接口(共有5个引脚用于IIS):

  LRCK----------------------------------左右声道控制信号

  SCLK----------------------------------串行时钟

  SDI-------------------------------------数据输入

  SDO------------------------------------数据输出

  CDCLK--------------------------------为编解码芯片提供系统同步时钟

从上面可以看出,有三个引脚都与音频信号的频率有关,可见要用好IIS,就要把信号频率设置正确。 SCLK为串行时钟(也叫位时钟BCLK ),每一个时钟信号传送一位音频信号,因此SCLK的频率=声道数×采样频率×采样位数,如采样频率fs为44.1kHz,采样的位数为16位,声道数2个(左、右两个声道),则SCLK的频率=32fs=1411.2kHz。

LRCK为帧时钟,用于切换左、右声道,如LRCK为高电平表示正在传输的是左声道数据,为低电平表示正在传输的是右声道数据,因此LRCK的频率应该正好等于采样频率。

CDCLK为系统时钟,由于IIS只负责数字音频信号的传输,而要真正实现音频信号的放、录,还需要额外的处理芯片(以UDA1341,WM8960为例),CDCLK为该芯片提供系统同步时钟,即编解码时钟,主要用于音频的A/D、D/A采样时的采样时钟,一般CDCLK为256fs或384fs。

通过以上分析可以发现,采样频率fs对频率的设置至关重要。而fs不是任意设置的,一般基于不同的应用场合和听觉效果,而设置不同的几个固定的值,如8kHz、16kHz、22.05kHz、44.1kHz、48kHz、96kHz等。为了使系统得到以fs为基数的各类时钟信号,就要精心计算系统时钟(CDCLK)。

以下将分别讲述如何设置S3C2440和S5PV210向外提供的系统时钟CDCLK和IIS的时钟源:

(1).s3c2440用于IIS的时钟源有PCLK和MPLLin,以PCLK作为IIS的时钟源为例。

PCLK经过两个预分频器处理后分别得到SCLK、LRCK和CDCLK(预分频器A得到SCLK、LRCK,预分频器B得到CDCLK)。寄存器IISPSR是IIS预分频器寄存器,5~9位是预分频器A,0~4位是预分频器B,一般来说,这两个预分频器的值N相等,即只要知道一个,另一个也就知道。以CDCLK来计算预分频器B的值N为例,即CDCLK=PCLK / (N+1),PCLK与FCLK有一定的比例关系,而FCLK又是由输入频率Fin得到。在这里,我们为了简化计算,不改变PCLK与FCLK的比例关系(即维持在启动代码中定义的1:8的关系),那么由Fin而得到CDCLK一共涉及到四个参数:MDIV、PDIV、SDIV和前面公式中的N,涉及到的寄存器有MPLLCON和IISPSR。因此要得到这四个参数值,就需要一点耐心地计算,原则是误差最小,其中需要注意的是,计算的结果(包括中间过程的结果)不要溢出,即不要超过32位。例如Fin为12MHz,我们设置采样频率fs=44.1kHz,而CDCLK=384fs=16.9344MHz,那么经过计算,最终得到N=3,MDIV=150,PDIV=5,SDIV=0,即时钟相关的代码如下:

IISPSR = (3<<5) | 3;,MPLLCON = (150<<12) | (5<<4) | 0;

(2).S5PV210用于IIS的时钟源有Audio bus clock和I2SCLK,以I2SCLK作为IIS的时钟源为例。

关于时钟的设置,我在前面的日志中讲过一句非常重要的话,就是一定要找到对应时钟的图,这样才能够知道时钟源之间的来龙去脉,否则完全不知道设置什么(关系太多太复杂),该图如下:



注:上图在S5PV210的芯片手册的1864页能够找到!!

我们假设设置采样频率fs=44.1kHz(事实我们要播放的wav文件的采样频率确实是这么多,可以从它的头部信息中得到),CDCLK=256fs,而且IISPSR的预分频值N为5(事实我们后面初始化WM8960时也是这样设置的)。

那么,I2SCLK = (5 + 1) * CDCLK = 6 * 256 * 44.1kHz = 67.7Mhz

从上图可以看出,I2SCLK是由MUXi2sa_OUT经过分频系数分频得到的,为了便于计算,我们就将该分频系数设置为(0 + 1)好了,而MUXi2sa_OUT的来源,我们选择为Main Clk(即CLKMUX_ASS_out),而CLKMUX_ASS_out的时钟来源,我们就选为FOUT_EPLL好了。

经过一系列的选择,最终得出要求是:

FOUT_EPLL = 67.7Mhz

那么,FOUT_EPLL又由谁来设置呢?

从S5PV210的芯片手册的361页的图中可以看出,FOUT_EPLL就是EPLL锁相环的输出,因此我们只需要设置该锁相环,让它输出67.7Mhz就行了,就算公式如下:

FOUT = (MDIV + K / 65536) * FIN / (PDIV * 2的SDIV次方)

最终得出IIS的时钟的初始化相关代码如下:

// 设置锁相环

// SDIV [2:0]  : SDIV = 0x3

// PDIV [13:8] : PDIV = 0x3

// MDIV [24:16]: MDIV = 0x43

// LOCKED  [29]: 1 = 使能锁

// ENABLE  [31]: 1 = 使能锁相环

// Fout = (0x43+0.7)*24M / (3 * 2^3) = 67.7*24M/24 = 67.7Mhz

EPLL_CON0 = 0xa8430303;  // MPLL_FOUT = 67.7Mhz  

EPLL_CON1 = 0xbcee;          // K = 0xbcee  

// 时钟源的设置

// APLL_SEL[0] :1 = FOUTAPLL

// MPLL_SEL[4] :1 = FOUTMPLL

// EPLL_SEL[8] :1 = FOUTEPLL

// VPLL_SEL[12]:1 = FOUTVPLL

// MUX_MSYS_SEL[16]:0 = SCLKAPLL

// MUX_DSYS_SEL[20]:0 = SCLKMPLL

// MUX_PSYS_SEL[24]:0 = SCLKMPLL

// ONENAND_SEL [28]:1 = HCLK_DSYS

CLK_SRC0 = 0x10001111;

// 时钟源的进一步设置(AUDIO SUBSYSTEMCLK SRC)

// bit[3:2]: 00 = MUXi2s_a_out来源于Main CLK

// bit[0]  : 1 = Main CLK来源于FOUT_EPLL

CLK_CON = 0x1;

// 由于AUDIO SUBSYSTEMCLK DIV寄存器使用的是默认值,故分频系数为1  

注意:

Fs是指采样频率,即每秒钟取样数,该参数的值在WAV音频文件中是查得到的,而且该参数在时钟的设置中至关重要,时钟的设置,也是至关重要的,直接关系到声音是否能够播放成功的问题!!

 

以下将对比S3C2440和S5PV210的IIS相关寄存器:

(1).S3C2440有关IIS的寄存器除了IISPSR外,还包括IIS控制寄存器IISCON,主要用于控制数据传输的方式、预分频器和IIS接口是否开启;IIS模式寄存器IISMOD,主要用于设置IIS的时钟源、主从方式、接收发送方式、串行接口方式、每个声道串行数据位数和各种频率值;IIS的FIFO接口寄存器IISFCON用于设置和判断数据传输的FIFO状态;而寄存器IISFIFO则用于音频数据的传输。

(2).S5PV210有关IIS的寄存器除了IISPSR外,还包括IIS控制寄存器IISCON,主要用于控制数据传输的方式(是否使用DMA)、IIS接口是否开启;IIS模式寄存器IISMOD,主要用于设置IIS的时钟源、主从方式、串行接口方式、设置和判断数据传输的FIFO状态和每个声道串行数据位数和各种频率值;IIS的IISTXD寄存器用于发送数据;而IISRXD寄存器则用于接收数据。

从以上两点可以看出,S3C2440和S5PV210的IIS大同小异。

所以,最终的IIS初始化函数如下:(包括时钟的初始化)

void IIS_init(void)

{

// 设置对应GPIO用于IIS  

GPICON = 0x22222222;

 

// 设置锁相环

// SDIV [2:0]  : SDIV = 0x3

// PDIV [13:8] : PDIV = 0x3

// MDIV [24:16]: MDIV = 0x43

// LOCKED  [29]: 1 = 使能锁

// ENABLE  [31]: 1 = 使能锁相环

// Fout = (0x43+0.7)*24M / (3 * 2^3) = 67.7*24M/24 = 67.7Mhz

EPLL_CON0 = 0xa8430303; // MPLL_FOUT = 67.7Mhz   

EPLL_CON1 = 0xbcee;          // K = 0xbcee  

 

// 时钟源的设置

// APLL_SEL[0] :1 = FOUTAPLL

// MPLL_SEL[4] :1 = FOUTMPLL

// EPLL_SEL[8] :1 = FOUTEPLL

// VPLL_SEL[12]:1 = FOUTVPLL

// MUX_MSYS_SEL[16]:0 = SCLKAPLL

// MUX_DSYS_SEL[20]:0 = SCLKMPLL

// MUX_PSYS_SEL[24]:0 = SCLKMPLL

// ONENAND_SEL [28]:1 = HCLK_DSYS

CLK_SRC0 = 0x10001111;

// 时钟源的进一步设置(AUDIO SUBSYSTEMCLK SRC)

// bit[3:2]: 00 = MUXi2s_a_out来源于Main CLK

// bit[0]  : 1 = Main CLK来源于FOUT_EPLL

CLK_CON = 0x1;

// 由于AUDIO SUBSYSTEMCLK DIV寄存器使用的是默认值,故分频系数为1  

// IISCDCLK  11.289Mhz = 44.1K * 256fs 

// IISSCLK    1.4112Mhz = 44.1K * 32fs

// IISLRCLK   44.1Khz

// 预分频值

// bit[13:8] : N = 5

// bit[15]   : 使能预分频

IISPSR = 1<<15 | 5<<8;

// 设置IIS控制器

// bit[0]: 1 = 使能IIS

IISCON |= 1<<0 | (unsigned)1<<31;

// 设置各个时钟输出

// bit[2:1]:IISSCLK(位时钟)  44.1K * 32fs = 1.4112Mhz

// bit[3:4]:IISCDCLK(系统时钟) 44.1K * 256fs = 11.289Mhz

// bit[9:8]:10 = 既可以发送又可以接收

// bit[10] :0 = PCLK is internal source clock for IIS 

IISMOD = 1<<9 | 0<<8 | 1<<10;

}

以下将对比UDA1341和WM8960的控制方式:

我们从原理图上可以看出:

(1).UDA1341:

s3c2440与UDA1341之间除了我们前面介绍过的IIS接口相连接外,还有一个称之为L3总线的连接,用于s3c2440配置UDA1341内部的寄存器。由于s3c2440不具备L3总线接口,因此我们是用三个通用IO口来模拟L3,从而实现L3总线的传输。UDA1341有两种模式:地址模式和数据传输模式。地址模式表示传输的是地址信息,它的高6位永远是000101,低

[1] [2] [3]

关键字:S3C2440  S5PV210  声卡对比

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2018/ic-news101241709.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:Tiny210驱动之LED测试
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

S3C2440裸板WM8976声卡驱动实现

*)0x31000000;  //data chunk size  unsigned int size = 0;  //sampling frequency  unsigned int fs = 0;  //-------------------------------------------------------------  //  S3C2440A IIS Configuration  //  GPB4 = L3CLOCK, GPB3 = L3DATA,  GPB2 = L3MODE  //  GPE0
发表于 2018-07-24

s3c2440中断程序(烧录到NORFlash,运行在SDRAM中)

为IRQ中断模式,在此模式下设置中断指针为0x33500000(这个数可以更改,首先,堆栈是向低地址生长的,其次,SDRAM的截止地址为0x34000000,要留有一部分给C程序,所以这里设置为0x33500000);然后将系统再设为管理模式,设置该模式下的堆栈指针为0x34000000.然后返回即可。上面的程序是初始化内存(主要是SDRAM)。初始化内存即配置控制内存的寄存器,需要配置的一共是13个,它们的地址是连贯的,初始地址为0x48000000。s3c2440中一共有八个bank(bank0~bank7)每个bank128M(bank6和bank7的大小及bank7的起始地址可以自由配置,这样使得SDRAM地址的连贯得到保证
发表于 2018-07-23

S3C2440 NAND Flash的使用

的程序也是按照16位的,并且还多出了A28,暂且在此认为是硬件的问题8、NAND flash 的操作步骤8.1、NFCONF寄存器的配置:主要是关于时序的问题,板子上集成的nand flash 模块可以发出特定的时序,只需要简单的配置一下时间, 具体可以参照NAND flash 对应的技术手册。 8.2、NFCONT寄存器的配置:主要关注的是使能ECC,关闭片选,类似于LCD1602的配置方式,其中有些位是由外部引脚的状态所决定的, 具体可以参照S3C2440技术手册的NAND flash控制章节。 8.3、复位:复位指令0xFF,需要先片选,等待操作成功,取消片选 指令的下达,有关
发表于 2018-07-23

Jlink 在S3C2440上的使用

.#########################################################################                                      配置J-Link为mini2440烧写bootloader         
发表于 2018-07-23
Jlink 在S3C2440上的使用

arm9(s3c2440)jlink烧写uboot

配置进行配置如下:我们开始用Jlink烧写Uboot了:双击打开J- FlashARM V4.08 在出现的下面的窗口点file ->open project打开S3C2440.jflash(配置文件下载地址:http://download.csdn.net/detail/tianhen791/4621376)点Target->connect连接JLINK。最后点target->program或者F5烧写uboot.     文档介绍http://download.csdn.net/detail/tianhen791/4621374其中遇到的问题:1.只有连上jlink才能识别
发表于 2018-07-23
arm9(s3c2440)jlink烧写uboot

S3C2440开发板文件传输

看着教程里的各种软件,真是晕的不行,好好整理。一、空白开发板第一步---写bootloader类似于给电脑装系统,不装系统就是一块集成电路板,鸟用没有。bootloader就等价于bios,常用的bootloader有U-BOOT、supervivi(改进的vivi,加了一个usb下载功能而已)。工具是真的多,各种开发板制作商家都可能开发出自己的一套下载工具,五花八门,想想刚开始接触的时候,试工具都试了几天,想想也是心累,区分一下各种名词:1、JTAG  开发板在没有写任何系统时,里面啥驱动都没有,芯片是啥都不会认的,usb、串口接了也不会有反应。还好有JTAG协议,原本是用来做芯片测试的,这里拿来写引导程序。2、JLIN
发表于 2018-07-22

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved