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低电平单声道/立体声功率放大器.
图1 iis总线结构框图
图2s3c44b0x与cs4334以及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)1)<<1;
printf(
sample start:0x%x,pwave);
printf(
samplesize: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(
now play the wave file ...);
printf(
push any key to exit!!!);
riiscon |=0x1;
while(!getkey()); //按下任意键返回}
5 小结
采用s3c44b0x内置iis总线和音频数模转换芯片cs4334,本文搭建了以二者为核心的工作平台,并详细讨论了基于此平台实现播放wave音频文件的方法.由于s3c44b0x及cs4334模块具有较强的通用性,因此本文给出的实现方法及程序具有使用简单、运行稳定、便于移植等特点.
本文作者创新点在于详细设计了基于嵌入式微处理器s3c44b0x和cs4334的wave音频文件播放平台,融合了arm处理器功耗小、便携、代码执行效率高和wave音频文件音质好的优点,并给出了详细的连接方法,所设计程序已经在硬件平台上成功运行.
红米4x不用高通,联发科:库存没清完
vivo推出全球首款双屏三摄AI旗舰NEX双屏版 实现了又一次创新和突破
区块链技术正在重塑全球贸易的未来
企业如何遵守数据安全法规进行SAP数据脱敏处理?
ILIFE智意X785扫地机器人值不值得购买
基于S3C44B0X的WAVE音频文件播放
为旌科技与清华大学苏州汽车研究院签订战略合作并设立联合研发中心
过电流保护是变压器的主保护吗?
基于SOPC的车辆息线控制器设计方案
将AI超级计算带给客户
AIGC催动异构集成浪潮,为本土产业带来历史性机遇
sdwan解决方案对比的同时怎么选择合适的sdwan解决方案厂商?
农用杀虫灯与农药杀虫对比优势
fpga用的是什么编程语言 Verilog HDL应用最为广泛
小米发布了隔空无线充电技术,让无线充电又一次登上了热榜
三星、西数率先发难,存储真要涨价了?
不止美「图」 ,更要美「人」,看美图如何将变美由“虚”向“实”
国内5G套餐价格曝光!190元是最低消费,那还买5G手机吗?
魅族Pro7来袭,你猜猜用什么处理器
5G消息 安卓将标配 苹果可用小程序