int main (void)
{//系统初始化
SystemInit();// IOCON使能 GPIO使能
SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_IOCON, ENABLE);SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_GPIO0, ENABLE);
//看门狗初始化,启动看门狗 WDTInit(); WDTStart();
//如果Flash为空,标志置位,否则标志为假,直接读取IP,端口号,电话号码,节点信息
if(IAP_FlashBlankCheck() == true){ SectorBlankMark = true; } else{ SectorBlankMark = false; IAP_Read_IP(); IAP_Read_Phone(); IAP_Read_Node_Info(); }
//按键初始化,LED初始化,串口初始化,定时器初始化.ZigBee初始化,喂狗
HalKeyInit();
HalLedInit(); uartInit(); Timer32Init(2000); InitZigBee(); WDTFeed();//EM310复位,喂狗 (EM310复位需要较长的时间,在复位前后均进行了一次喂狗)
HalResetEM310();
WDTFeed();//等待EM310就绪,
WaitEM310Ready();
if(InitEM310() == false) while(1);//EM310就绪后1.LED眨眼,想手机发送就绪状态.
HalLedBlink(HAL_LED_ALL, 3, 100, 200); SendMeg(REPORT_READY_NUM,"Ready to connect to server!"); DelayMS(500); //死循环里有四个分支: while(1) {//分支1: 按键事件:----------------处理按键,然后喂狗.
if(KeyState & KEY_MASK){
ProcessKey(); WDTFeed(); } //分支2:响铃事件---------------------处理短信|电话,然后喂狗. //if(RING_MARK){ ProMegOrCall(); WDTFeed(); //}//分支3:GPRS连接-----------------------串口:来自ZigBee|GPRS发到ZigBee
//问题是:这里的GPRS有两个方向?GprsRevData,GprsRevLeftData if(GPRS_STATE == GPRS_CONNECT_STATE){
Gprs_Buf.dLength = uart0FIFOGets(Gprs_Buf.Buffer,2,MAX_UART0_BUFFER_SIZE); if (Gprs_Buf.dLength > 0){ HalLedBlink(HAL_LED_2, 1, 50, 100); ProInfoFromZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength); WDTFeed(); } Gprs_Buf.dLength = GprsRevData(Gprs_Buf.Buffer,2); if (Gprs_Buf.dLength > 0){ HalLedBlink(HAL_LED_3, 1, 50, 100); ProInfoToZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength); WDTFeed(); } Gprs_Buf.dLength = GprsRevLeftData(Gprs_Buf.Buffer); if (Gprs_Buf.dLength > 0){ HalLedBlink(HAL_LED_2|HAL_LED_3, 1, 50, 100); ProInfoToZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength); WDTFeed(); } }else if(GPRS_STATE == GPRS_DISCONNECT_STATE)
HalLedBlink(HAL_LED_ALL,1,20,500); //分支4:定时器中断----------------保存节点信息. if(Timer32IntMark == true){ Timer32IntMark = false; IAP_SaveNodeInfo(); } WDTFeed(); //喂狗----不停的喂狗}
}
总结下总体的流程
1.系统初始化
2.外设时钟使能:IOCON,GPIO0
3.看门狗初始化,启动看门狗
4.读取ip,电话号码,节点信息
4.按键.LED,串口,定时器.ZigBee初始化
5.喂狗
6.EM310复位,喂狗,等待EM310初始化完成.
7.EM310初始化完成
8死循环:
- 分支1: 按键事件:----------------处理按键,然后喂狗.
- 分支2:响铃事件---------------------处理短信|电话,然后喂狗.
- 分支3:GPRS连接-----------------------串口:来自ZigBee|GPRS发到ZigBee
- 分支4:定时器中断----------------保存节点信息.
- 喂狗
究竟有哪些事情要做?
按键---->复位LPC
短信|电话---->配置网关
定时器中断--->保存节点信息
==>重点是: PRS
在GPRS分支里,所有数据放到Gprs_Buf.Buffer里
从串口FIFO里接收到数据
从GprsRevData接收数据
从GprsRevLeftData接收数据.
//问题是:这里的GPRS有两个方向?GprsRevData,GprsRevLeftData什么意思?
一直听的一首歌: