您的位置 首页 技术

S3C2440之IIS操作MDK

由图可知,有发送器,也有接收器,发送器和接收器都可以作为控制器。谁发出WS和SCK,谁就是控制器。SCK为IIS串行数据的位时钟,WS为声道切…

由图可知,有发送器,也有接纳器,发送器和接纳器都能够作为控制器。谁宣布WS和SCK,谁便是控制器。

SCK为IIS串行数据的位时钟,WS为声道切换时钟,WS的频率等于采样频率fs。SCK频率=WS*每个数据的位数*通道数。

MSB先发送,我们收发关于字长的规则能够不一样,所以终究的长度需求依据实践情况而定。

2440具有64深度,且位长为16bit的FIFO。PCLK进过预分频A和B发生SCLK和LRCK。PCLK和MPLLin一起发生CDCLK,供给音频编码译码器运用。

我们2440的IIS接口仅仅是单纯的传输数据,依从IIS协议罢了,实践运用中,需求将数据转换为模仿音频,或许将外界的音频转换为数字信号给体系运用。

3种形式:DMA形式,一起传输和接纳形式,仅传输和接纳形式。

这儿选用的编码译码器是UDA1314TS。仅为从形式,需求主设备供给时钟,为256fs、384fs、512fs。

UDA1314具有L3线接口与微控制器通讯。L3DATA L3MODE L3CLOCK。具有2种形式,地址形式和数据形式。地址形式经过L3挑选通讯的设备且界说数据传输形式拜访的意图寄存器。数据形式是双向的,输入到UDA1314中编程它的声响处理和体系控制特性和从UDA1314输出供给声响的峰值水平值。

先传低位,再传高位,2440不具备该接口,需求用GPIO模仿运用。


依据上面的实践图来装备硬件。

音频数据所给出的信息:

依据wav格局从数据中读出采样频率。声道数。量化位数。依据这些来装备IIS相关寄存器。

程序:

本例程,PCLK=100MHZ,音频数据的fs=22.05Khz,2通道,16bit。我们音频文件过大,所以放在相似硬盘的nandflash中,且不占用前4k。本文利用了MDK的库函数。

IIS.C文件

#include "S3C2440.h"#include "iis.h"/ÄÄâUDA1314µÄ3Ïß²Ù×÷¬Óë2440ͨÐÅ*//data : Ðè´«ÊäµÄÊý¾Ý//address : ÊǵØÖ·Äʽ»¹ÊÇÊý¾ÝÄʽ/void WriteL3(unsigned char data,unsigned char address) { int i,j; / *µØÖ·ÄʽʱÐò¬ÕÆÎÕ¼¸¸öÒªµã *Êý¾Ý´«ÊäµÄʱºò±Ö¤L3MODEΪµÍ *Êý¾Ý´«Ê俪ʼµÄÐźÅÊDZ֤L3MODEΪµÍL3CLOCKΪ¸ß *Êý¾Ý´«Êä½áÊøµÄÐźÅÊDZ֤L3MODEΪ¸ßL3CLOCKΪ¸ß *Êý¾Ý´«Êä¹ý³ÌÖÐÒ»¸öL3CLOCKµÄÖÜÆÚ´«Ò»¸öÊý¾Ýλ *Êý¾ÝÄʽʱÐò¬ÕÆÎÕ¼¸¸öÒªµã *Êý¾Ý´«ÊäµÄʱºò±Ö¤L3MODEΪµÍ *Êý¾Ý´«Ê俪ʼµÄÐźÅÊDZ֤L3MODEΪ¸ßL3CLOCKΪ¸ß *Êý¾Ý´«Êä½áÊøµÄÐźÅÊDZ֤L3MODEΪ¸ßL3CLOCKΪ¸ß *Êý¾Ý´«Êä¹ý³ÌÖÐÒ»¸öL3CLOCKµÄÖÜÆÚ´«Ò»¸öÊý¾Ýλ / if(1 == address) rGPBDAT = (rGPBDAT & (~(L3D | L3M | L3C))) | L3C; else rGPBDAT = (rGPBDAT & (~(L3D | L3M | L3C))) | (L3C | L3M); for(i = 0;i < 10;i++); for(i = 0;i < 8;i++) { if(data & 0x01) { rGPBDAT &= ~L3C; rGPBDAT |= L3D; for(j = 0;j < 5;j++); rGPBDAT |= L3C; rGPBDAT |= L3D; for(j = 0;j < 5;j++); } else{ rGPBDAT &= ~L3C; rGPBDAT &= ~L3D; for(j = 0;j < 5;j++); rGPBDAT |= L3C; rGPBDAT &= ~L3D; for(j = 0;j < 5;j++); } data >>= 1; } rGPBDAT = (rGPBDAT & (~(L3D | L3M | L3C))) | (L3C | L3M); }  void playsound(unsigned char *buffer, int length){int count,i;char flag;rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C); //L3¿ªÊ¼´«ÊäºL3M=H, L3C=H//ÅäÖÃUDA1341WriteL3(0x14 + 2,1);            //״̬Äʽ(000101xx+10)WriteL3(0x60,0);          //0,1,10, 000,0 : ״̬0,¸´Î»WriteL3(0x14 + 2,1);            //״̬Äʽ (000101xx+10)WriteL3(0x10,0);          //0,0,01, 000,0 : ״̬0, 384fs,IIS,no DC-filteringWriteL3(0x14 + 2,1);     //״̬Äʽ (000101xx+10)WriteL3(0xc1,0);           //1,0,0,0, 0,0,01:״̬1,//Gain of DAC 6 dB,Gain of ADC 0dB,ADC non-inverting,//DAC non-inverting,Single speed playback,ADC-Off DAC-On//ÅäÖÃs3c2440µÄIIS¼Ä´æÆ÷//Ô¤·ÖƵÆ÷Ϊ5¬ËùÒÔCDCLK=PCLK/(5+1)=384fs=384*22.05khz=50Mhz/N+1 ---->	N=5rIISPSR = 5<<5|5;//ÎÞЧDMA¬ÊäÈë¿ÕÏЬԤ·ÖƵÆ÷ÓÐЧ,²¥·ÅÏÖÓеÄÒôƵÊý¾Ý¬ËùÒÔ²»ÐèÒª´ÓUDA1314ÖнÓÊÕÈκÎÊý¾Ý¬ËùÒÔÉèÖÃÊäÈë¿ÕÏÐrIISCON  = (0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1);   //PCLKΪʱÖÓÔ´¬Êä³öÄʽ¬IISÄʽ¬Ã¿¸öÉùµÀ16λ¬CODECLK=384fs¬SCLK=32fsrIISMOD  = (0<<9)|(0<<8)|(2<<6)|(0<<5)|(0<<4)|(1<<3)|(1<<2)|(1<<0);     rIISFCON = (0<<15)|(1<<13);           //Êä³öFIFOÕý³Äʽ¬Êä³öFIFOʹÄÜflag=1;count=0;//¿ªÆôIISrIISCON |= 0x1;while(flag){if((rIISCON & (1<<7))==0)               //¼ì²éÊä³öFIFOÊÇ·ñΪ¿Õ{    //FIFOÖеÄÊý¾ÝΪ16λ¬Éî¶ÈΪ32//µ±Êä³öFIFOΪ¿Õʱ¬Ò»´ÎÐÔÏòFIFOдÈë32¸ö16λÊý¾Ýfor(i=0;i<32;i++){rIISFIFO=(buffer[2*i+count])+(buffer[2*i+1+count]<<8);}                  count+=64;if(count>length)flag=0;                  //ÒôƵÊý¾Ý´«ÊäÍê¬ÔòÍ˳ö}}rIISCON = 0x0;            //¹Ø±ÕIIS}

main.c文件

int main(void){	init_uart0();NF_Init();NF_Read((u8*)0x33000000, (ulong)0x1000, 0x100000);printf("\r\ntest music......\r\n");playsound(music + 44,sizeof(music) - 44);}

scatter文件:

; *
; * Scatter-Loading Description File generated by uVision *
; *

LR_ROM1 0x00000000 0x00100000 { ; load region size_region
ER_ROM1 0x00000000 0x000001000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}

RW_RAM1 0x30000000 0x40000000 { ; RW data
.ANY (+RW +ZI)
}

OTHERS 0x31000000{
uart.o(*)
iis.o(*)
}

HEAP 0x32000800 {
S3C2440A.o(HEAP)
}

STACK 0x32000c00{
S3C2440A.o(STACK)
}

}

LD_ROM2 0x1000
{
MUS%&&&&&% 0x33000000{
*(wav)
}
}

scatter文件中选用了2个加载域,独自把音频数据放到了4k后,运转在0x33000000.

烧写到nandflash中,能够正常运转,播放歌曲。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/264987.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部