历史上的今天
返回首页

历史上的今天

今天是:2025年03月10日(星期一)

正在发生

2021年03月10日 | 基于嵌入式微处理器S3C44B0X音频文件播放的实现

2021-03-10 来源:eefocus

S3C44B0X是三星公司针对嵌入式系统推出高性价比微处理器,它是基于ARM7TDMI内核的16/32位RISC处理器,工作主频为66MHz.为了降低成本和节约产品开发周期,S3C44BO0X提供了丰富的内置部件,包括:内部SRAM,LCD控制器,8通道10位ADC,IIC总线接口,IIS总线接口等.其中S3C44B0X IIS接口能用来连接一个外部8/16位立体声声音解码器.CS4334是CIRRUS公司推出的系列音频解码芯片.文献[1,2,3]中对它们的工作原理和应用有详细的论述.


本文详细研究了S3C44B0X IIS总线接口和CS4334的连接,搭建了以二者为基础的嵌入式工作平台.在该平台上现WAVE音频文件的播放,并给出了测试程序.


1IIS总线结构

S3C44B0X IIS(Inter-IC Sound)接口对FIFO存取提供DMA传输模式代替中断模式,它可以同时发送数据和接收数据也可以只发或只收.


如图1所示,总线接口FIFO控制包括总线接口、内部寄存器和状态机,控制总线接口逻辑和FIFO访问;3位的双分频器包括一个作为IIS总线主设备时钟发生器,另外一个作为外部编码器的时钟发生器;主设备串行比特时钟发生器(主设备模式),将从主设备时钟中分频得到串行比特数时钟;声道发生器和状态器生成和控制IISCLK和IISLRCK,并且控制数据的接收和发送;16位移位寄存器在发送数据时将数据由并变串,接收数据时做相反的动作.


IIS总线可以使用正常传输模式,DMA传输模式和发送接收同时模式三种传输方式.


2 音频数模转换芯片CS4334

CS4334是CIRRUS半导体公司生产的音频数模转换芯片,具有接口简单、性能稳定以及便于操作等特点,在嵌入式系统中有着广泛的应用. 另外,由于WAVE数字音频经CS4334转换成模拟音频后信号较微弱,需要增加一个音频功率放大器.本文选用的是PHILIPS公司的TDA7050低电平单声道/立体声功率放大器.



3S3C44B0X和CS4334以及TDA7050的连接


S3C44B0X IIS总线接口和CS4334模块都具有很强的通用性,连接很容易实现.连接方法为:将S3C44B0X的端口PF6(IISDO)、 PF8(IISCLK)、PF5(IISLRCK)、PE8(END/AN)分别与CS4334的管脚1、2、3、4连接.CS4334与TDA7050 连接时,只需将CS4334的输出连接到TDA7050的相应输入管脚即可.具体连接方法如图2所示.


4 程序设计

程序设计假设S3C44B0X已经成功启动,此处着重介绍播放WAVE文件主函数:


Playwave().IIS_Init( )是初始化IIS接口函数,BDMA0_Done( )是BDMA0中断处理函数.分别介绍如下.


4.1 IIS接口初始化

代码如下:


void IIS_Init(void){


rPCONF = 0x24900a; //设置I/O端口PF,使端口PF5~8工作在IIS状态


Init_4334(); //初始化CS4334芯片}


4.2 播放WAVE音频文件函数

Playwave()函数运行前会提示先将wave音频文件下载到指定RAM区域,函数计算出文件大小并提示播放与否,最后返回.


void Playwave (U32 addr, U32 size){


unsigned char *pWave;


U32 samplesize; //WAVE文件长度


U32 save_PLLCON;


save_PLLCON = rPLLCON;


rPLLCON= x69<<12)|(0x17<<4)|0;


SerialChgBaud(115200);


pISR_BDMA0=(unsigned)BDMA0_Done;


rINTMSK=~(BIT_GLOBAL|BIT_BDMA0);//中断设置


pWave=(unsigned char *)addr;//wave文件数据地址


pWave+=0x28; //指向wav采样长度


samplesize=*(pWave+0) | *(pWave+1)<<8 | *(pWave+2)<<16 | *(pWave+3)<<24;


pWave+=4; //指向wav数据


samplesize=(samplesize>>1)<<1;


printf(nsample start:0x%x,pWave);


printf(nsamplesize:0x%x,samplesize);


Init_4334();


/****** IIS 初始化 ******/


rIISCON=0x22; //使能 DMA,接收空闲,使能分频


rIISMOD=0x89; //主模式,IIS格式,16位数据,256fs,32 fs


rIISPSR=0x33; //分频因子


rIISFCON=0xa00;//接收、发送DMA模式,使能FIFO


/****** BDMA0 初始化******/


rBDISRC0=(1<<30)+(1<<28)+(U32)pWave; //DMA源;16位数据,增长方式


rBDIDES0=(1<<30)+(3<<28)+((U32)rIISFIF); //DMA目的:M2IO,内部模块


rBDICNT0=(1<<30)+(1<<26)+(3<<22)+(1<<21)+(0<<20)+samplesize;


rBDICNT0 |= (1<<20);//设置DMA请求源为IIS,中断方式,手动重载,使能DMA


rBDCON0 = 0x0<<2;


printf(nNow play the wave file ...);


printf(nPush any key to exit!!!);


rIISCON |=0x1;


while(!getkey()); //按下任意键返回}


5 小结


采用S3C44B0X内置IIS总线和音频数模转换芯片CS4334,本文搭建了以二者为核心的工作平台,并详细讨论了基于此平台实现播放WAVE音频文件的方法.由于S3C44B0X及CS4334模块具有较强的通用性,因此本文给出的实现方法及程序具有使用简单、运行稳定、便于移植等特点.


推荐阅读

史海拾趣

浙江东亚电子(DongYa)公司的发展小趣事

随着公司的发展,浙江东亚电子不断拓展其产业布局。除了传统的电力电子元件、分流器等产品外,公司还涉足新能源汽车、充电桩、变频器和储能等领域。特别是在新能源汽车和充电桩领域,公司紧跟国家“新基建”发展战略,推出了一系列具有竞争力的产品,为公司带来了新的增长点。

DIALIGHT公司的发展小趣事

DIALIGHT公司一直专注于工业LED照明领域的发展。他们深入了解工业空间照明的需求和挑战,设计了一系列专为工业应用而定制的LED照明产品。这些产品不仅易于安装和维护,而且能在恶劣的环境下持续使用。此外,DIALIGHT还提供集成系统解决方案,帮助客户降低能源成本、维护成本和碳足迹,同时提高设施的安全性和生产力。通过不断创新和优质服务,DIALIGHT在工业LED照明领域赢得了广泛的认可和信赖。

DURACELL公司的发展小趣事

为了进一步扩大市场份额和品牌影响力,DURACELL公司积极寻求品牌授权合作。通过在全球范围内与相关企业进行合作开发,DURACELL公司成功将品牌延伸到更多领域和地区。这种合作模式不仅为DURACELL公司带来了更多的市场机会,也推动了整个电池行业的发展。

迈翔科技(COILMX)公司的发展小趣事

进入21世纪后,迈翔科技面临了来自国内外同行的激烈竞争。为了保持竞争力,公司投入大量资源进行技术研发和创新。通过不懈努力,公司成功开发出了一系列高性能的贴片功率电感和大电流电感,这些产品凭借卓越的性能和稳定的品质,迅速获得了市场的认可。

Defender Security公司的发展小趣事

随着勒索软件的日益猖獗,Defender Security公司迅速调整战略,成立了专门的研究小组来对抗这种威胁。他们深入分析了勒索软件的传播方式和攻击手段,开发出了高效的检测和防御系统。通过不断的技术创新和优化,Defender Security成功帮助多家企业抵御了勒索软件的攻击,赢得了市场的广泛认可。

DBM REFLEX公司的发展小趣事

随着公司实力的不断增强,DBM REFLEX开始积极拓展全球市场。通过与全球知名企业的合作,公司成功将产品推向了世界各地。同时,DBM REFLEX还积极寻求与产业链上下游企业的合作,建立了稳定的供应链和销售渠道。这些合作伙伴的加入,不仅为公司提供了更多的市场机会,还进一步提升了公司的品牌影响力。

问答坊 | AI 解惑

PCB经验浅谈

一些PCB设计的浅显经验,大家共享一下哈!!…

查看全部问答>

开关电源设计第二版张志强般

开关电源设计第二版张志强版,自己收藏的呵呵…

查看全部问答>

关于检测CPLD外部信号上升沿的问题

请哪位大虾指教一下关于如何用CPLD检测外部信号的上升沿(程序最好是用VHDL) 谢谢了!…

查看全部问答>

属性页如何去掉system menu

可能问的不是很准确。但是想不到还应该怎么说了。 今天想做一个属性页。做完后发现自己新建的属性页上面都带“OK”和“关闭”的system menu,然后就不知道应该怎么去除了。在对应的对话框里选掉title bar只能让属性页上名称不见了,对于那个“OK” ...…

查看全部问答>

问个evc连接库的问题

有个lib库和一个头文件,在vc下编译连接过没问题的 在evc下,用emulator模式编译和连接也很正常 但是改用arm4模式来编译就连接出错,好像识别不了lib库的样子。以下是出错信息: ChildWindow.obj : error LNK2019: unresolved external symbol ...…

查看全部问答>

今天再次蛋疼了。。。纠结啊

以前都是用PICKIT3,在线编程。因为最近要烧裸片,就拿了个老古董出来,润飞的编程器。结果烧程序的时候总是提示:插座中芯片偏离正常位置,请往下移。(事实是我插得非常之正,精确无比) 有大虾遇到过类似情况吗?…

查看全部问答>

大家帮我看下为什么CAN2口不能够接收中断

我用STM32F105做can通讯,两个CAN口都要用到。CAN1用FIFO0,CAN2用FIFO1。节收到数据后进入中断处理,但我只能进入CAN1接收中断,CAN2却不能进入接收中断。大家帮我看下是哪里初始化错了。 NVIC初始化程序 void NVIC_Configuration(void) { ...…

查看全部问答>

isd4002找不到思绪

小弟最近搭了个isd4002的电路。将近50天,不能调试成功,不知哪位大侠赐教,呵呵~~。关于程序,查询开关状态,执行录音或放音,只有一个spi接口,应该不是很难啊。就一百多行,都认真分析过,datasheet也仔细读过。工作电压也改过多次(我曾遇到dat ...…

查看全部问答>

【项目外包】海康sdk二次开发

海康sdk二次开发 项目预算:¥ 1,000~20,000 开发周期: 10 天 项目分类: 嵌入式 竞标要求: 项目标签: 海康sdk ...…

查看全部问答>

485通信的问题,百思不得其解

有没有朋友485通讯比较了解的,求教个问题。 485调试后在收发数据都能实现,但是终端给PC发数据的时候,PC收到的数据会多出64个0xFF,例如:终端发 01 02 03 04,PC能收到:ff ff ff ...(64个) 01 02 03 04,是什么问题呢?…

查看全部问答>