当前位置: 首页 > 范文大全 > 公文范文 >

调频发射机的Wince驱动设计

时间:2022-03-23 09:23:31  浏览次数:

(南昌大学信息工程学院,江西 南昌 330031)

摘要:在便携式音频播放器、MP3播放器、便携式导航设备(PND)等带有音频播放功能的便携式设备中,经常会用到一些调频发射机来实现音频发射功能。当PND中需要该功能模块的时候,鉴于PND的软件环境,有必要为该模块编写一些驱动程序,以保证调频发射功能的正常运行。本文研究的是,在Samsung公司提供的S3C2440(ARM9内核)的开发板上,为一个PND设备的调频发射机(SN761634)编写一个基于Windows CE 5.0的驱动程序。试验结果测试表明,该驱动程序可以保证SN761634在PND设备中正常集成运行。同时,本文还提供了一套完整、详细的Windows CE流驱动设计方案,可以借鉴用于其他基于IIC总线设备的流驱动开发。

关键词:调频发射机;流驱动;IIC总线;Windows CE;S3C2440

中图分类号:TN92文献标识码:A文章编号:1009-3044(2009)28-8066-03

Design of Windows CE Driver for FM Transmitter

YIN Chuan-wen

(School of Information Engineering, Nanchang University, Nanchang 330031, China)

Abstract:With audio playing function, some devices, such as Portable Audio Player,MP3 Player, Portable Navigation Devices(PND) and so on, usually work together with some FM transmitter to transmit some special FM signal. When a PND need a audio playing function with it, on the basis of the PND’s software environment, in order to make sure that the FM transmitter can work smoothly, it’s necessary to develop some device drivers for it. What this article talks about is, making use of the Samsung’s S3C2440(ARM9 Kernel) to program a driver for a PND FM transmitter.The results of the experiment show that the driver can make sure FM transmitter work normally. Meanwhile, this article also has provided a completed and detailed design method for some programmers to develop other streams driver based on IIC bus.

Key words:FM transmitter; streams driver; IIC bus; Windows CE; S3C2440

1 概述

近年来,随着计算机技术的不断发展,嵌入式开发设计已逐步成为当今IT界的一种趋势。S3C2440是三星公司推出的一款基于ARM920T处理器构架的低功耗、高性能的嵌入式SoC处理器,应用极为广泛。Windows CE是一个抢先式多任务并具有强大通信能力的Windows32嵌入式操作系统,是微软专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非PC领域而从头设计的战略性操作系统产品[1]。本文中将要讨论的重点内容就是,在S3C2440开发板的基础上,为SN761634调频发射模块设计编写一个基于Windows CE 5.0的流驱动程序。

2 S3C2440和SN761634

S3C2440是三星公司推出的基于ARM920T的嵌入式处理器,主频高达400MHz,最高可达533MHz,低功耗、高性能,广泛地应用于PDA、便携媒体播放器、卫星导航仪等多媒体终端,片上集成指令/数据分开的16KCache、SDRAM控制器、LCD控制器、4通道DMA、3通道UART、IIC总线、IIS总线、SD主机接口、PWM定时器、看门狗、片上PLL时钟发生器、8通道10位AD控制器和触摸屏接口以及带日历函数的实时时钟,极大地方便于系统开发。

SN761634 FM发射模块,是TI(美国德州仪器公司) FM发射芯片为核心的FM发射模组,具有音质好,体积小,功耗低,外围元件少,使用无需调试的特点。应用时只需专注于软件开发工作,而无需关心硬件调试。该模组提供两种控制方式,I2C和并行数据输入控制。该产品的发射频率为76MHz-108MHz,时钟频率为32.768KHZ。适应于GPS语音导航、车载电视/车载DVD PMP/MP4、音乐手机、车载MP3/MP4音频发射器立体声无线发射系统等产品的开发与应用。

3 IIC总线协议

IIC(Inter Integrated Circuit)总线是1980年由Philips公司推出的[2]。 IIC总线协议包含的内容比较多,涉及的概念有主机、从机、发送器、接收器、多主机、仲裁和同步等。表1简单介绍了一个完整的IIC协议所包含的几个关键要素。数据传输过程中,SDA只有在SCL低电平(SDA被占用)的时候才可以发生跳变,换句话说,当SCL处于高电平(释放SDA)时,SDA状态维持不变。初始化发送、产生时钟信号和终止发送的任务都由主机完成。I2C总线遵从同步串行传输协议,即各位串行(一位接一位)发送,由时钟(clock)线指示读数据(data)线的时刻。每个数据字节在传送时都是高位(MSB)在前。每次通讯以START开始,以STOP结束;以启动信号START来掌管总线,以停止信号STOP来释放总线。

图1 IIC总线上数据传送

注:从机以一种握手过程(见图1)在接收和响应一个字节后,使SCL线保持低电平,迫使主机进入等待状态,直到从机准备好下一个要传输的字节。

4 Windows CE流驱动

Windows CE驱动有两种模型:本机设备驱动程序和流接口驱动程序。本机设备驱动适于集成到基于Windows CE平台设备。流接口设备驱动程序可以由第三方生产商提供,以支持添加到系统中的设备。Windows CE下的设备驱动程序在与应用程序相同的保护级上工作。流接口驱动程序是在用户一级的动态链接库(DLL),用来实现一组固定的函数,称为流接口函数,这些流接口函数使得应用程序可以通过文件系统中的特殊文件而与设备进行接口[3]。当系统启动时,大多数驱动程序是由设备管理进程(DEVICE.EXE)加载的,所有这些驱动程序将共享同一个进程地址空间。流接口驱动程序工作的系统结构如图2所示。

5 SN761634驱动程序开发

设计SN761634驱动的主要目标是,一方面要将系统的音频信号以特定的频率发送出去;另一方面,在当前发射频率被占用的情况下,可以调节系统的发射频率,保证信号的有效发射与接收。

方案中的SN761634驱动是提供给Windows CE操作系统的应用程序调用的,这里需要使用到Windows CE流驱动的设计方法来编写该驱动。在编写驱动程序的过程中,一个重要的步骤就是要将应用程序中设置的频率值,通过IIC总线传送给SN761634模块,以此来设置它的发射频率。执行这一操作,根据IIC总线协议,首先需要指定IIC总线上从机的地址,然后才可以传输一系列的字节数据。SN761634模块写数据的地址为:110001(AS)0,一共要传输6个字节的数据,各字节中每个bit位所代表的含义如表2所示。

以上数据中,除了N13~N0之外,其他的各位都可以采用默认值,必要的时候可以进行适当修改。要设置N13~N0各位的值,需要使用下面的计算公式:

其中, 为N13~N0所要设置的值的10进制表示; 为想要设置的发射频率; 为SN761634模块的时钟频率(32.768KHZ)。例如,如果为88.0MHZ,根据公式(1),可以求得为10742,转换为二进制数据为:10100111110110,即为N13~N0依次对应的值。

由于要使用IIC总线协议来传送数据,所以需要编程实现IIC数据传输的过程。S3C2440使用GPECON控制寄存器的第14和15位来作为SDA和SCL的输出控制位,用GPEDAT寄存器来发送和接收数据。根据这一特点,设计SDA和SCL的基本控制函数如下:

volatile IOPreg *s2440IOP_I2C =(IOPreg *)IOP_BASE;

#define SCL(1<<14)

#define SDA(1<<15)

#define SCL0 (s2440IOP_I2C->rGPEDAT &= ~SCL)

#define SCL1 (s2440IOP_I2C->rGPEDAT |=SCL)

#define SDA0 (s2440IOP_I2C->rGPEDAT &= ~SDA)

#define SDA1 (s2440IOP_I2C->rGPEDAT |=SDA)

根据前面介绍的IIC总线协议,这里定义I2c_Init()、Start_I2c()、Stop_I2c()、I2C_Write_Bytes()四个功能函数,分别用来表示初始化IIC总线、启动IIC总线、停止IIC总线、IIC总线写连续字节的功能。按照Windows CE流驱动设计的一般方法,需要定义几个标准函数:FMC_DllEntry()、FMC_Init()、FMC_Deinit()、FMC_Open()、FMC_Close()、FMC_Read()、FMC_Write()、FMC_Seek()、FMC_IOControl()、FMC_PowerUp()和FMC_PowerDown()。

在FMC_IOControl()函数里面,通过设置IIC总线从机地址,然后调用I2C_Write_Bytes()方法,就可以把从应用程序中传递过来的发射频率值设置到SN761634模块中去。

代码编写完成后,需要在Platform Builder中编译该驱动,生成一个DLL函数。然后新建一个def文件,用于导出接口函数,取名为FMControl.def。然后同样用记事本编写一个注册表文件,取名为FMControl.reg:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FMControl]

"Prefix"="FMC"

"Index"=dword:1

"Dll"="FMControl.dll"

"Order"=dword:0

然后新建一个MAKEFILE文件和一个SOURCES文件,用来设置编译的内容。如果需要在系统启动时加载本驱动,需要在platform.reg中加上一行代码:

#include "$(_TARGETPLATROOT)\DRIVERS\FM\FMControl.reg",

同时还需要在platform.bib文件中添加如下代码:

FMControl.dll $(_FLATRELEASEDIR)\FMControl.dllNK SH

完成上述所有工作以后,就可以将整个BSP编译生成一个NK.nb0镜像,然后将镜像文件下载到目标板上去调试运行。

需要注意的是,SN761634的工作情况受外围电源控制电路的限制(如图3所示)。开始状态下,VOUT输出的是低电平,需要写一段驱动代码,来控制其输出高电平,从而使得SN761634进入工作模式。在S3C2440中,使用的是GPJCON和GPJDAT两个寄存器来控制该电路的。编写电源启动程序如下:

#define CANDATA5(1<<5)

#define DATA5_0(s2440IOP_I2C->rGPJDAT &= ~ CANDATA5)

#define DATA5_1(s2440IOP_I2C->rGPJDAT |= CANDATA5)

#define WritePinDATA5()DATA5_1

#define ClearPinDATA5()DATA5_0

#define setFMin(){s2440IOP_I2C->rGPJCON &= ~(3<<10);}

#define setFMout() {s2440IOP_I2C->rGPJCON &= ~(3<<10);

s2440IOP_I2C->rGPJCON |= (1<<10);}

启动SN761634电源时,只需要执行代码“setFMout();ClearPinDATA5();”即可。应用程序中,可使用CreateFile()、DeviceIoControl()、ReadFile()、WriteFile(),这些函数方便用户使用驱动程序。

6 结束语

本文详细介绍了SN761634调频发射模块在Windows CE环境下的驱动程序的设计和实现方法。本设计涉及到IIC总线协议、Windows CE流驱动和一些硬件相关的知识,只有在掌握这些基础理论的基础上,我们才可以顺理成章地写出符合产品要求的驱动程序出来。总的来说,本文中讨论的驱动程序的编写是比较初级的,对于稍复杂的设备驱动,可能会用到更加复杂的实现方法,但总的设计框架与本文中提到的设计方法不会有很大的出入。

参考文献:

[1] 胡军辉,王友钊.Windows CE设备驱动程序开发[J].计算机工程,2006,32(16):41-43.

[2] 王小芳,王典洪,陈飞.基于WinCE的I2C驱动程序设计[J].单片机与嵌入式系统应用,2006,4:28-30.

[3] 微软公司.希望图书创作室译. Microsoft Windows CE Device Driver Kit 设备驱动程序开发指南[M].北京:北京希望电子出版社,1999:4-5.

推荐访问: 发射机 调频 驱动 设计 Wince