基于8051嵌入式系统的GPRS终端实现
时间:09-17
来源:互联网
点击:
4.2 TCP/IP模块
TCP/IP模块通过RS232串口与GPRS无线模块通信,提供非透明和透明两路通道。相对应地,该模块有两种传输模式:透明模式和非透明模式。通过软件切换,模块在处于不同的传输模式时,数据流向也有所不同。当传送AT指令集时,模块进入透明模式,可以直接访问GPRS无线模块;当模块进人非透明传输方式时,用户数据从串口进入TCP/IP模块后,先十丁成TCP/IP包,再经串口发送给GPRS模块;GPRS无线模块把其封装成GPRS分组数据包传到GPRS网上。TCP/IP模块由基于单片机8051的嵌入式系统实现。选用WINBOODW77E58作为嵌入式系统的微处理器,嵌入式实时操作系统选用uC/OS-II,然后在uC/OS-II中移植uIP实现TCP/IP协议栈。
4.3 GPRS无线模块
GPRS无线模块作为GPRS终端的无线收发模块,把从TCP/IP模块接收的TCP/IP包和从基站接收的GPRS分组数据进行相应的协议处理后再转发。GPRS无线模块采用了SIEMENS公司的MC35 GPRS模块。MC35模块主要由射频天线、内部Flash、SRAM、GSM基带处理器、匹配电源和一个40脚的ZIF插座组成。GSM基带处理器是核心部件,其作用相当于一个协议处理器,用来处理外部系统通过串口发送过来的AT指令。射频天线部分主要实现信号的调制与解调,以及外部射频信号与内部基带处理器之间的信号转换。匹配电源为处理器及射频部分提供所需的电源。MC35 GPRS模块支持GSM900和GSMl800双频网络,接收速率可达86.20kbps,发送速率可达21.5kbps,并且很容易集成。当然最大的数据吞吐量还要依赖于GPRS网络的支持。
5 TCP/IP模块的软件实现
5.1 uC/OS-II在8051上的移植
uC/OS-II是自由软件,非商业的运用如科研、教学都是免费的。任何使用者都可以从互联网上下载其源代码,通过适当的修改加以移植,使其满足自己硬件和系统的需要。为了移植,需要先了解uC/OS-II操作系统的总体结构,图3所示是uC/OS-II的结构及与硬件的关系。
与处理器无关的代码中包含了uC/OS-II的系统函数,在进行系统移植时一般不需要对这部分进行修改;只要将UCOS-II.C文件包含在自己的项目中,即可将uC/OS-II中所有与MCU无关的代码包含到移植的代码中。
与应用相关的代码是用户根据自己的应用系统定制合适的内核服务功能,它包括两个文件:OS_CFG.H、INCLUDES.H。其中OS_CFG.H用来配置内核,用户根据需要对内核进行定制,设置系统的基本情况,例如系统可提供的最大任务数量、是否定制邮箱服务、是否需要系统提供任务挂起功能、是否提供任务优先级动态改变功能等。而INCLUDES.H则是系统头文件。
处理器相关的代码中包含了对各种不同类型MCU的支持,需要根据自己的MCU对这部分进行修改。针对Keil C51编译器和8051芯片的技术特点,uC/OS-Ⅱ的移植与三个文件相关:处理器相关C文件(OS_CPU.H、OS_CPU_C.C)和汇编文件(OS_CPU_A.ASM)。
(1)修改OS_CPU。H
文件OS_CPU.H中包括了用#define语句定义的与处理器相关的常数、宏以及类型。移植时主要修改的内容有:
·与编译器相关的数据类型的设定。参考Keil C51编译器中的帮助文件C51.PDF,具体路径为\C51\HLP\C51.PDF。
·用#define语句定义了两个宏开关中断,具体实现为:
#define OS_ENTER_CRITICAL()EA=0//关中断
#define OS_EXIT_CRITICAL() EA="1" //开中断
·根据8051堆栈的方向定义OS_STK_GROWTH。
#define OS_STK_GROWTH 0 //8051堆栈从下向上递增
置OS_STK_GROWTH为0,表示堆栈从下(低地址)向上(高地址)递增;置OS_STK_GROWTH为1,表示堆栈从上(高地址)向下(低地址)递减。
·uC/OS-II从低优先级任务切换到高优先级任务时需要用到OS_STK_SW(),通过执行OS_STK_SW()模仿中断的产生。绝大多数CPU会提供
软中断或指令陷阱(TRAP)完成这项功能。中断服务子程序或指令陷阱处理函数(也叫异常处理函数)的中断向量地址必须指向汇编语言函数OSCtxSw()。因为8051没有软中断指令,所以用程序调用代替。
#define OS_TASK_SW() OSCtxSw()
(2)修改OS_CPU_C.C
uC/OS-II的移植范例要求用户编写10个简单的C函数,其中OSTaskStklnit()是必要的,其他9个函数必须声明,但不一定包含任何代码。因为Keil C51在缺省情况下把函数编译为不可重入的结构,而多任务系统要求并发操作导致重入,所以要在每个C函数及其声明后标注reentrant关键字,使编译器生成的代码在运行中支持函数可重入。另外"pdata"、"data"在uC/OS-II中用做一些函数的形参,但它同时又是Keil C51的关键字,这样会导致编译错误。通常可把"pdata''改成"ppdala","data"改成"ddata"解决此问题。具体修改的代码如下:
void * OSTaskStkInit(void (*task)(void *pd),
void *ppdata,
void *ptos,
INT16U opt)reentrant
在基于8051的uC/OS-II中,移植uIP不需要对现有的TCP/IP源代码做任何修改,但是必须为网络设备(如网卡芯片、串口等)写一个驱动程序。同时,现有系统的集成部分也要进行相应的处理,例如当有数据到达或者周期性的定时器计数满等情况下,主控制系统应该调用uIP函数[刘。移植的具体步骤如下:
·在目录uip-0.9/下创建一个自己的目录,例如uip-0.9/8051/;
·把uip_arch.c文件从目录uip-0.9/unix/中复制到目录uip-0.9/8051中;它包含了用C语言实现的32位加法、校验和算法;
·把uipopt.h文件从目录uip-0.9/unix中复制到目录uip-0.9/8051中,并对其进行修改,以满足系统的需要。uipopt.h是ulP的配置文件,其中不仅包含了诸如uIP网点的IP地址和同时可连接的最大值等设置选项,而且还有系统结构和C编译器的特殊选项;
·参考例子unix/tapdev.c和uip/slipdev.c,为串口编写驱动程序;
·参考例子unix/main.c,写自己的主控制系统,以便在适当的时候可以调用ulP函数;
·编译源代码。
本文阐述了基于8051嵌入式系统的GPRS终端的实现,并详细介绍了嵌入式实时操作系统uC/OS-II基于8051的移植以及小型TCP/IP协议栈uIP的移植:该GPRS终端利用GPRS网和Internet能够与相应的GPRS终端以及相应的Internet终端进行数据传输。在GPRS终端的TCP/IP模块中引入时实操作系统不但改善了系统的性能,提高了系统的可靠性,而且增强了系统的可扩展性和产品开发的可延续性。
TCP/IP模块通过RS232串口与GPRS无线模块通信,提供非透明和透明两路通道。相对应地,该模块有两种传输模式:透明模式和非透明模式。通过软件切换,模块在处于不同的传输模式时,数据流向也有所不同。当传送AT指令集时,模块进入透明模式,可以直接访问GPRS无线模块;当模块进人非透明传输方式时,用户数据从串口进入TCP/IP模块后,先十丁成TCP/IP包,再经串口发送给GPRS模块;GPRS无线模块把其封装成GPRS分组数据包传到GPRS网上。TCP/IP模块由基于单片机8051的嵌入式系统实现。选用WINBOODW77E58作为嵌入式系统的微处理器,嵌入式实时操作系统选用uC/OS-II,然后在uC/OS-II中移植uIP实现TCP/IP协议栈。
4.3 GPRS无线模块
GPRS无线模块作为GPRS终端的无线收发模块,把从TCP/IP模块接收的TCP/IP包和从基站接收的GPRS分组数据进行相应的协议处理后再转发。GPRS无线模块采用了SIEMENS公司的MC35 GPRS模块。MC35模块主要由射频天线、内部Flash、SRAM、GSM基带处理器、匹配电源和一个40脚的ZIF插座组成。GSM基带处理器是核心部件,其作用相当于一个协议处理器,用来处理外部系统通过串口发送过来的AT指令。射频天线部分主要实现信号的调制与解调,以及外部射频信号与内部基带处理器之间的信号转换。匹配电源为处理器及射频部分提供所需的电源。MC35 GPRS模块支持GSM900和GSMl800双频网络,接收速率可达86.20kbps,发送速率可达21.5kbps,并且很容易集成。当然最大的数据吞吐量还要依赖于GPRS网络的支持。
5 TCP/IP模块的软件实现
5.1 uC/OS-II在8051上的移植
uC/OS-II是自由软件,非商业的运用如科研、教学都是免费的。任何使用者都可以从互联网上下载其源代码,通过适当的修改加以移植,使其满足自己硬件和系统的需要。为了移植,需要先了解uC/OS-II操作系统的总体结构,图3所示是uC/OS-II的结构及与硬件的关系。
与处理器无关的代码中包含了uC/OS-II的系统函数,在进行系统移植时一般不需要对这部分进行修改;只要将UCOS-II.C文件包含在自己的项目中,即可将uC/OS-II中所有与MCU无关的代码包含到移植的代码中。
与应用相关的代码是用户根据自己的应用系统定制合适的内核服务功能,它包括两个文件:OS_CFG.H、INCLUDES.H。其中OS_CFG.H用来配置内核,用户根据需要对内核进行定制,设置系统的基本情况,例如系统可提供的最大任务数量、是否定制邮箱服务、是否需要系统提供任务挂起功能、是否提供任务优先级动态改变功能等。而INCLUDES.H则是系统头文件。
处理器相关的代码中包含了对各种不同类型MCU的支持,需要根据自己的MCU对这部分进行修改。针对Keil C51编译器和8051芯片的技术特点,uC/OS-Ⅱ的移植与三个文件相关:处理器相关C文件(OS_CPU.H、OS_CPU_C.C)和汇编文件(OS_CPU_A.ASM)。
(1)修改OS_CPU。H
文件OS_CPU.H中包括了用#define语句定义的与处理器相关的常数、宏以及类型。移植时主要修改的内容有:
·与编译器相关的数据类型的设定。参考Keil C51编译器中的帮助文件C51.PDF,具体路径为\C51\HLP\C51.PDF。
·用#define语句定义了两个宏开关中断,具体实现为:
#define OS_ENTER_CRITICAL()EA=0//关中断
#define OS_EXIT_CRITICAL() EA="1" //开中断
·根据8051堆栈的方向定义OS_STK_GROWTH。
#define OS_STK_GROWTH 0 //8051堆栈从下向上递增
置OS_STK_GROWTH为0,表示堆栈从下(低地址)向上(高地址)递增;置OS_STK_GROWTH为1,表示堆栈从上(高地址)向下(低地址)递减。
·uC/OS-II从低优先级任务切换到高优先级任务时需要用到OS_STK_SW(),通过执行OS_STK_SW()模仿中断的产生。绝大多数CPU会提供
软中断或指令陷阱(TRAP)完成这项功能。中断服务子程序或指令陷阱处理函数(也叫异常处理函数)的中断向量地址必须指向汇编语言函数OSCtxSw()。因为8051没有软中断指令,所以用程序调用代替。
#define OS_TASK_SW() OSCtxSw()
(2)修改OS_CPU_C.C
uC/OS-II的移植范例要求用户编写10个简单的C函数,其中OSTaskStklnit()是必要的,其他9个函数必须声明,但不一定包含任何代码。因为Keil C51在缺省情况下把函数编译为不可重入的结构,而多任务系统要求并发操作导致重入,所以要在每个C函数及其声明后标注reentrant关键字,使编译器生成的代码在运行中支持函数可重入。另外"pdata"、"data"在uC/OS-II中用做一些函数的形参,但它同时又是Keil C51的关键字,这样会导致编译错误。通常可把"pdata''改成"ppdala","data"改成"ddata"解决此问题。具体修改的代码如下:
void * OSTaskStkInit(void (*task)(void *pd),
void *ppdata,
void *ptos,
INT16U opt)reentrant
在基于8051的uC/OS-II中,移植uIP不需要对现有的TCP/IP源代码做任何修改,但是必须为网络设备(如网卡芯片、串口等)写一个驱动程序。同时,现有系统的集成部分也要进行相应的处理,例如当有数据到达或者周期性的定时器计数满等情况下,主控制系统应该调用uIP函数[刘。移植的具体步骤如下:
·在目录uip-0.9/下创建一个自己的目录,例如uip-0.9/8051/;
·把uip_arch.c文件从目录uip-0.9/unix/中复制到目录uip-0.9/8051中;它包含了用C语言实现的32位加法、校验和算法;
·把uipopt.h文件从目录uip-0.9/unix中复制到目录uip-0.9/8051中,并对其进行修改,以满足系统的需要。uipopt.h是ulP的配置文件,其中不仅包含了诸如uIP网点的IP地址和同时可连接的最大值等设置选项,而且还有系统结构和C编译器的特殊选项;
·参考例子unix/tapdev.c和uip/slipdev.c,为串口编写驱动程序;
·参考例子unix/main.c,写自己的主控制系统,以便在适当的时候可以调用ulP函数;
·编译源代码。
本文阐述了基于8051嵌入式系统的GPRS终端的实现,并详细介绍了嵌入式实时操作系统uC/OS-II基于8051的移植以及小型TCP/IP协议栈uIP的移植:该GPRS终端利用GPRS网和Internet能够与相应的GPRS终端以及相应的Internet终端进行数据传输。在GPRS终端的TCP/IP模块中引入时实操作系统不但改善了系统的性能,提高了系统的可靠性,而且增强了系统的可扩展性和产品开发的可延续性。
单片机 嵌入式 C语言 MCU 蓝牙 红外 看门狗 振荡器 CMOS 射频 Keil 相关文章:
- USB接口芯片的原理及应用 (04-15)
- 基于GPRS的远程心电实时监护终端(02-10)
- 基于AVR单片机的嵌入式“瘦服务器”系统设计思想(03-11)
- 利用C8051F020的SPI接口扩展大容量数据存储器(04-10)
- 基于GPRS的油烟远程无线监控系统设计(04-17)
- 基于Microchip单片机的网络收音机方案(04-27)