基于拨号芯片MT8880的Android平台拨号系统驱动设计

2017-12-25 15:59:15 来源:AET
标签:

 

摘要:

由于Android操作系统开放源码,在近几年被广泛用于各个领域,可以利用Android系统的开放性,开发该系统在有线电话方面的应用。将Android平台与拨号芯片MT8880结合起来研究。因为Android原生代码具有很大局限性,支持的设备太少,所以为了识别MT8880这个特定设备,并控制MT8880的逻辑输出,需要在Linux内核中添加驱动模块,并在HAL层和JNI层生成动态链接库,使得顶层应用程序可以控制拨号芯片MT8880。MT8880芯片主要用于发送双音多频信号(Dual Tone Multi Frequency),在加载了拨号驱动和应用程序后,可以实现Android系统的拨号功能。经测试,设计的拨号驱动能实现对新增设备的控制,电话应用能成功拨号。

 

0引言

Android是由Google公司和开放手机联盟领导及开发、基于Linux内核的开放源代码的操作系统。Android最近几年发展迅猛,被用于各种场合。TQ210开发板搭载的是Android4.0系统,使用的是三星公司生产的S5PV210处理器,能够满足大多数应用场合的需求。而采用的拨号芯片MT8880能够发送经过滤波处理过的双音多频(Dual Tone Multi Frequency,DTMF)信号。

 

电话由于其信号稳定、抗干扰能力强、辐射小等优点被广泛用于企业、事业机构和个人。在如今移动设备被各个行业广泛应用的大环境下,可以通过底层驱动的开发[2],使得Android可以识别外部新增设备。将Android平台与拨号芯片MT8880结合研究,可以实现Android电话拨号功能。

 

1硬件系统

1.1硬件框架

 

Android开发平台(TQ210开发板)和MT8880拨号芯片构成了硬件系统的主要部分,如图1所示。Android平台采用 TQ210 开发板, TQ210开发板的核心板为63 mm×53 mm×7 mm的10层板,共有280根引脚。核心板引出了两路摄像头接口CAMERA_A和CAMERA_B,其中CAMERA_B主要是开发板为满足不同开发需求预留的应用接口,可GPIO口复用,当不用摄像头功能时,可作为GPIO扩展口。Android的 GPIO接口连接MT8880拨号芯片,使用CAMERA_B的GPIO口与芯片的相应管脚相连接,并通过GPIO口输出高低逻辑电平,对芯片进行控制,实现发送DTMF信号的功能。

 

1.2语音拨号芯片MT8880

MT8880芯片采用ISOCMOS技术制造,具有功耗低和稳定性高等特点,能够比较准确地发送DTMF信号。MT8880的发送部分的内部逻辑如图2所示。从结构上看,在发送与电话号码对应的DTMF信号之前,必须对寄存器进行相应操作,首先选择对状态寄存器SR和控制寄存器CRA进行操作,打开信号音突发选通电路,使芯片能够输出信号,然后通过控制寄存器CRB和发送数据寄存器TDR,使得电话号码能够通过D1~D4数据线输入,最后经过行、列计数器和D/A转换器,输出DTMF信号。通过RSO及WR和RD口线可对相关寄存器进行选择和控制,具体控制功能的实现如表1。 从外部看,可以通过外部微处理器访问其内部的寄存器,以实现DTMF信号的发送功能。

 

 

2软件系统设计

2.1Android源码编译环境的搭建

首先在64位的Ubuntu12.04操作系统中,完成Android源码的编译操作,并在系统中安装和配置JDK,而为了顺利编译Android源码,在系统中还需要安装GCC编译器、相关的库和交叉编译器arm-linux-gcc。在完成编译环境的搭建后,目标代码便能在其他平台上运行。

 

2.2拨号功能的软件框架

Android的系统架构与其操作系统一样,采用了分层架构,主要包括应用程序层、应用程序框架层、系统运行库和核心层[4],如图3所示。为使Android可以识别拨号芯片MT8880这个特定的新增设备,即通过顶层代码实现对硬件设备的控制,首先在Linux内核实现了名为tel.c的内核驱动,为系统上层提供了操作底层硬件的接口;然后在HAL层封装控制逻辑,在JNI层将本地代码封装成上层应用可以调用的Java代码,并生成相应的动态链接库文件即.so文件;最后顶层便可通过调用动态链接库,实现拨号功能。

 

 

2.2.1底层驱动设计

底层驱动模块主要是控制CAMERA_B上的GPIO管脚,提供控制MT8880拨号芯片硬件设备接口的逻辑电平,使得系统能够控制外部芯片MT8880实现拨号。拨号驱动程序tel.c采用的混杂型驱动设备miscdevice,主要由设备的注册misc_register、注销misc_deregister、打开open、关闭close等部分组成。驱动程序tel.c通过宏S3C_GPIO_SFN(x)对管脚功能进行定义,当x为0时,管脚为输入,x为1时,管脚为输出;通过函数int s3c_gpio_setpull(unsigned int pin, amsung_gpio_pull_t pull)为指定的GPIO管脚配置上下位状态;通过函数int gpio_request(unsigned gpio, const char *label)向内核申请管脚,并用label去描述它;通过函数void gpio_free(unsigned gpio)释放一个已经申请的引脚,此函数与gpio_request对应;通过函数int gpio_direction_output(unsigned gpio, int value )在管脚处输出一个电平value(0或者1);通过函数int gpio_direction_input(unsigned gpio)读取;通过函数static unsigned int gpio_cfg_table[]定义了gpio_table数组,这个数组用来定义电话驱动所用的GPIO引脚,总共需要7个引脚,分别为GPI0的0~6口。

 

2.2.2驱动的编译与安装

 

将底层驱动程序tel.c文件编写好后放入到/driver/char/mydrivers目录下,并修改该目录下的Kconfig和Makefile文件。由于使用动态加载驱动程序,所以必须先通过make menuconfig和make modules命令生成.ko文件,运行以上两个命令后其编译结果如图4所示。 然后使用adb devices和adb push命令将tel.ko文件传送到开发板上,并通过adb shell 命令进入到Android Shell命令模式,即切换到开发板,最后使用insmod 命令将tel.ko模块加载到开发板上。使用以上命令后,其编译结果如图5所示。

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
基于ADSL拨号的远程网络视频监控方案

本方案是基于低成本、组网灵活的 ADSL 自动拨号网络组建的一套操作简便、功能强大的远程网络视频监控系统。

搞定ADSL拨号出错

装了ADSL,用的是ADSL卡,可是在拨号时拨号软件报超时错(Time out while trying to…)。这是怎么回事?赶紧找到了电信局的技术员,一问才得知这还是ADSL很常见的故障。解决方法是这样的……

基于Java平台的FPGA嵌入式系统设计

传统的嵌入式产品只能实现某种特定的功能,不能满足用户可变的丰富多彩的应用需求。为解决这个问题,本文设计并实现了一种使用Java作为软件平台的基于FPGA的可编程嵌入式系统,以实现系统对多种本地应用和网络的支持。

基于Android平台的可视对讲系统设计

将Android手机操作系统用于嵌入式平台,提出一种基于Android平台的可视对讲系统设计方案。阐述了音视频编解码技术,并结合JNI、NDK技术、嵌入式软硬件平台对可视对讲方案进行实现。该系统可以用于楼宇对讲系统。

更多资讯
欧盟开除史上最高罚单,谷歌安卓系统依旧垄断

欧盟委员会作出正式裁决,对谷歌实施总额43亿欧元,折合50亿美元的罚款,该金额也创下了欧盟史上开出的单一罚单的最高纪录。

DRAM产业持续乐观,南亚科欲打入服务器存储器市场

存储器大厂南亚科2018年上半展现亮丽成长动能,并看好第3季供需持续稳定,下半年市场需求将稳定成长,南亚科总经理李培瑛表示,DRAM产业市况稳定,每年市场需求成长约15%~20%,但不代表短期内不会出现季节性变化,而美中贸易、国际专利诉讼或中兴事件等尚未看到短期冲击,但长期仍须观察是否过度发展或扩张,导致影响经济景气与终端消费市场。

嵌入式Linux工程师的成长经历,想做大牛应该具备如下素质

从嵌入式研发行业十年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步。下面是嵌入式Linux开发工程师的成长过程,希望对大家能有所启发。

毕业生嵌入式学习方法大汇总
毕业生嵌入式学习方法大汇总

最近经常有用人单位给我打来电话,问我这有没有嵌入式Linux方面的开发人员,他们说他们单位急需要懂得在嵌入式linux环境下的软件开发人员,我回答说,现在每年毕业的大学生那么多,还招不到合适的软件开发人员吗?他跟我说,毕业大学生虽然多,但大部分都能力不够,不能达到他们的工作的要求。

基于MATLAB/SIMULINK的心电信号仿真方法
基于MATLAB/SIMULINK的心电信号仿真方法

心电信号主要频率范围为0.05"100Hz,幅度约为0"4mV,信号十分微弱。由于心电信号中通常混杂有其它生物信号,加之体外以500Hz工频为主的电磁场干扰,使得心电噪声背景较强,测量条件比较复杂,为医学研究、救治和教学带来一定困难。

Moore8直播课堂