基于ARM的多通道专业MP3播放器设计
4.2 驱动程序的设计
本文引用地址:http://www.eepw.com.cn/article/84900.htm本系统所编译的μClinux内核中包含有USB、LCD等驱动程序,只要根据需要适当的修改便可以应用。但是对于MP3解码部分芯片的驱动需要自己编写。音频驱动程序实现的主要功能是:(1)系统启动时可以完成芯片的初始化;(2)具体操作时可以提供给操作系统合适的软件接口。音频驱动初始化程序如下:
void STA013_Init(void)
{
if(STA013_SendCommand(RESET_REG,0,0x00)) //复位STA013
STA013_PrintError();
if(STA013_SendCommand(ACT_CON_REG,0,0x00)) //未激活状态
STA013_PrintError();
if(STA013_SendCommand(PWR_CON_REG,0,0x00)) //上电
STA013_PrintError();
if(STA013_SendCommand(FS_CON_REG,0,
I STA013L_FsValue[SysInfo.SamplingIndex])) //选择采样频率
STA013_PrintError();
if(STA013_SendCommand(IF_CON_REG,0,0x02+(0<<6))) //选择16位IIS数据格式
STA013_PrintError();
if(STA013_SendCommand(ANG_CTL_REG,0,0)) // 0x13, 0x12选择DAC
STA013_PrintError(); 和Line In输入模式
if(STA013_SendCommand(DGT_CTL_REG,0,0x00)) // DAC静音
STA013_PrintError();
if(STA013_SendCommand(LHP_VOL_REG,0,0x00)) //左声道音量
STA013_PrintError();
if(STA013_SendCommand(RHP_VOL_REG,0,0x00)) //右声道音量
STA013_PrintError();
if(STA013_SendCommand(ACT_CON_REG,0,0x00)) //数据传送激活
STA013_PrintError();
}
4.3 播放程序的设计
作为本系统的一个主要创新点,在多通道部分设计合理且高效的播放程序代码很重要,在这里采用的是将待解码的MP3文件先由USB设备复制到内存的缓冲区,再由缓冲区发送给解码器的方法。播放时,程序会根据每个通道的歌曲信息将MP3文件流从USB设备复制到相应的缓冲区中。其主要实现代码如下:
for(i=0;i<4;i++){
if((dbuf[i]=malloc(BUF_LEN))==NULL){
printf("Allocation %d Error n", i);
exit(1);
}
}
4.4 操作界面的实现
完整的MP3播放器设备需要有一个简洁的操作界面。本系统的操作界面选用MiniGUI软件进行编写,通过对MiniGUI运行模式的选择、MiniGUI的移植[5]以及界面程序的编写,最终的操作界面如图4所示。整个操作界面简洁明了,系统在开机后提供了当前时间,以及播放、设置和复位按键,可以直接通过播放键来实现多通道播放功能,通过设置键进行歌曲目录的编排。
图4 播放器主界面
5 结束语
多通道MP3播放器与传统的MP3播放器相比,具有许多优势,可以满足大型公共场所对背景音乐更高性能的需求。多通道MP3播放器可以实现多个音频输出通道同步播放,并可以通过USB接口外挂存储设备实现歌曲的大容量存储。此外,系统还提供了串口、以太网等一系列接口,方便与外部进行数据交换和软件升级。
本文创新点:设计了基于ARM7平台下的多通道MP3播放器,实现了对外接移动硬盘或U盘上的mp3文件进行多通道同步播放。
参考文献
[1] 王旭东,徐刚.基于Windows CE.Net 4.2嵌入式操作系统多媒体播放器的应用研究[J].微计算机信息, 2006,22-6:77-79
[2] 马忠梅,马广云,徐英慧等.ARM嵌入式处理器结构与应用基础[M].北京:北京航空航天大学出版社,2002
[3] 王道乾,刘定智,文俊浩.基于ARM处理器的MP3播放器分析与实现[J].计算机工程与设计, 2007,28-7:1595-1597
[4] 李岩,荣盘祥.基于S3C44B0X嵌入式μClinux系统原理及应用[M].北京:清华大学出版社,2005
[5] 闫玉忠,石理.嵌入式Linux的MiniGUI研究和移植[J].单片机与嵌入式系统应用,2003,6-1:5-7
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论