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测试
下一篇:Tiny210裸板IIS之WM8960声卡操作

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

推荐阅读

ARM S3C2410 看门狗设置原理及源码

S3C2410 看门狗只要有两个功能1、作为常规时钟,并且可以产生中断2、作为看门狗定时器使用,当时钟减到0时(超时),它将产生一个128个时钟(PLCK)的时钟信号。 看门狗的设置:1、 看门狗的外部时钟源是有PLCK提供的, plck 通过预分频 和 与比例因子 产生适合看门狗的时钟。    t_watchdog = 1/[PLCK/(prescale value +1)/division_factor]    上面就是它的计算公式。2、相关寄存器的介绍  WTCON watchdog控制寄存器  看门狗控制寄存器能够禁止或者允许看门狗
发表于 2018-11-30

基于S3C6410的ARM11学习(五) 核心初始化之关闭看门狗

;S3C6410的看门狗有两个功能:                   作为常规定时器,并且可以产生中断                  作为看门狗定时器,当计数器递减为0,产生复位信号。          下面是看门狗的框图  
发表于 2018-11-30
基于S3C6410的ARM11学习(五) 核心初始化之关闭看门狗

教你如何设置S3C2440时钟

S3C2440 的时钟设置时间:一个嵌入式系统中,晶振就像心脏。必须先确定晶振,设置好系统的时钟, WDT,UART,PWM,TIMER 等模块才能正常工作。和51 系列单片机相比,S3C2440 的时钟电路很复杂。    首先通过引脚OM2,OM3 来选择时钟源。    以TQ2440 开发板为例,OM2,OM3 都接地,外接12M 晶振,主时钟源和USB 时钟源都是外部晶振。    S3C2440 具有2 
发表于 2018-11-26

s3c2416 U-Boot移植笔记

       首先说,今天是一个值得高兴的日子,因为经过四天的努力,终于把U-Boot1.3.4成功移植到了s3c2416上.板子要求是SD卡启动,以下具体的移植步聚:一、SD起动首先要修改/include/configs/smdk2416.h头文件:    在365行左右,按如下修改:    //#define CONFIG_BOOT_NAND    #define CONFIG_BOOT_MOVINAND 
发表于 2018-11-26

S3C2440、S3C6410、S5PV210中断解析

写完S5PV210的按键中断程序后,我才知道"6410只是一个过渡产品"确实是正确的,为什么这样说呢?下面我就给大家进行详细的阐述:中断处理过程等等我就不讲了,一期视频里面已经讲得非常详细了,建议大家在学习本章前,把2440和6410的关于中断的视频再看一次。接下来,我就直接对比他们吧:(1).对于2440:中断向量只出现在start.s开始部分,类容如下:.globl _start_start:    b       reset    ldr    
发表于 2018-10-13

S5PV210(TQ210)学习笔记——Nand配置

  S5PV210的Nand flash跟2440和6410的Nand flash配置差不多,不同的是S5PV210的功能更加强大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210中Nand ECC配置)。整体上来讲,S5PV210的Nand flash配置还是非常简单的。  其实,配置一个模块往往需要以下几个步骤:  (1)根据原理图,理清模块的接线方式,对于Nand flash来说,就是看看Nand flash接到了哪些GPIO上,然后把对应的GPIO配置为Nand功能即可。  (2)阅读S5PV210手册,掌握相关模块控制器的功能、操作方式及寄存器配置。  (3)阅读模块芯片手册,掌握模块的访问控制时序
发表于 2018-10-21
S5PV210(TQ210)学习笔记——Nand配置

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">