Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42457
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 167
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-04 10:02
文章分类
文章存档

2015年(10)

2014年(14)

我的朋友

分类: 嵌入式

2015-03-06 11:18:49

  源码开放的μClinux由于其强大的网络功能和较低的成本,得到了广泛的应用。嵌入式蓝牙公共交换电话网络PSTN(Public Switched Telephone Network)语音接入点,就是我们和广东省电信科学研究院合作,在μClinux系统上开发的一种具有广阔前景的应用。其应用场景如图1所示。


  蓝牙GSM双模手机在进入蓝牙PSTN语音接入点的信号覆盖范围后,即自动通过接入点在PSTN网络上登记,这样用户的话务就被转移到PSTN网络,使用时只需缴纳固定电话费;网关具有小型交换机的功能,可以为多个蓝牙手机提供类似的服务;而且同一个接入点信号覆盖范围之内的蓝牙手机间,还可以不经过PSTN直接进行相互间通话,就像对讲机一样,不用付费。本文主要介绍接入点软硬件以及设备驱动程序的设计与实现。


  1 硬件的设计与实现


  嵌入式蓝牙PSTN语音接入点的硬件系统框图如图2所示。整个接入点主要由网关控制模块、电话线路接口模块和蓝牙收发模块组成。


  1.1 网关控制模块


  网关控制模块是整个网关软件的运行平台。ΜClinux操作系统运行于此硬件平台之上,而所有应用软件又运行于操作系统之上。复杂的控制流程以及大量的外扩模块要求MPU具有较强的处理能力。经多方权衡,本设计最终选用了Motorola公司的ColdFire嵌入式处理器MCF5272。


  MCF5272内部的SRAM和ROM对于运行μClinux操作系统是远远不够的。本设计对MCF5272的RAM和ROM进行了扩充,外扩了16MB的SDRAM和4MB的Flash ROM。这样的存储器配置不仅满足了语音接入点软件的需要,还为网关增加各种功能留有较多的余地。


  1.2 电话线路接口模块


  电话线路接口模块是网关和PSTN的接口,由线路切换继电器、电话线接口芯片、DTMF接收电路、DTMF发送电路和FSK解调及振铃接收电路组成。它通过MCF5272的12根GPIO线和4个外部中断线和网关控制模块相连。线路切换继电器用于实现电话线上的信号在振铃接收电路和语音电路之间的切换,即实现摘机挂机的功能。在待机状态下继电器触点切换在振铃接收电路一侧,等待接收振铃信号。当需要摘机时,MCF5272控制继电器切换到话音电路一侧。


  电话线路接口芯片选用Philips公司的TEA1062A。TEA1062A把电话线上送来的模拟语音信号放大后发送到蓝牙收到模块的PCM编解码器;相反,也把PCM编解码器送来的语音信号放大后,放到电话线上传输。此外,它还提供了消侧音、自动增益控制等功能。


  网关还需具备转发来电显示信息的功能。常见的来电显示标准分为DTMF和FSK两种。我国的来电显示国家标准是FSK制式的,大部分PSTN交换机也支持FSK标准的来电显示信息;但是也有少量PSTN交换机和一些用户内部交换机发送的是DTMF标准的来电显示信息。我们HOLTEK的HT9170D以及HT9032C芯片分别接收DTMF及FSK来电显示信息。


  网关向PSTN交换机拨号和普通的电话一样,采用DTMF信号,同时也可以用DTMF信号向PSTN交换机发送一些信令信息。网关的DTMF发送选用FOLTEK的HT9200A芯片。


  1.3 蓝牙收发模块


  蓝牙收发模块包括蓝牙射频电路、基带处理电路和PCM编解码电路,通过MCF5272的UART1和网关控制模块相连。语音信号通过PCM编解码器MC145483和电话接口芯片TEA1062A连接。语音信号通过PCM编解码器MC145483和电话接口芯片TEA1062A连接。MCF5272把蓝牙模块接收到的数据通过协议栈解释为摘机、挂机、拨号、来电显示等命令,并通过数据线控制电话语音接收与拨叫电路的各种操作。PSTN市话网用户线与电话线路接口模块连接,电话线路接口模块把外部PSTN电话网的振铃信号和来电显示信息通过数据线传递给MCF5272。MCF5272再把这些信号通过蓝牙软件栈打成数据包并送给蓝牙模块,由蓝牙模块通过无线信道发送给终端。电话线上的模拟语音信息通过PCM编解码器编码后经蓝牙模块发送给终端,同时蓝牙模块接收终端发送过来的语音数据,经过PCM编解码器解码,形成模拟语音信号,通过电话接口芯发送到电话线上。本设计中的蓝牙基带和射频电路由CSR的BlueCore01b芯片加上功放、低噪放、收发切换开关、滤波器和一些外围电路组成。


  2 驱动程序的设计与实现


  2.1 μClinux设备驱动程序概述


  在μClinux下,所有的硬件设备都被视为文件,从设备接收输入数据和将输出送到设备就像从普通文件接收输入和将输出送到文件一样,可以使用read()、write()等系统调用。应用程序通过系统调用和内核交互,而内核则通过设备驱动程序和具体硬件交互,如图3所示。一般来说,操作系统内核需要访问三类主要设备:字符型设备、块型设备以及网络设备。本接入点的驱动程序属于字符设备驱动程序。


  每个驱动都有一个称为file_operations的数据结构,包含指向驱动程序内部大多数函数的指针。当系统引导时,驱动程序初始化函数将file_operations结构的指针送给内核,内核就可以通过该指针访问驱动程序内的函数。因而,这些函数就是进入驱动程序的基本入口点。当用户程序执行系统调用时,将导致驱动程序内相应的函数被调用。


  2.2 需求分析


  嵌入式蓝牙PSTN语音接入点的硬件设计中,电话线路接口模块、蓝牙收发模块是外扩的模块,需要在μClinux内核为基提供支持。


  蓝牙收发模块通过MCF5272的串口2和网关控制模块相连,因而直接使用μClinux自带的串口驱动程序就可以完成对此模块的控制;而电话线路接口模块通过GPIO口以及外部中断线与网关控制模块相连,必须由我们自由提供驱动程序。


  2.3 FSK来电显示芯片驱动的设计与实现


  FSK来电显示驱动的主要任务就是完成FSK来电显示信息的接收,总工作流程如图4所示。其主要功能由设备驱动程序基本入口点中的open、release、read、ioctl、select函数,以及设备初始化函数、中断处理函数、下半部分处理函数、定时器超时处理函数完成。下面对其中一些关键的函数进行简要介绍。


  (1)read函数


  read、write称为对设备的I/O操作。当用户进程对设备执行I/O操作时,设备可能并不具备进行I/O操作的条件。这些情况下,用户进程可以选择继续等待,即通过interruptible_sleep_on()函数让用户进程进入睡眠状态;也可以选择不等待,立即返回。这就产生一两种类型的I/O操作,即阻塞型I/O和非阻塞型I/O。我们的驱动同时支持阻塞型和非阻塞型的读操作。
推荐阅读:http://h.foyuan.net/blog-256910-333849.html
阅读(655) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~