历史上的今天
返回首页

历史上的今天

今天是:2025年07月04日(星期五)

正在发生

2020年07月04日 | mini2440裸机试炼之IIS——音乐播放器

2020-07-04 来源:eefocus

IIS

信号频率设置


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


s3c2440一共有5个引脚用于IIS:IISDO、IISDI、IISSCLK、IISLRCK和CDCLK。前两个引脚用于数字音频信号的输出和输入,另外三个引脚都与音频信号的频率有关,可见要用好IIS,就要把信号频率设置正确。


IISSCLK为串行时钟,每一个时钟信号传送一位音频信号。因此IISSCLK的频率=声道数×采样频率×采样位数,如采样频率fs为44.1kHz,采样的位数为16位,声道数2个(左、右两个声道),则IISSCLK的频率=32fs=1411.2kHz。


1、Fs   2、采样的位数   3、声道数


使用 wav数据提取器查看

采样频率


右键音乐文件-->属性-->详细信息

PCLK(50,000,000)经过两个预分频器处理后分别得到IISSCLK、IISLRCK和CDCLK,寄存器IISPSR是IIS预分频器寄存器,5~9位是预分频器A,0~4位是预分频器B,一般来说,这两个预分频器的值N相等,即只要知道一个,另一个也就知道,而这里我们是通过CDCLK来计算预分频器B的值N的,即CDCLK=PCLK / (N+1)。


我设置主时钟频率选择384fs,由下表,因fs=44.1kHZ,CDCLK=16.9344。可知N=2。


//预分频器为2,所以CDCLK=PCLK/(2+1)=16.66666kHz(和表中的16.9344越接近越好)

    rIISPSR = 2<<5|2;

IIS配置

//配置IIS接口

    rGPEUP = rGPEUP & ~(0x1f) | 0x1f;         //上拉无效,GPE[4:0] 1 1111

    rGPECON = rGPECON & ~(0x3ff) | 0x2aa;

    

    //配置s3c2440的IIS寄存器

    //预分频器为2,所以CDCLK=PCLK/(2+1)=16.66666kHz

    rIISPSR = 2<<5|2;

    //无效DMA,输入空闲,预分频器有效,开启IIS

    rIISCON  = (0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1);   

    //PCLK为时钟源,输出模式,IIS模式,每个声道16位,CODECLK=384fs,SCLK=32fs

    rIISMOD  = (0<<9)|(0<<8)|(2<<6)|(0<<5)|(0<<4)|(1<<3)|(1<<2)|(1<<0);     

    rIISFCON = (0<<15)|(1<<13);           //输出FIFO正常模式,输出FIFO使能


UDA1341

在我看来,IIS就是实现将音频(WAV)数据按一定频率发送一定大小的数据给FIFO或者DMA,UDA1341就是将这些音频数据转换成电信号通过音频接口发送出去,而关于uda1341的配置是参考来的


//通过io口模拟L3总线写数据  

//mode:1为地址模式,0为数据模式  

//关于地址模式和数据模式以及传输时序注意参考数据手册  

static void write_UA1341(U8 data, U8 address)  

{  

    int i,j;  

    if(address == 1)  {  

        rGPBDAT = rGPBDAT&(~(L3D | L3M |L3C)) |L3C;  //地址模式,根据手册L3M为LOW,L3C为high  

    }  else {  

       rGPBDAT = rGPBDAT & (~(L3D |L3M |L3C)) |(L3M|L3C);   //数据模式 L3M为高  

    }  

    Delay(1);  

    //传输数据  

   for(i=0;i<8;i++)    

       {

              if(data & 0x1)                      // H

              {

                     rGPBDAT &= ~L3C;            //L3C=L

                     rGPBDAT |= L3D;                //L3D=H            

                     for(j=0;j<5;j++)

;                    //等待一段时间

                     rGPBDAT |= L3C;                //L3C=H

                     rGPBDAT |= L3D;                //L3D=H

                     for(j=0;j<5;j++)

;                    //等待一段时间

               }

              else                       // L

              {

                     rGPBDAT &= ~L3C;            //L3C=L

                     rGPBDAT &= ~L3D;            //L3D=L

                     for(j=0;j<5;j++)

;                    //等待一段时间

                     rGPBDAT |= L3C;                //L3C=H

                     rGPBDAT &= ~L3D;            //L3D=L

                     for(j=0;j<5;j++)

;                    //等待一段时间          

              }

              data >>= 1;

        }

    rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M);          //L3M=H,L3C=H  

UDA1341初始化

//UDA1341初始化

    //配置L3接口总线,GPB2:L3MODE, GPB3:L3DATA, GPB4:L3CLOCK

    rGPBCON = 0x015550;               //输出

    rGPBUP  = 0x7ff;               //上拉无效

    rGPBDAT = 0x1e4;

    

    rGPBDAT = rGPBDAT & (~(L3M |L3C |L3D)) |(L3M|L3C);   //将L3CLOCK和L3MODE置高,准备开始传输  

    ////根据UDA1341TS数据手册14页中的操作顺序,首先在地址模式下,  

    //选择操作地址000101xx +10(STATUS)=0X16  

    write_UA1341(0x16,1) ;    

    write_UA1341(0x60,0); // 0,1 ,10,000,0  复位  

      

    write_UA1341(0x16,1) ;  

    write_UA1341(0x10,0);  //0,0,01, 000,0 : 状态0, 384fs,IIS,no DC-filtering  

      

    write_UA1341(0x16,1) ;  

    write_UA1341(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 


界面素材

                  


    

  

WAV音频文件的制作

1、网上下载无损音乐(我下载了WAV格式和APE格式的)


2、打开格式工厂→音频→WAV→添加文件→截取片段(无损音乐太大了,需要截取一小部分,20秒一首就可以了)→确定→输出配置(如下图)→确定→点击开始。

3、打开截取WAV文件夹


4、使用DataToHex将WAV文件下的WAV转换成音频数据数组文件,修改数组文件名Array[],


5、  将wav音频数据文件改为c文件,请不要改为h,不然debug要好久。


6、  制作完成!


主要逻辑块

buffer=music1;              //初始化buffer指向music1音乐数组地址

    

    while(1){

        if(flag==1){ rIISCON |= 0x1;  //如果点击播放(flag==1)  开启IIS  song_num1初值为1  播放第一首

    

         //处理点击播放时音乐图片的显示(点击播放时 flag1=1)

        if(flag1==1 && song_num==1 ){flag1=0, Pait_Bmp( 70, 70, 100, 100, music1_bmp);}

        if(flag1==1 && song_num==2 ){flag1=0, Pait_Bmp( 70, 70, 100, 100, music2_bmp);}

        if(flag1==1 && song_num==3 ){flag1=0, Pait_Bmp( 70, 70, 100, 100, music3_bmp);}

         

       // 音乐标志song_num1不为零时(歌曲播放完song_num1赋值或者通过键值(上一首/下一首)给song_num1赋值) 

       // buffer音乐播放地址赋初值  length音乐长度重新赋值 并显示音乐图片  下一FIFO字节位置count初始化  song_num1归零

        if(song_num1==1) { buffer=music1; length=3704572; count=0; Pait_Bmp( 70, 70, 100, 100, music1_bmp); song_num1=0;}

        if(song_num1==2) { buffer=music2; length=3704552; count=0; Pait_Bmp( 70, 70, 100, 100, music2_bmp); song_num1=0;}

        if(song_num1==3) { buffer=music3; length=5644880; count=0; Pait_Bmp( 70, 70, 100, 100, music3_bmp); song_num1=0;}

        

        if((rIISCON & (1<<7))==0)               //检查输出FIFO是否为空

            {    //FIFO中的数据为16位,深度为32

            //当输出FIFO为空时,一次性向FIFO写入32个16位数据

                for(i=0;i<32;i++){

                //rIISFIFO=(buffer[i+count]);

                rIISFIFO=(buffer[2*i+count])+(buffer[2*i+1+count]<<8); //  一次循环向FIFO存储16位数据于FIFO  

  }                           

                                                    

                count+=64;                                                

                                              //  64为32次循环,每次循环指向两个不同字节的字节总和

       

        //音乐播放完成后  音乐标志song_num1指向下一首歌

        if(count>length){   

            song_num2=song_num2+1; 

            if(song_num2==4){song_num2=1;} 

            song_num1=song_num2;

推荐阅读

史海拾趣

General Magnetics Inc公司的发展小趣事
定期对电子变压器进行维护检查,如清理灰尘、检查连接线路等,以确保其长期稳定运行。
EMC [ELAN Microelectronics Corp]公司的发展小趣事

义隆电子一直注重人才培养和团队建设。公司积极引进国内外各知名学府的优秀人才,并提供完善的在职培训和优厚的福利待遇。同时,公司还建立了高效的团队协作机制,鼓励员工之间的交流和合作。这种注重人才培养和团队建设的策略使得义隆电子能够保持持续的创新能力和市场竞争力。

Dongguan Jingyue Electronics Co Ltd公司的发展小趣事

随着公司业务的不断扩大,Dongguan Jingyue Electronics Co Ltd面临着越来越复杂的供应链管理问题。为了降低成本、提高效率,公司决定对供应链进行优化。通过引入先进的供应链管理软件和系统,加强与供应商和物流公司的合作,公司成功实现了供应链的数字化和智能化管理,提高了整体运营效率。

Fenwal Controls公司的发展小趣事

在电子行业快速发展的同时,Fenwal Controls也面临着诸多挑战和危机。例如,随着环保法规的日益严格,公司需要不断升级产品以满足环保要求。此外,原材料价格的波动和劳动力成本的上升也给公司带来了不小的压力。然而,Fenwal Controls凭借其强大的研发能力和敏锐的市场洞察力,成功应对了这些挑战和危机。公司通过优化生产流程、提高生产效率、降低生产成本等措施,有效缓解了外部压力,保持了公司的稳定发展。

Connect-Tech Products Corp公司的发展小趣事

随着国内市场的不断饱和,Connect-Tech Products Corp公司开始寻求海外市场的发展机会。公司通过参加国际电子展、建立海外销售网络等方式,积极开拓国际市场。同时,公司还与国际知名企业展开合作,共同研发新产品,进一步提升了公司的技术水平和市场影响力。这些举措不仅为公司带来了更广阔的市场空间,也为其未来的发展奠定了坚实基础。

FTDI [Future Technology Devices International Ltd.]公司的发展小趣事

随着市场需求的变化,FTDI并未满足于初期的成就,而是积极拓展产品线。他们推出了如MM232R和USB-COM232-PLUS1等接口产品,这些产品在连接性和兼容性上展现了公司强大的技术实力和创新精神。同时,FTDI还涉足USB和其他通信协议的转换领域,满足了多样化的市场需求,进一步巩固了其在电子行业中的地位。

问答坊 | AI 解惑

单片机的ISP在线编程设计

引 言 随着电子技术的日益发展,芯片的规模越来越大,封装日趋小型化,相应地对系统板级调试的困难也在加大。在传统的调试方式中,频繁的调试和更换程序需要频繁地插拔芯片,开发效率极低。AT89S系列单片机提供的ISP在线编程技术彻底地改变了传统 ...…

查看全部问答>

FPGA访问DSP,出现的问题

FPGA 程序访问DSP的总线时,不稳定。每次FPGA程序改动或程序编译时都可能导致FPGA访问DSP总线失败,大家怎样处理FPGA访问DSP总线问题的?…

查看全部问答>

再晒 模拟现场应用

这个图就是模拟现场实际应用的了,只不过现场要把这些设备统一安装到一个控制柜内而已。还算整洁吧!咔咔!…

查看全部问答>

哪位大吓知道 生产3g CDMA EVDO 有哪些厂家?

哪位大吓知道 生产3g CDMA EVDO 有哪些厂家?…

查看全部问答>

前辈们给wince初学者点建议吧

各位前辈高人,小弟我是半路出家的,想学习WINCE,各位给推荐几本入门书吧 在此先谢过了!!…

查看全部问答>

power pcb 的问题

在power pcb中有类似protel99se 中IDC那样的封装形式吗?请指教!…

查看全部问答>

FLASH会被自动擦除, 有人遇到过类似的问题么?

我使用的是ADuc7020这款MCU, 发现一个问题, 当MCU被频繁地上电/掉电的话, FLASH中的某一页会被自动擦除, 而其他页并无影响. 我在程序中看不出FLASH是被指令擦除的, 在勘误表中也没有找到有这个硬件BUG. 请问各位, 一般来说, 什么原因会导致FLASH ...…

查看全部问答>

求助:WinCE gwes.exe data abort

系统平台: S3c2440+sm501 当我把501的驱动添加到系统后,下载nk.nb0到目标板,通过serial KITL反馈debug信息,如下:    2451 PID:ade663f2 TID:adf9a8be Data Abort: Thread=8de66768 Proc=8c24c580 \'gwes.exe\'    2459 ...…

查看全部问答>

帮忙完成一个简单的需求分析

    我需要开发一个支持XML的编辑器,需要实现:数据保存为XML格式 能进行基本的数据操作(添加,删除,查看,修改),能让PDA和pc机保持数据同步,开发语言为c#.net,操作系统为wince5.0.现在是需要向开发板厂家提要求,我不知道开发这样的小软件,在 ...…

查看全部问答>

国内最全的声表面波传感器资料

声表面波(简写SAW)是英国物理学家端利在19世纪80年代研究地震波过程中发现的一种能量集中于地表面传播的声波。 近几十年来,人们对SAW基本性质的认识越来越深入,特别是在1965年,美国的R.M.White健棚F.M.Voltmov发明了能在压电材料表面激励SA ...…

查看全部问答>