基于SEP4O2O微处理器的动作控制MP3的设计
2.3 MP3控制
Linux操作系统作为平台,其良好的系统可定制、可移植性使得其在嵌入式领域占有重要的地位。Linux有很多好的进程通信机制,如内存共享、管道、多线程、信号等,这里选择信号作为控制通信的桥梁。利用Linux内部完整的串口驱动程序可以很轻松地通过在串口的软中断接收程序中发射信号给指定的程序,也就是播放器程序,然后播放器程序接收并判断信号类型,给相应控制全局变量赋与相应的控制值,使得介入控制变得可能。控制使用的是播放器自带的机制,使得更加地稳定可靠。使用Madplay作为MP3播放软件,其默认的控制是通过终端键盘来实现的。在设计时为了达到用动作产生的信号量来控制播放,同时不去大量修改Madplay的程序源码,可以通过截断播放器与键盘的联系,与串口连接上,这样就可以基本不用修改上层的机制就能够控制整个播放器的动作。
具体系统移植和需要的源代码软件包详见www.armfans.net
2.4 MP3播放
MC9S08QG8与SEP4020之间通过串口来进行通信。
基本的串口操作原则是先保存串口原始的参数,然后再设置程序所需要的参数,程序结束后恢复现场。串口一般操作如下:
串口操作需要的头文件

串口软中断设置,填充SIGIO结构体,分配相应中断函数:本文引用地址:https://www.eepw.com.cn/article/166741.htm
在操作系统中加入自动播放脚本,使得系统在开机时完成搜索MP3文件,建立播放列表,启动Madplay播放器等操作。脚本代码如下:
动作发生时MC9S08QG8向SEP4020发送一个动作信号,然后SEP4020中的Linux内核就会发送一个SIGIO(串口信号)给各个用户进程。Madplay生程捕捉该信号,并且读取串口上的消息,用以判断动作的形式。在Madplay程序中需要加入两个模块。第一个模块用于读取串口上的消息,具体实现方法是打开并读取串口设备文件/dev/ttySl来获取消息,然后按照设定会从设备上读到4种串口信号,对应4个ASCII字符“L,R,U,D”分别对应四种不同的动作;第二个模块是响应信号的处理函数,一旦Linux内核接收到SIGIO串口信号,Madplay进程就进入软中断读取/dev/ttySl上的串口消息。甫一判断出动作,Madplay就用kill函数向本进程发送相应的信号来控制播放。
3 总结
本文介绍了针对SEP4020处理器等硬件在Linux操作系统下的动作控制MP3的设计流程,为这种控制方式的MP3设计提供了一个范例。以下是一些改进的建议:作为手持式设备,动作控制MP3对于能耗的要求比较高,所以设计时必须考虑多使用一些低功耗的器件替代高功耗的器件。动作控制的MP3在运动中是受限制的,MP3的判断会受到比较大的干扰。所以如果动作采样方法和动作判断算法难以有很大的改进,为方便继续使用应当考虑给MP3加上其他的控制方式,暂时取代动作控制。
评论