GateWay程序分析01_主程序分析

本文介绍了基于LPC12xx微控制器的嵌入式系统开发流程,包括按键、LED控制、串口通信、ZigBee无线通信及GPRS模块的初始化与使用。详细展示了各个模块的配置过程及关键函数的声明。

  1    /**************************************************************************×**
  2     * LightGateway
  3     * @file    
  4     * @brief   
  5     * @version  1.0
  6     * @date     22. Sep. 2011
  7     * @author   杨校权
  8     *        
  9     * 尊重他人劳动成果!
10     *
11     ******************************************************************************/
12   
13    #include "lpc12xx_libcfg.h"// 调试模式定义,  外设库配置定义与包含
14   
15    #include "KEY.h"

//宏定义:按键引脚定义

//函数声明:HalKeyInit和ProcessKey.
16   
17    #include "LED.h"

//宏定义:三个LED引脚定义LED1,23 ,灯的模式定义(开/关/眨眼/闪光/摇头?)

//函数声明: HlLedInit(),HlLedOnOff(),HalLdeBlink()
18   
19    #include "Uart.h"

//宏定义:串口波特率,UART0/1最大串口缓存大小.串口等待时间间隔.

//结构体定义: 缓存数组,头部,尾部,数据长度.

//函数声明: 串口初始化uartSendByte(),串口发送字节uartSendByte(),串口发送字符uartSendStr(),串口发送uartSend(),uart0FIFOGets(),UARTFIFOGets().

//全局变量: 串口缓冲数据,串口缓冲数组大小
20   
21    #include "EM310.h"

//全局变量: GPRS_STATE,MessageCmd,PING_MARK,Gprg_Buf

//宏定义:  最大GPRS缓冲大小.

//结构体定义: GPRS_BUFFER(Buffer数组,,数据长度,数据)

//函数声明:

uart1PutAT(),

GprsSendAT(),

uart1PutByteFormat(),

charToHex(),

ProcessGprsInfo(),

Process_MegInfo(),

InitTERN_ON_PIN(),

OpenEM310(),

CloseEM310(),

Pattern_Match(),

HalResetEM310(),

Start_GPRS(),

Close_GPRS(),

WaitEM310Ready(),

GprsRevData(),

GprsSendData(),

GprsRevLeftData(),

GprsRevLeftDta(),

Process_MegCmdnfo(),

InitEM310(),

RevMeg(),

SendMegToALL(),

SendBackMeg(),

SendMeg(),

ProMegOrCall()
22   
23    #include "phoneNumber.h"

/*

宏定义: 最大保存电话号码数

结构体:PHONE_ID(号码长度,有效性,当前号码)

全局变量: MY_PHONE_NUMVER[]

函数声明: AddPhoneId

                      DeletePhoneId

                     InitPhoneNum()

                    RecordNewMegRevPhoneID()

                   returnValidPhone()

*/
24   
25    #include "ZigBee.h"

/* 

宏定义:

  • ZIGBEE_RST_PORT    复位端口
  • ZIGBEE_RST_PIN 复位引脚       
  • ZIGBEE_RST_PIN_NUM 复位引脚号
  • ZIGBEE_NODE_NUM 最大节点数目
  • MAX_DATA_FIELD_SIZE最大数据域大小
  • CTL_FIELD_SIZE控制域长度
  • NODE_ADDR_SIZE节点地址长度
  • MAX_COM_PACK_SIZE最大数据包长度

typedef struct
{
    uint8  bLogicalType;        //节点类型
    uint8  bNodeId;             //节点号
}NODE_TYPE_ID;

typedef struct
{
    union
    {
        NODE_TYPE_ID     TypeId;
        uint16          wSelfSAddr;       //节点自身网络地址,即短地址
    }choice;
    uint8  bFunctionId;          //功能码
    uint8  bOperation;          //操作类型
    uint8  bLength;         //dataBuffer中有效数据长度
}CONTROL_FIELD;
extern CONTROL_FIELD ctlField;


typedef struct
{
    uint16 wSelfSAddr;            //节点自身网络地址,即短地址
    uint16 wFatherSAddr;          //其父节点网络地址
}NODE_ADDR;

typedef struct
{
    union
    {
        NODE_ADDR     NodeAddr;
        uint32      doubleWord;
        uint16      word;
        uint8          dataBuffer[MAX_DATA_FIELD_SIZE];
    }dataType;
}DATA_FIELD;
extern DATA_FIELD dataField;


//-----------------------------------------------------------------------------

typedef struct
{
    uint8          bLogicalType;        //节点类型
    NODE_ADDR     NodeAddr;             //节点自身地址和父节点地址
    bool          Active;
}NODE_INFORMATION;

extern NODE_INFORMATION  NodeInfo[];


//-----------------终端节点号宏定义-------------------
#define END_NODE_0          0
#define END_NODE_1          1
#define END_NODE_2          2
#define END_NODE_3          3
#define END_NODE_4          4
#define END_NODE_5          5
#define END_NODE_6          6
#define END_NODE_7          7
#define END_NODE_8          8
#define END_NODE_9          9
#define END_NODE_10        10
#define END_NODE_11        11
#define END_NODE_12        12
#define END_NODE_13        13
#define END_NODE_14        14
#define END_NODE_15        15

//-----------节点上各种传感器、控制器的功能号--------
#define NODE_PHOTOSENSITIVE   0         //节点的光敏传感器
#define NODE_LED3             1         //节点的LED1口
#define NODE_LED4             2         //节点的LED2口
#define NODE_CON1             3         //节点的CON1口
#define NODE_CON2             4         //节点的CON2口
#define NODE_CON3             5         //节点的CON3口
#define NODE_CON4             6         //节点的CON4口             
#define NODE_RTC              7         //节点的RTC时间
#define NODE_WORK_MODEL       8         //节点工作模式设置
#define NODE_LIGHT_LIFE       9         //节点所连路灯是否损坏
#define NODE_TIME_SEGMENT     10        //节点自动工作时间段
#define NODE_MUST_SHINE       11        //节点半夜必须点亮,只有对于路口处的路灯,半夜必须点亮
#define RST_GATEWAY              0xf4        //重启网关
#define GATEWAY_ID                0xf5        //上位机获取网关ID
#define GATEWAY_PHONE          0xf6        //上位机获取网关中保持的手机号信息   
#define POLL_COOR              0xf7        //路由器和终端节点轮询协调器的存在,如果协调器不存在,路由器和终端节点重启自身
#define PING_COOR              0xf8      //Ping协调器模块,正常情况下协调器收到后信息原样返回给网关
#define START_COOR              0xf9        //开启协调器
#define STOP_COOR              0xfa        //关闭协调器
#define RST_COOR              0xfb      //复位重启协调器,网关通过下拉ZigBee的RST引脚实现复位
#define NET_INFO              0xfc      //提取网络环境信息,该命令只能用于协调器
#define NODE_INFO             0xfe      //节点信息(设备编号、设备类型、设备编号、自身网络地址、父节点网络地址)
#define NODE_POLL             0xff      //全网节点轮询,协调器定时广播,一实现自组织


//------------------节点类型----------------------------
#define LOGICAL_TYPE_COORDINATOR      0x00  //协调器类型
#define LOGICAL_TYPE_ROUTER           0x01  //路由器类型
#define LOGICAL_TYPE_ENDDEVICE        0x02  //终端节点类型

//--------------------------操作类型------------------------
#define    READ_OPERATION                        0x00      //读操作
#define    WRITE_OPERATION                       0x01      //写操作
#define    UPDATE_OPERATION                      0x02      //更新操作
#define ACK_OPERATION                        0x03    //网关反馈成功操作   
//-------------------------------------------------------------------
#define    FORCE_OPEN_OPERATION                  0x04      //单灯开启操作
#define    FORCE_CLOSE_OPERATION                 0x05      //单灯关闭操作
#define    FORCE_ODD_OPEN_OPERATION              0x06      //奇数灯开启操作
#define    FORCE_ODD_CLOSE_OPERATION             0x07      //奇数灯关闭操作
#define    FORCE_EVEN_OPEN_OPERATION             0x08      //偶数灯开启操作
#define    FORCE_EVEN_CLOSE_OPERATION            0x09      //偶数灯关闭操作
//-------------------------------------------------------------------
#define    AUTO_ODD_OPERATION                    0x0a      //自动奇数操作
#define    AUTO_EVEN_OPERATION                   0x0b      //自动操偶数作
#define AUTO_ONE_HALF_OPERATION               0x0c    //节点1 3号灯自动开启操作
#define AUTO_ANOTHER_HALF_OPERATION           0x0d    //节点2 4号灯自动开启操作
#define    AUTO_ALL_OPERATION                    0x0e      //自动操作
//-------------------------------------------------------------------

 

//-----------------------协调器网络状态-----------------
#define    NET_UNBUILDED                       0x00      //尚未建网
#define    NET_BUILDED                            0x01      //已经建网

//------------------------光照强度------------------------
#define LIGHT_BRIGHT                          0x00    //亮
#define LIGHT_DIM                             0x01    //暗

//------------------------LED的状态-------------------------
#define    LED_OFF                                0x00      //灭
#define    LED_ON                                 0x01      //亮

//--------------------光耦合的状态--------------------
#define    CON_OFF                                0x00      //断开
#define    CON_ON                                 0x01      //开启

//--------------------路灯工作状态--------------------
#define LIGHT_OFF                             0x00      //断开
#define LIGHT_ON                             0x01      //开启

//--------------------节点工作模式--------------------
#define    AUTO_ODD_WORK_MODEL                   0x00    //夜里奇数灯开启的节点自动工作模式
#define    AUTO_EVEN_WORK_MODEL                  0x01    //夜里偶数灯开启的节点自动工作模式
#define    AUTO_ALL_WORK_MODEL                   0x02    //夜里所有灯开启的节点自动工作模式
#define FORCE_WORK_MODEL                      0x03       //节点强制工作模式

//-----------------------------------------------------------------------------

void InitZigBeeRstPin(void);

void ResetZigBee(void);

void StopZigBee(void);

void StartZigBee(void);

bool PingZigBee(void);

void GprsAck(CONTROL_FIELD const * const RevCtl);

extern void ClrZigBeeNodeInfo(void);

extern void InitZigBee(void);

extern void ProInfoToZigBee(uint8 const * const s, int16 size);

extern void ProInfoFromZigBee(uint8 const * const s, int16 size);

extern void PrintNodeInfo(void);

extern void ReturnActiveNode(void);

extern  void requestPcNowTime(void);

#ifdef __cplusplus
}
#endif

#endif

*/
26   
27    #include "IAP_Flash.h"
28   
29    #include "Timer.h"
30   
31    #include "Delay.h"
32   
33    #include "WDT.h"
34   
35    #include "BuildOpt.h"
36   
37    int main (void)
38    {   
39        SystemInit();                                                      
40        SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_IOCON, ENABLE);                                    
41        SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_GPIO0, ENABLE);                     
42       
43        WDTInit();                                                           
44        WDTStart();                                                           
45       
46        if(IAP_FlashBlankCheck() == true){                                   
47            SectorBlankMark = true;
48        }
49        else{        
50            SectorBlankMark = false;
51            IAP_Read_IP();                                                    
52            IAP_Read_Phone();
53            IAP_Read_Node_Info();
54        }
55   
56        HalKeyInit();                                                       
57        HalLedInit();                                                       
58        uartInit();                                                           
59        Timer32Init(2000);                                                   
60       
61        InitZigBee();                                                       
62        WDTFeed();                                                           
63   
64        HalResetEM310();                                                   
65        WDTFeed();                                                           
66       
67        WaitEM310Ready();                                                   
68       
69        if(InitEM310() == false)                                           
70            while(1);                                                       
71       
72       
73        HalLedBlink(HAL_LED_ALL, 3, 100, 200);                               
74        SendMeg(REPORT_READY_NUM,"Ready to connect to server!");
75        DelayMS(500);
76       
77       
78        while(1) {
79           
80            if(KeyState & KEY_MASK){
81                ProcessKey();
82                WDTFeed();                                                  
83            }
84           
85            //if(RING_MARK){           
86                ProMegOrCall();
87                WDTFeed();                                                  
88            //}   
89           
90            if(GPRS_STATE == GPRS_CONNECT_STATE){
91                Gprs_Buf.dLength = uart0FIFOGets(Gprs_Buf.Buffer,2,MAX_UART0_BUFFER_SIZE);         
92                if (Gprs_Buf.dLength > 0){                                    
93                    HalLedBlink(HAL_LED_2, 1, 50, 100);       
94                    ProInfoFromZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
95                    WDTFeed();                                                  
96                }
97           
98                Gprs_Buf.dLength = GprsRevData(Gprs_Buf.Buffer,2);           
99                if (Gprs_Buf.dLength > 0){                                   
100                    HalLedBlink(HAL_LED_3, 1, 50, 100);
101                    ProInfoToZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
102                    WDTFeed();                                                  
103                }
104               
105                Gprs_Buf.dLength = GprsRevLeftData(Gprs_Buf.Buffer);   
106                if (Gprs_Buf.dLength > 0){
107                    HalLedBlink(HAL_LED_2|HAL_LED_3, 1, 50, 100);
108                    ProInfoToZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
109                    WDTFeed();                                                  
110                }
111            }
112   
113            else if(GPRS_STATE == GPRS_DISCONNECT_STATE)
114                HalLedBlink(HAL_LED_ALL,1,20,500);
115           
116           
117            if(Timer32IntMark == true){                   
118                Timer32IntMark = false;
119                IAP_SaveNodeInfo();                       
120            }
121                           
122            WDTFeed();                                  
123   
124        }
125   
126    }
127   
128   
129   
130    /*********************************************************************************************************
131    End Of File
132    *********************************************************************************************************/

2013年4月9日 15:35:36

转载于:https://www.cnblogs.com/xilifeng/archive/2013/04/09/3010853.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值