|
楼主 |
发表于 2012-5-5 11:32:57
|
显示全部楼层
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(
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音频文件音质好的优点,并给出了详细的连接方法,所设计程序已经在硬件平台上成功运行. |
|