基于Android 平台的嵌入式调频广播系统设计

2013-07-20 09:40:50张宇翔
微处理机 2013年2期
关键词:广播系统驱动程序调频

黄 佳,胡 钢,张 富,张宇翔

(1.河海大学计算机与信息学院,常州 213022;2.常州市传感网与环境感知重点实验室,常州213022;3.江苏乐众信息技术有限公司,常州 213022)

1 引言

随着广播事业的不断发展、节目频道的增加以及服务用户的不断增多,在Android 智能终端上开发调频广播系统显得日益重要。目前Android 智能终端上的广播有两种:一种是网络广播,无需硬件配置,依靠网络电台,接收网络流媒体播放数据,但耗费的数据流量大,不仅移动网络数据流量消费贵,而且我国目前Wifi 普及率较低,因此网络广播市场有限;另一种是嵌入式调频广播,依靠移动终端嵌入调频广播模块来接收广播电台,由于未使用移动网络数据包,消费相对低,深得消费者喜爱。本系统采用嵌入式的调频广播系统设计方法。

调频广播的软硬件系统通过Linux 操作系统及其驱动程序联系在一起。硬件系统包括应用处理器,调频广播接收模块及音频解码器模块。软件系统是基于Android 平台,采用Linux 操作系统,软件核心技术应是解决最底层调频广播模块的驱动程序开发、中间层的硬件抽象层接口和Java 本地调用函数设计,以及顶层调频广播播放器应用程序的设计。

2 嵌入式调频广播系统硬件设计

系统硬件结构如图1 所示。

本硬件系统采用主频为1GHz、45nm 制程的数据处理芯片S5PC110 作为应用处理器,主要功能是为调频广播接收模块和音频编解码器模块提供控制信号。应用处理器直接向调频广播模块提供32KHz的时钟,并通过IIC 总线发送指令提供时钟线(FM_SCL)和信号线(FM_SDA)来配置调频广播芯片的五种工作状态。音频编解码器通过IIS 总线将数字音频数据传输给应用处理器,应用处理器通过IIC总线控制音频编解码器的时序,设置采样率及编码比特率并配置好其通路以及AD、DA的工作模式。

图1 硬件设计框图

调频广播接收模块由调频广播芯片RDA5820及带通滤波器构成。该模块的功能是接收射频FM广播信号并解调出模拟信号。带通滤波器采用符合调频广播频率范围的并联谐振电路,利用LC的谐振原理实现对射频信号的选频来达到滤波效果。RDA5820 采用数字低中频架构,有复位初始化,设置频点、搜台、工作及休眠五种状态。滤波后的信号进入该芯片,经过低噪声放大器、正交图像抑制混频器、可编程增益控制后,进行模数转换和音频数字信号处理,再通过模数转换得到两路模拟信号——左声道和右声道广播信号FM_OUTL FM_OUTR。这种混合信号架构利用DSP 执行通道选择,调频解调和立体音频处理,MPX 译码自主完成从立体声到单声道的切换来限制输出噪声。音频解码器WM8994支持直接数字基带连接并提供时钟和数据多路复用器。由RDA5820 芯片接收工作时输出的立体声音频信号连到WM8994 上的L 和R 音频输入端口,进行音频解码后,最终以耳机或扩音器的形式外放[1,4]。

3 基于Android的调频广播系统软件设计

系统的软件设计基于Android 平台,主要解决四个方面问题:添加内核层的调频广播驱动程序,用来驱动调频广播硬件设备;设计硬件抽象层(HAL)接口,用来对Linux 内核驱动程序的封装,向上提供接口,屏蔽底层实现细节;实现Java 本地调用(JNI)机制,使得在Dalvik 虚拟机内部运行的Java 程序能够与用其它编程语言(如C 和C ++)编写的应用程序和库进行交互操作;设计应用程序层的调频广播播放器应用,用来实现调频广播系统的应用[2]。软件设计流程如图2 所示。

图2 软件设计流程图

3.1 驱动程序设计

编写Android 系统Linux 内核层驱动程序,首先包含如#include <linux/i2c.h >、<linux/ioctl.h>等系统头文件和"rda5820_fm_ctrl.h"自定义的头文件。其关键设计如下:

(1)file_operations 结构体

file_operations 结构体是把系统调用和驱动程序关联起来的关键数据结构。读取file_operation 中相应的函数指针,把控制权转交给函数,完成Linux 设备驱动程序的工作。

在系统内部,I/O 设备的存取操作通过特定的入口点进行,这组特定的入口点由设备驱动程序提供,由file_operations 结构体向系统说明,定义在include/linux/fs.h中[5]。本系统设计的调频广播的file_operation 结构体为:

使用这种语法提高了代码的兼容性。其中open()函数为给定设备节点打开设备,ioct1()函数内是一个switch{case}结构,每一个开关语句对应一个命令码,做出一些相应的操作,主要对搜台、开始、停止、获取频道、音量设置进行处理,实现对调频广播设备I/O 通道的控制。

(2)驱动入口和出口函数

在入口函数_init rda5820_driver_init()中,利用i2c_static_add_device()函数向系统注册rda5820_i2c_driver 设备;在出口函数_exit rda5820_driver_exit()中,使用i2c_unregister_device()函数向系统注销rda5820_i2c_driver 设备,并用module_init()和module_exit()来指定驱动入口和出口函数[5]。

3.2 硬件抽象层(HAL)接口设计

Android的硬件抽象层(HAL)是用来隔离Linux内核和Android 用户空间的一个中间层。具体实现有两种方式:一是没有经过封装,通过直接函数调用的方式来操作硬件驱动;二是通过HAL stub 来给上层提供一个统一的调用接口,只要在HAL 中实现这些接口,用户层的代码无需太大改动。本系统使用HAL Stub的方式来实现,由应用程序获取并调用HAL stub 完成对硬件的控制,具有可移植性好的特点。

HAL的设计关键在于将三个结构体模块类型hw_module_t、设备类型hw_control_device_t 和模块方法hw_ module _methods_t 实例化,再交由HAL 内部机制调用。先用fm_module_t()函数继承hw_module_t 结构,自定义针对调频广播控制的fm_control_ device_t()结构,其中包含hw_device_t 和支持的API 操作。

在HAL 实现了内部结构体之后,定义一个HAL模块,赋予该模块一个唯一的ID 值,用来向上层提供一个接口供其调用。该HAL 模块为:

3.3 JNI(Java 本地调用)函数设计

Java 本地调用(JNI)使得在Dalvik 虚拟机内部运行的Java 程序能够与用C、C++编程语言编写的应用程序和库进行交互操作。JNI 函数设计流程如图3 所示。

图3 JNI 函数设计流程图

其中hw_get_module()调用HAL 中内部结构体hw_methods_t。可供上层调用的功能函数包括调频广播的open()函数、getFrequency()函数、autoSearch()函数、getVolume()函数、setVolume()函数及close()函数。用JNINativeMethod fmMethods[]来表示映射关系,再通过编写Android.mk 文件确定生成的库文件,方便应用层调用。

3.4 应用程序设计

调频广播系统的应用程序设计在Eclipse 环境中根据硬件所支持的功能和系统需求利用Java 语言进行开发。本系统选择耳机线作为接收天线,是因为考虑到直接在PCB 上布线难,且对其他高频信号产生干扰,而耳机线的长度与调频广播的半波长相当,能有效接收信号。在应用程序中涉及的关键点如下:定义全局变量HEADSET_STATE_PATH="/sys/class/headset/headset/status";/*系统内耳机的设备文件节点*/;boolean isHeadsetPlugIn()函数判断耳机是否插入;getHeadsetState()函数取得系统得到的耳机状态。使用Button、TextView 和Dialog组件实现对调频广播开始、自动搜台、播放、手动搜台、切换频道及停止的功能调用。图4为调频广播系统应用程序工作流程图。图5为调频广播播放器运行图。

4 结束语

利用Android 系统开源特性设计的调频广播系统,可嵌入到手机、平板电脑、机顶盒、数字电视等其它终端设备,具有良好的移植和扩展性能。Android 系统在移动终端的应用将会逐步成熟和发展,产品价格也将最终接近大众消费水平,届时调频广播应用将成为人们休闲娱乐的必备工具。

图4 应用程序工作流程图

图5 移动终端应用运行界面

[1]徐博尧,杨刚.一种基于ARM-Linux的调频广播监测接收机的设计[J].中国传媒大学学报自然科学版,2010,17(2):76-80.

[2]Enck W,Ongtang M,McDaniel P.Understanding Android Security[J].Security & Privacy,IEEE.2009,7(1):50-57.

[3]刘淼.嵌入式系统接口设计与Linux 驱动程序开发[M].北京:北京航空航天大学出版社.2008.

[4]张文月,马永涛,刘开华.DRM+调频接收机数字信号处理部分研究与实现[J].电子测量技术,2011,34(12):16-19.

[5]Corbet Jonathan,Rubini Alessandro,Korah- Hartman Greq.Linux Device Drivers 3rd[M].Oreilly&Associates Inc.,2005.

猜你喜欢
广播系统驱动程序调频
考虑频率二次跌落抑制的风火联合一次调频控制
能源工程(2021年5期)2021-11-20 05:50:42
浅析语音广播系统在高速公路中的应用和发展
应急广播系统中副载波的构建与应用
调频发射机技术改造
调频激励器干扰的排除方法
粤赣高速公路对讲与广播系统改造
调频引信中噪声调幅干扰的自适应抑制
无线电技术在广播系统中的应用研究
驱动程序更新与推荐
驱动程序更新与推荐