Sub_C.C
上传用户:zanguozi01
上传日期:2014-02-19
资源大小:155k
文件大小:57k
源码类别:

GPS编程

开发平台:

Others

  1. /********************************************************
  2. * 文件名:  Sub_C.C
  3. * 创建时间:2004年12月7日
  4. * 创建人:  
  5. * 版本号:  1.00
  6. * 功能:   包括一些公共能调用的子程序部分
  7. * 文件属性:公共文件
  8. * 修改历史:(每条详述)
  9. ********************************************************/
  10. #include <msp430x14x.h>
  11. #include "Sub_C.h"
  12. #include "General.h"
  13. #include "Define_Bit.h"
  14. #include "SPI45DB041.h"
  15. #include "D_Buffer.h"
  16. #include "Other_Define.h"
  17. #include "M22_AT.h"
  18. #include "Check_GSM.h"
  19. #include "W_Protocol.h"
  20. #include "Do_Other.h"
  21. #include "TA_Uart.h"
  22. #include "Handle_Protocol.h"
  23. #include "Uart01.h"
  24. #include "Do_SRAM.h"
  25. #include "Msp430_Flash.h"
  26. /*
  27. #include "Do_GSM.h"
  28. #include "Main_Init.h"
  29. #include "Do_Reset.h"
  30. #include "Do_Handle.h"
  31. #include "Do_GPS.h"
  32. #include "Do_Disp.h"
  33. #include "Msp430_Flash.h"
  34. */
  35. void Check_Flash(unsigned int Add_Sector);
  36. void Write_Phone_Buffer2(unsigned char Add_Flag);
  37. //#define Debug_GSM_COM1
  38. /********************************************************
  39. * 函数名:ASCII
  40. 作用域:外部文件调用
  41. * 功能:  将一个数转换ASCII数值比如数值1,转换完后的结果为0x31
  42. * 参数:  Input
  43. * 返回值:char  一个ASCII字符的数值
  44. * 创建人:
  45. *
  46. * 修改历史:(每条详述)
  47. ********************************************************/
  48. unsigned char ASCII( unsigned char Input )
  49. {
  50. if( Input>9 ) return( Input+0x37 );
  51. else return( Input+0x30 );
  52. }
  53. /********************************************************
  54. * 函数名:ASCIITOHEX
  55. 作用域:外部文件调用
  56. * 功能:  将ASCII字符转换为16进制的数比如0x31,0x32,转换完后返回的结果为12
  57. * 参数:  Input_H,Input_L
  58. * 返回值:char 一个16进制的数
  59. * 创建人:
  60. *
  61. * 修改历史:(每条详述)
  62. ********************************************************/
  63. unsigned char ASCIITOHEX( unsigned char Input_H,unsigned char Input_L )
  64. {
  65.     if( Input_H>0x39 ) Input_H=Input_H-0x37;
  66.     else Input_H=Input_H-0x30;
  67.     if( Input_L>0x39 ) Input_L=Input_L-0x37;
  68.     else Input_L=Input_L-0x30;
  69.     return( Input_H*16+Input_L );
  70. }
  71. /********************************************************
  72. * 函数名:Compare_String
  73. 作用域:外部文件调用
  74. * 功能:  比较两个字符串是否相同
  75. * 参数:  *Source 需要比较的字符串的的头指针
  76.             *Target 用来做比较标准的字符串头指针
  77.              Count  需要比较的长
  78. * 返回值:0 表示比较结果不相同
  79.             1   表示比较结果相同
  80. * 创建人:
  81. *
  82. * 修改历史:(每条详述)
  83. ********************************************************/
  84. unsigned char Compare_String(unsigned char *Source,unsigned char *Target,unsigned int Count )
  85. {
  86.     while(Count>0)
  87.     {
  88.         if((*Source)!=(*Target)) return(0);
  89.         Source++;
  90.         Target++;
  91.         Count--;
  92.     }
  93.     return(1);
  94. }
  95. /********************************************************
  96. * 函数名:Reset_Variable
  97. 作用域:外部文件调用
  98. * 功能:  设置能进入复位G20的一些参数变量
  99. * 参数:
  100. * 返回值:
  101. * 创建人:
  102. *
  103. * 修改历史:(每条详述)
  104. ********************************************************/
  105. void Reset_Variable(void)
  106. {
  107. unsigned int i=0;
  108. gGeneral_Flag|=RESET_GSM_ON_F_1;
  109. gReset_M22_On_Setp=1;
  110. gGeneral_Flag&=~LAND_TCP_F_1;
  111. gM22_Status=GSM_WORK;
  112. gGeneral_Flag&=~LAND_TCP_SUCCESS_F_1;
  113. gOther_Flag&=~QUIT_TCP_F_1;
  114. gM22_GSM_ECHO_Timer=0;
  115. gLand_Interval_Timer=0;
  116. gTCP_FF0D_Send_Timer=0;
  117. gGPS_No_Output_Timer=0;
  118. gTimer_GSM_AT=0;
  119. gTimer_CSQ=0;
  120. gGPS_Receive_Over=0;
  121.     gPhone_Status=READY;
  122. gStatus1_Flag&=~PHONE_ONLINE_F_1;
  123. gGeneral_Flag&=~DAILING_UP_F_1;
  124. gGeneral_Flag&=~MONITOR_ON_F_1;
  125. gGeneral_Flag&=~TCP_PHONE_F_1;
  126. gGeneral_Flag&=~RING_F_1;
  127. gGSM_Oper_Type=0;
  128. gSMS_IN_Step=0;
  129. gSMS_OUT_Step=0;
  130. gLand_GPRS_Step=0;
  131. gGPRS_Data_Step=0;
  132. gGSM_OTHER_Step=0;
  133. for(i=0;i<sizeof(gReceive0_GSM_Buffer);i++)
  134. {
  135. gReceive0_GSM_Buffer[i]=0;
  136. }
  137. gReceive0_GSM_Buffer_End=sizeof(gReceive0_GSM_Buffer)-1;
  138. gReceive0_GSM_Buffer_Point=0;
  139. gReceive0_GSM_Buffer_Move=0;
  140. gReceive1_Point=SRAM_RECORD_S;
  141. SRAM_Init();
  142. SRAM_Write(PHONE_AT_2+0,NULL_2);
  143. for(i=PHONE_AT_2+1;i<END_SRAM_2;i++)
  144. {
  145. SRAM_Write(i,0);
  146. }
  147. }
  148. /********************************************************
  149. * 函数名:Clear_Exter_WatchDog
  150. 作用域:外部文件调用
  151. * 功能:  喂狗操作,(外部硬件看门狗的操作)翻转WDI管脚的电平
  152. * 参数:
  153. * 返回值:
  154. * 创建人:
  155. *
  156. * 修改历史:(每条详述)
  157. ********************************************************/
  158. void Clear_Exter_WatchDog(void)
  159. {
  160. if( (gOther_Flag&RESET_PROGRAME_F_1)==0 )
  161. {
  162. if(P6IN&WDI)
  163. {
  164. P6OUT&=~WDI; //如果是高电位,则翻转为低电位
  165. }
  166. else
  167. {
  168. P6OUT|=WDI; //如果是低电位,则翻转为高电位
  169. }
  170. }
  171. }
  172. /********************************************************
  173. * 函数名:Wait_OK
  174. 作用域:本文件调用
  175. * 功能:  判断大多的AT指令是否返回OK
  176. * 参数:  无
  177. * 返回值: 无
  178. * 创建人:
  179. *
  180. * 修改历史:(每条详述)
  181. ********************************************************/
  182. void Wait_OK(void)
  183. {
  184. gTimer=0;
  185. while(gTimer<5000)
  186. {
  187. Clear_Exter_WatchDog();
  188. if(Check_GSM()!=0)
  189. {
  190.     if(Compare_String(gGeneral_Buffer,(unsigned char *)String_OK,sizeof(String_OK))!=0)
  191.     {
  192.      gInternal_Flag|=M22_RETURN_OK_1;
  193.      break;
  194.     }
  195.     else if(Compare_String(gGeneral_Buffer,(unsigned char *)String_ER,sizeof(String_ER))!=0)
  196.     {
  197.      break;
  198.     }
  199. }
  200. }
  201. }
  202. /********************************************************
  203. * 函数名:Copy_String
  204. 作用域:外部文件调用
  205. * 功能:  移动
  206. * 参数:  无
  207. * 返回值: 无
  208. * 创建人:
  209. *
  210. * 修改历史:(每条详述)
  211. ********************************************************/
  212. void Copy_String( unsigned char *PS,unsigned char *PD,unsigned int COUNT )
  213. {
  214.     unsigned int i;
  215.     for( i=0;i<COUNT;i++ )
  216.     {
  217.         *(PD+i)=*(PS+i);
  218.     }
  219. }
  220. /********************************************************
  221. * 函数名:Write_PartData_Buffer1()
  222. 作用域:外部文件调用
  223. * 功能:
  224. * 参数:  无
  225. * 返回值: 无
  226. * 创建人:
  227. *
  228. * 修改历史:(每条详述)
  229. ********************************************************/
  230. /********************************************************
  231. * 函数名:Write_PartData_Sram()
  232. 作用域:外部文件调用
  233. * 功能:
  234. * 参数:  无
  235. * 返回值: 无
  236. * 创建人:
  237. *
  238. * 修改历史:(每条详述)
  239. ********************************************************/
  240. void Write_PartData_Sram(unsigned int S_Address)
  241. {
  242. unsigned char nFlag;
  243. nFlag=gAlarm_Type;
  244. //4个字节的经度
  245. SRAM_Write(S_Address+1,gLongitude/0x1000000);
  246. SRAM_Write(S_Address+2,gLongitude%0x1000000/0x10000);
  247. SRAM_Write(S_Address+3,gLongitude%0x10000/0x100);
  248. SRAM_Write(S_Address+4,gLongitude%0x100);
  249. //4个字节的纬度
  250. SRAM_Write(S_Address+5,gLatitude/0x1000000);
  251. SRAM_Write(S_Address+6,gLatitude%0x1000000/0x10000);
  252. SRAM_Write(S_Address+7,gLatitude%0x10000/0x100);
  253. SRAM_Write(S_Address+8,gLatitude%0x100);
  254. //速度,角度
  255. SRAM_Write(S_Address+9,gSpeed);
  256. SRAM_Write(S_Address+10,gAzimuth);
  257. //Flag标志位(判断是否GPS有效果)
  258. if(gGeneral_Flag&GPS_VALID_F_1) nFlag|=FLAG_GPSVAILD_1;
  259. else nFlag&=~FLAG_GPSVAILD_1;
  260. SRAM_Write(S_Address+11,nFlag);
  261. //时间,年,月,日,时,分,秒
  262. SRAM_Write(S_Address+12,gYear);
  263. SRAM_Write(S_Address+13,gMonth);
  264. SRAM_Write(S_Address+14,gDate);
  265. SRAM_Write(S_Address+15,gHour);
  266. SRAM_Write(S_Address+16,gMinute);
  267. SRAM_Write(S_Address+17,gSecond);
  268. }
  269. /********************************************************
  270. * 函数名:Write_PartData_Buffer1()
  271. 作用域:外部文件调用
  272. * 功能:
  273. * 参数:  无
  274. * 返回值: 无
  275. * 创建人:
  276. *
  277. * 修改历史:(每条详述)
  278. ********************************************************/
  279. void Page_R_Write_Check(unsigned int Page)
  280. {
  281. unsigned int i=0,j=0;
  282. OperateSPIEnd();
  283. j=ReadByteFromBuffer2(0);
  284. for(i=1;i<254;i++) j+=ReadNextFromBuffer2();
  285. OperateSPIEnd();
  286. WriteOneByteToBuffer2(254,j/256);
  287. WriteNextByteToBuffer2(j%256);
  288. OperateSPIEnd();
  289. //将重新计算过的buffer2数据写入扇区0
  290. P6OUT|=SPI45DB041_WP;
  291. WriteBuffer2ToPage(Page);
  292. P6OUT&=~SPI45DB041_WP;
  293. OperateSPIEnd();
  294. }
  295. /********************************************************
  296. * 函数名:Send_STOP_DealWay()
  297. 作用域:外部文件调用
  298. * 功能:
  299. * 参数:  无
  300. * 返回值: 无
  301. * 创建人:
  302. *
  303. * 修改历史:(每条详述)
  304. ********************************************************/
  305. void Send_STOP_DealWay(unsigned char nCommand,unsigned char nACK)
  306. {
  307. unsigned char VCommand=0;
  308. VCommand=nCommand;
  309. SRAM_Init();
  310. SRAM_Write(ECHO_SMS_2+0,VAILD_2);
  311. SRAM_Write(ECHO_SMS_2+1,VCommand);
  312. SRAM_Write(ECHO_SMS_2+2,nACK);
  313. SRAM_Write(ECHO_SMS_2+3,28);
  314. SRAM_Write(ECHO_SMS_2+4,0);
  315. SRAM_Write(ECHO_SMS_2+5,gYear);
  316. SRAM_Write(ECHO_SMS_2+6,gMonth);
  317. SRAM_Write(ECHO_SMS_2+7,gDate);
  318. SRAM_Write(ECHO_SMS_2+8,gHour);
  319. SRAM_Write(ECHO_SMS_2+9,gMinute);
  320. SRAM_Write(ECHO_SMS_2+10,gSecond);
  321. //经度,纬度,速度,角度,报警标志,当前时间
  322. Write_PartData_Sram(ECHO_SMS_2+10);
  323. SRAM_Write(ECHO_SMS_2+10+18,0);
  324. SRAM_Write(ECHO_SMS_2+10+19,gStatus3_Flag);
  325. SRAM_Write(ECHO_SMS_2+10+20,gStatus2_Flag);
  326. SRAM_Write(ECHO_SMS_2+10+21,gStatus1_Flag);
  327. Judge_SMS_Way();
  328. }
  329. /********************************************************
  330. * 函数名:Disp_Handle_Steal_Alarm_Echo()
  331. 作用域:本地文件调用
  332. * 功能: 接收到来自显示终端主动改变密码的信令
  333. * 参数:
  334. * 返回值:
  335. * 创建人:
  336. *
  337. * 修改历史:(每条详述)
  338. ********************************************************/
  339. void Disp_Handle_Steal_Alarm_Echo(void)
  340. {
  341. //密码连续超过3次错误,则产生被盗报警
  342. //将被盗报警信息存储在Flash中
  343. gAlarm_Type=STEAL_ALARM;
  344. gSMS_ACK[ALARM_ACK]=0;
  345. OperateSPIEnd();
  346. ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);
  347. OperateSPIEnd();
  348. WriteOneByteToBuffer2(ALARM_F_2,STEAL_ALARM);
  349. WriteNextByteToBuffer2( (char)(~STEAL_ALARM) );
  350. OperateSPIEnd();
  351. gCycle_Alarm=ALARM_CIRCLE_TIME;
  352. RFlash_Sector(FLASH_INFO2_ONE_2);
  353. gCycle_Send_Status=ALARM_DATA;
  354. gCircle_Timer=0;
  355. gSMS_ACK[ALARM_ACK]=0;
  356. Circle_Data_TCP(ALARM_UP,gSMS_ACK[ALARM_ACK]);
  357. gInternal_Flag|=SEND_CIRCLE_F_1;
  358. Judge_SMS_Way();
  359. }
  360. /********************************************************
  361. * 函数名:Load_Flash_Par_Buffer1()
  362. 作用域:本地文件调用
  363. * 功能:
  364. * 参数:
  365. * 返回值:
  366. * 创建人:
  367. *
  368. * 修改历史:(每条详述)
  369. ********************************************************/
  370. void  Load_Flash_Par_Buffer1(void)
  371. {
  372. unsigned int i=0;
  373. unsigned char Check_Data=0;
  374. //车型,车类,车组,车号的处理
  375. OperateSPIEnd();
  376. ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
  377. OperateSPIEnd();
  378. gType=ReadByteFromBuffer2(VEH_TYPE_2);
  379. gKind=ReadNextFromBuffer2();
  380. gGroup=ReadNextFromBuffer2();
  381. gVID = ReadNextFromBuffer2();
  382. gVID<<=8;
  383. gVID += ReadNextFromBuffer2();
  384. OperateSPIEnd();
  385. //1,目标号码1的处理
  386. gGeneral_Buffer[TARGET_NUMBER1_2]=ReadByteFromBuffer2(TARGET_NUMBER1_F_2); //读目标电话号码的长度
  387. Check_Data=0;
  388. if( (gGeneral_Buffer[TARGET_NUMBER1_2]>=1)&&(gGeneral_Buffer[TARGET_NUMBER1_2]<=16) )
  389. {
  390. gGeneral_Flag|=NUM1_VAILD_F_1;
  391. for(i=1;i<=gGeneral_Buffer[TARGET_NUMBER1_2];i++) //不包括长度本身整个目标电话号码的长度
  392. {
  393. gGeneral_Buffer[i+TARGET_NUMBER1_2]=ReadNextFromBuffer2(); //目标电话号码的第一个字节
  394. Check_Data += gGeneral_Buffer[i+TARGET_NUMBER1_2];
  395. }
  396. gGeneral_Buffer[TARGET_NUMBER1_CHECK_2]=Check_Data;
  397. OperateSPIEnd();
  398. if( (gGeneral_Buffer[TARGET_NUMBER1_2+1]>'9')||(gGeneral_Buffer[TARGET_NUMBER1_2+1]<'0') )
  399. {
  400. gGeneral_Flag&=~NUM1_VAILD_F_1;
  401. }
  402. }
  403. else
  404. {
  405. gGeneral_Flag&=~NUM1_VAILD_F_1;
  406. }
  407. OperateSPIEnd();
  408. //2,TCP服务器地址的处理
  409. gGeneral_Buffer[GPRS_IP_ADDRESS1_2]=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2);
  410. if( (gGeneral_Buffer[GPRS_IP_ADDRESS1_2]>6)&&(gGeneral_Buffer[GPRS_IP_ADDRESS1_2]<16) )
  411. {
  412. gGeneral_Flag|=TCP_IP_VALID_1;
  413. gStatus2_Flag|=IP_VAILD_F_1;
  414. Check_Data=0;
  415. for(i=1;i<=gGeneral_Buffer[GPRS_IP_ADDRESS1_2];i++)
  416. {
  417. gGeneral_Buffer[GPRS_IP_ADDRESS1_2+i]=ReadNextFromBuffer2();
  418. Check_Data += gGeneral_Buffer[GPRS_IP_ADDRESS1_2+i];
  419. }
  420. gGeneral_Buffer[GPRS_IP_ADDRESS1_CHECK_2]=Check_Data;
  421. }
  422. else
  423. {
  424. gGeneral_Flag&=~TCP_IP_VALID_1;
  425. gStatus2_Flag&=~IP_VAILD_F_1;
  426. }
  427. OperateSPIEnd();
  428. Send_COM1_Byte('I');Send_COM1_Byte('P');Send_COM1_Byte(':');
  429. if(gGeneral_Flag&TCP_IP_VALID_1)
  430. {
  431. Send_COM1_Byte('O');Send_COM1_Byte('k');
  432. }
  433. else
  434. {
  435. Send_COM1_Byte('E');Send_COM1_Byte('r');Send_COM1_Byte('r');Send_COM1_Byte('o');Send_COM1_Byte('r');
  436. }
  437. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  438. //3,TCP服务器的登陆端口的处理
  439. OperateSPIEnd();
  440. Check_Data=0;
  441. gGeneral_Buffer[GPRS_SOCKET1_2]=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
  442. Check_Data = gGeneral_Buffer[GPRS_SOCKET1_2];
  443. for(i=1;i<5;i++)
  444. {
  445. gGeneral_Buffer[GPRS_SOCKET1_2+i]=ReadNextFromBuffer2();
  446. Check_Data += gGeneral_Buffer[GPRS_SOCKET1_2+i];
  447. }
  448. gGeneral_Buffer[GPRS_SOCKET1_END_2]=Check_Data;
  449. OperateSPIEnd();
  450. //4,TCP登陆的APN的处理
  451. OperateSPIEnd();
  452. Check_Data=0;
  453. gGeneral_Buffer[GPRS_APN_ADDRESS2_2]=ReadByteFromBuffer2(GPRS_APN_DATA_F_2);
  454. if(  (gGeneral_Buffer[GPRS_APN_ADDRESS2_2]>5)&&(gGeneral_Buffer[GPRS_APN_ADDRESS2_2]<25 ) )
  455. {
  456. for(i=1;i<=gGeneral_Buffer[GPRS_APN_ADDRESS2_2];i++)
  457. {
  458. gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i]=ReadNextFromBuffer2();
  459. Check_Data += gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i];
  460. }
  461. gGeneral_Buffer[GPRS_APN_END_2]=Check_Data;
  462. }
  463. //----如果写入的APN不正确,则采取默认的APN格式
  464. else
  465. {
  466. Check_Data=0;
  467. gGeneral_Buffer[GPRS_APN_ADDRESS2_2]=sizeof(APN_DEFAULT);
  468. for(i=0;i<sizeof(APN_DEFAULT);i++)
  469. {
  470. gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i+1]=APN_DEFAULT[i];
  471. Check_Data += gGeneral_Buffer[GPRS_APN_ADDRESS2_2+i+1];
  472. }
  473. gGeneral_Buffer[GPRS_APN_END_2]=Check_Data;
  474. }
  475. //5,将上面的处理的相关数据存储在buffer1的相关区域中
  476. SRAM_Init();
  477. SRAM_Write(TARGET_NUMBER1_2+0,gGeneral_Buffer[TARGET_NUMBER1_2]);
  478. for(i=TARGET_NUMBER1_2+1;i<PHONE_AT_2;i++)
  479. {
  480. SRAM_Write(i,gGeneral_Buffer[i]);
  481. }
  482. }
  483. /********************************************************
  484. * 函数名:Load_Flash_Par_Buffer1()
  485. 作用域:本地文件调用
  486. * 功能:
  487. * 参数:
  488. * 返回值:
  489. * 创建人:
  490. *
  491. * 修改历史:(每条详述)
  492. ********************************************************/
  493. void Load_Buffer1_Echo(unsigned char nCommand,unsigned char nACK)
  494. {
  495. SRAM_Init();
  496. SRAM_Write(ECHO_SMS_2+0,VAILD_2);
  497. SRAM_Write(ECHO_SMS_2+1,nCommand);
  498. SRAM_Write(ECHO_SMS_2+2,nACK);
  499. SRAM_Write(ECHO_SMS_2+3,0);
  500. Judge_SMS_Way();
  501. }
  502. /********************************************************
  503. * 函数名:Send_Type1_GSM_Data_One
  504. 作用域:本地文件调用
  505. * 功能:
  506. * 参数:
  507. * 返回值:
  508. * 创建人:
  509. *
  510. * 修改历史:(每条详述)
  511. ********************************************************/
  512. unsigned int Check_Allow_Phone(unsigned char nPhone_Length)
  513. {
  514. unsigned int i=0,j=0,k=0;
  515. unsigned char Check_Temp=0;
  516. //1,读电话号码本的第一个扇区到buffer2中(比较第一个扇区的第一个帧5个电话号码)
  517. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
  518. //2,比较gHandle_Buffer[]中的号码是否与前5个电话号码是否匹配中
  519. // gGeneral_Buffer[0]---gGeneral_Buffer[nPhone_Length]中存储的是需要检验的电话号码
  520. for(k=0;k<5;k++)
  521. {
  522. j=0;
  523. OperateSPIEnd();
  524. Check_Temp=ReadByteFromBuffer2( (ONE_1_FRAME_2+8)+21*k );
  525. if( gGeneral_Buffer[0] != Check_Temp )
  526. {
  527. j=1;
  528. }
  529. for(i=1;i<nPhone_Length;i++)
  530. {
  531. if( gGeneral_Buffer[i] != ReadNextFromBuffer2() )
  532. {
  533. j=1;break;
  534. }
  535. }
  536. OperateSPIEnd();
  537. //如果返回0,则说明当前号码与比较号码相匹配
  538. if(j==0)
  539. {
  540. return(0);
  541. }
  542. }
  543. //如果返回1,则说明5个号码与比较号码没一个匹配
  544. return(1);
  545. }
  546. /********************************************************
  547. * 函数名:Send_Handle_Signal()
  548. 作用域:本地文件调用
  549. * 功能:
  550. * 参数:
  551. * 返回值:
  552. * 创建人:
  553. *
  554. * 修改历史:(每条详述)
  555. ********************************************************/
  556. void Send_Handle_Signal(unsigned char nSignal)
  557. {
  558. SRAM_Init();
  559. SRAM_Write(SHANDLE_DATA_VAILD+0,VAILD_2);
  560. SRAM_Write(SHANDLE_DATA_VAILD+1,0x24);
  561. SRAM_Write(SHANDLE_DATA_VAILD+2,0x09);
  562. SRAM_Write(SHANDLE_DATA_VAILD+3,MAIN_STATUS);
  563. SRAM_Write(SHANDLE_DATA_VAILD+4,nSignal);
  564. SRAM_Write(SHANDLE_DATA_VAILD+5,gVolume);
  565. if(gInternal_Flag&VEHICLE_DEFENCE_F_1) SRAM_Write(SHANDLE_DATA_VAILD+6,1);
  566. else SRAM_Write(SHANDLE_DATA_VAILD+6,0);
  567. //是否GPS处于有效还是无效状态
  568. if(gGeneral_Flag&GPS_VALID_F_1) SRAM_Write(SHANDLE_DATA_VAILD+7,2);
  569. else SRAM_Write(SHANDLE_DATA_VAILD+7,1);
  570. SRAM_Write(SHANDLE_DATA_VAILD+8,1);
  571. SRAM_Write(SHANDLE_DATA_VAILD+9,0x0d);
  572. }
  573. /********************************************************
  574. * 函数名:ReloadData_FlashToSram
  575. 作用域:本地文件调用
  576. * 功能:
  577. * 参数:
  578. * 返回值:
  579. * 创建人:
  580. *
  581. * 修改历史:(每条详述)
  582. ********************************************************/
  583. /*
  584. void LoadData_FlashToSram(unsigned int Flash_Srctor,unsigned int Flash_Adds,unsigned int Sram_Adds,unsigned int nLength)
  585. {
  586. unsigned int i;
  587. unsigned char Temp;
  588. OperateSPIEnd();ReadOnePageToBuffer2(Flash_Srctor);OperateSPIEnd();
  589. Temp=ReadByteFromBuffer2(Flash_Adds);
  590. SRAM_Init();
  591. SRAM_Write( Sram_Adds,Temp);
  592. for(i=1;i<nLength;i++)
  593. {
  594. Temp=ReadNextFromBuffer2();
  595. SRAM_Write( (Sram_Adds+i),Temp);
  596. }
  597. OperateSPIEnd();
  598. }
  599. */
  600. /********************************************************
  601. * 函数名:Load_SMS_CenterNum()
  602. 作用域:本地文件调用
  603. * 功能:
  604. * 参数:
  605. * 返回值:
  606. * 创建人:
  607. *
  608. * 修改历史:(每条详述)
  609. ********************************************************/
  610. void  Load_SMS_CenterNum(unsigned int nLength)
  611. {
  612. unsigned int i=0;
  613. unsigned char Check_Data=0;
  614. SRAM_Init();
  615. //在buffer1的相应区域写入短消息中心号码的长度(不包括长度本身的这个字节)
  616. Check_Data=0;
  617. SRAM_Write(CENTER_NUM_2+0,(nLength-8));
  618. for(i=8;i<nLength;i++)
  619. {
  620. //依次写入短消息中心号码
  621. Check_Data += gGeneral_Buffer[i];
  622. SRAM_Write(CENTER_NUM_2+i-8+1,gGeneral_Buffer[i]);
  623. }
  624. //即使短消息中心号码前带有+号,则一样写入到buffer1中
  625. //写入buffer1相应的中心号码校验字的位置
  626. SRAM_Write(CENTER_NUM_CHECK_2,Check_Data);
  627. }
  628. /********************************************************
  629. * 函数名:Check_TargetNum_Vaild()
  630. 作用域:本地文件调用
  631. * 功能:
  632. * 参数:
  633. * 返回值:
  634. * 创建人:
  635. *
  636. * 修改历史:(每条详述)
  637. 可以用来检查目标号码,短消息中心号码,IP地址的有效性
  638. ********************************************************/
  639. unsigned int Check_Vaild(unsigned int Address_S,unsigned int Address_E)
  640. {
  641. unsigned int i=0;
  642. unsigned char nLength;
  643. unsigned char Result=0;
  644. unsigned char Check_Data=0;
  645. //检查目标号码的有效性
  646. SRAM_Init();
  647. Check_Data=0;
  648. nLength = SRAM_Read(Address_S);
  649. for(i=0;i<nLength;i++)
  650. {
  651. Check_Data += SRAM_Read(Address_S+1+i);
  652. }
  653. Result=SRAM_Read(Address_E);
  654. if(Check_Data==Result) return(0);
  655. else return(1);
  656. }
  657. /********************************************************
  658. * 函数名:Check_Port()
  659. 作用域:本地文件调用
  660. * 功能:
  661. * 参数:
  662. * 返回值:
  663. * 创建人:
  664. *
  665. * 修改历史:(每条详述)
  666. 可以用来检查目标号码,短消息中心号码,IP地址的有效性
  667. ********************************************************/
  668. unsigned int Check_Port(void)
  669. {
  670. unsigned int i=0;
  671. unsigned char Check_Data=0;
  672. unsigned char Result=0;
  673. SRAM_Init();
  674. Check_Data = SRAM_Read(GPRS_SOCKET1_2);
  675. for(i=1;i<5;i++)
  676. {
  677. Check_Data += SRAM_Read(GPRS_SOCKET1_2+i);
  678. }
  679. Result=SRAM_Read(GPRS_SOCKET1_END_2);
  680. if(Check_Data==Result) return(0);
  681. else return(1);
  682. }
  683. /********************************************************
  684. * 函数名:Judge_SMS_Way()
  685. 作用域:本地文件调用
  686. * 功能:
  687. * 参数:
  688. * 返回值:
  689. * 创建人:
  690. *
  691. * 修改历史:(每条详述)
  692. 补充说明:
  693. 运行此子程序,则是需要有数据发送时候TCP和GSM数据的选择
  694. ********************************************************/
  695. void Judge_SMS_Way(void)
  696. {
  697. //1,如果TCP的开关量或者IP地址无效的情况下,以短消息的形式传送数据
  698.     if(   ((gGeneral_Flag&TCP_IP_VALID_1)==0)
  699.      ||(gON_OFF_Temp0&TCP_LAND_ON_OFF_1)    )
  700.     {
  701.      gInternal_Flag|=ALLOW_DATA_F_1;
  702.     }
  703.     //2,如果TCP的开关量开启,并且IP地址有效
  704.     else
  705.     {
  706.      //2.1如果处于GSM的工作状态下
  707.      if(gM22_Status==GSM_WORK)
  708.      {
  709.      //2.1.1如果处于禁止登陆TCP的状态
  710.      if(gGeneral_Flag&LAND_TCP_ERROR_F_1)
  711.      {
  712.      gInternal_Flag|=ALLOW_DATA_F_1;
  713.      }
  714.      //2.1.2如果处于允许登陆TCP的状态,则设置标志进行TCP登陆
  715.      else
  716.      {
  717.      gOther_Flag|=NEED_LADN_TCP_F_1;
  718.      gInternal_Flag&=~ALLOW_DATA_F_1;
  719.      }
  720.      }
  721.     }
  722. }
  723. /********************************************************
  724. * 函数名:Load_Info_One()
  725. 作用域:外地文件调用
  726. * 功能:
  727. * 参数:
  728. * 返回值:
  729. * 创建人:
  730. *
  731. * 修改历史:(每条详述)
  732. 可以用来检查目标号码,短消息中心号码,IP地址的有效性
  733. ********************************************************/
  734. void Load_Info_One(void)
  735. {
  736. unsigned int i=0,j=0,k=0;
  737. Check_Flash(FLASH_INFO1_ONE_2);
  738. for(i=0;i<=sizeof(gGeneral_Buffer);i++) gGeneral_Buffer[i]=0;
  739. Load_Flash_Par_Buffer1();
  740. //================================================
  741. //调试读出Flash中的参数是否正确
  742. OperateSPIEnd();
  743. ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
  744. OperateSPIEnd();
  745. //1,显示车型,车类,车组,车号
  746. Send_COM1_String( (unsigned char *)VTYPE,sizeof(VTYPE) );
  747. j=ReadByteFromBuffer2(VEH_TYPE_2);
  748. Send_COM1_Byte(ASCII(j/0x10));
  749. Send_COM1_Byte(ASCII(j%0x10));
  750. Send_COM1_Byte(':');
  751. Send_COM1_String( (unsigned char *)VKIND,sizeof(VKIND) );
  752. j=ReadNextFromBuffer2();
  753. Send_COM1_Byte(ASCII(j/0x10));
  754. Send_COM1_Byte(ASCII(j%0x10));
  755. Send_COM1_Byte(':');
  756. Send_COM1_String( (unsigned char *)VGROUP,sizeof(VGROUP) );
  757. j=ReadNextFromBuffer2();
  758. Send_COM1_Byte(ASCII(j/0x10));
  759. Send_COM1_Byte(ASCII(j%0x10));
  760. Send_COM1_Byte(':');
  761. Send_COM1_String( (unsigned char *)VID,sizeof(VID) );
  762.     Send_COM1_Byte(ASCII(gVID/0x1000));
  763.     Send_COM1_Byte(ASCII((gVID%0x1000)/0x100));
  764.     Send_COM1_Byte(ASCII(((gVID%0x1000)%0x100)/0x10));
  765. Send_COM1_Byte(ASCII(gVID%0x10));
  766. OperateSPIEnd();
  767. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  768. //2,显示目标号码1
  769. Send_COM1_String( (unsigned char *)NUM1,sizeof(NUM1) );
  770. j=ReadByteFromBuffer2(TARGET_NUMBER1_F_2);
  771. if(j>16) j=0;
  772. Send_COM1_Byte(ASCII(j/0x10));
  773. Send_COM1_Byte(ASCII(j%0x10));
  774. Send_COM1_Byte('[');
  775. for(i=0;i<j;i++)
  776. {
  777. k=ReadNextFromBuffer2();
  778. Send_COM1_Byte(k);
  779. }
  780. Send_COM1_Byte(']');
  781. OperateSPIEnd();
  782. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  783. //3,显示TCP服务器的IP地址
  784. Send_COM1_String( (unsigned char *)IP_ADDRESS,sizeof(IP_ADDRESS) );
  785. j=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2);
  786. if(j>16) j=0;
  787. Send_COM1_Byte(ASCII(j/0x10));
  788. Send_COM1_Byte(ASCII(j%0x10));
  789. Send_COM1_Byte('[');
  790. for(i=0;i<j;i++)
  791. {
  792. k=ReadNextFromBuffer2();
  793. Send_COM1_Byte(k);
  794. }
  795. OperateSPIEnd();
  796. Send_COM1_Byte(']');
  797. Send_COM1_Byte(':');
  798. //4,显示TCP服务器的PORT号
  799. Send_COM1_String( (unsigned char *)PORT,sizeof(PORT) );
  800. j=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
  801. Send_COM1_Byte('[');
  802. Send_COM1_Byte(j);
  803. for(i=0;i<4;i++)
  804. {
  805. k=ReadNextFromBuffer2();
  806. Send_COM1_Byte(k);
  807. }
  808. Send_COM1_Byte(']');
  809. //6,显示APN
  810. OperateSPIEnd();
  811. Send_COM1_String( (unsigned char *)TCP_APN,sizeof(TCP_APN) );
  812. j=ReadByteFromBuffer2(GPRS_APN_DATA_F_2);
  813. if(j>20) j=0;
  814. Send_COM1_Byte(ASCII(j/0x10));
  815. Send_COM1_Byte(ASCII(j%0x10));
  816. Send_COM1_Byte('[');
  817. for(i=0;i<j;i++)
  818. {
  819. k=ReadNextFromBuffer2();
  820. Send_COM1_Byte(k);
  821. }
  822. Send_COM1_Byte(']');
  823. OperateSPIEnd();
  824. Send_COM1_Byte(0x0d);
  825. Send_COM1_Byte(0x0a);
  826. //================================================
  827. //将buffer1中其余的数据填为0
  828. gTimer=0;
  829. while(gTimer<10){}
  830. SRAM_Init();
  831. SRAM_Write(PHONE_AT_2+0,0);
  832. for(i=PHONE_AT_2+1;i<END_SRAM_2;i++)
  833. {
  834. SRAM_Write(i,0);
  835. }
  836. }
  837. /********************************************************
  838. * 函数名:Load_Info_Two()
  839. 作用域:外地文件调用
  840. * 功能:
  841. * 参数:
  842. * 返回值:
  843. * 创建人:
  844. *
  845. * 修改历史:(每条详述)
  846. 可以用来检查目标号码,短消息中心号码,IP地址的有效性
  847. ********************************************************/
  848. void Load_Info_Two(void)
  849. {
  850.     unsigned int i=0,j=0,k=0;
  851. unsigned char Buffer2_Temp;
  852. Check_Flash(FLASH_INFO2_ONE_2);
  853. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
  854. //处理开关量(出厂时候的默认值为屏蔽,相应的位置置1,则表示此开关量处于关闭状态)
  855. gON_OFF_Temp0=ReadByteFromBuffer2(ON_OFF_V1_2);
  856. gON_OFF_Temp1=ReadNextFromBuffer2();
  857. gON_OFF_Temp2=ReadNextFromBuffer2();
  858. //报警信息的处理(判断属于那一类型的报警,报警类型有1--126,gFlag的低7位作为报警类型,最高位在系统中作为GPS数据有效和无效的标志)
  859. gAlarm_Type=ReadNextFromBuffer2();
  860. if( gAlarm_Type ==(char)(~ReadNextFromBuffer2()))
  861. {
  862. gCycle_Send_Status=ALARM_DATA;
  863. gCycle_Alarm=ALARM_CIRCLE_TIME;
  864. }
  865. else
  866. {
  867. gAlarm_Type=0;
  868. gCycle_Alarm=0;
  869. gCycle_Send_Status=NOP_DATA;
  870. }
  871. gAlarm_Type=0;
  872. gCycle_Alarm=0;
  873. gCycle_Send_Status=NOP_DATA;
  874. //1,判断监控信息的处理
  875. ReadNextFromBuffer2();
  876. OperateSPIEnd();
  877. /*
  878. if( (gON_OFF_Temp0&PHONE_OUT_ON)==0 ) gStatus2_Flag|=HANDLE_PHONE_OUT_LIMIT;
  879. else gStatus2_Flag&=~HANDLE_PHONE_OUT_LIMIT;
  880. if( (gON_OFF_Temp0&PHONE_IN_ON)==0 ) gStatus2_Flag|=HANDLE_PHONE_IN_LIMIT;
  881. else gStatus2_Flag&=~HANDLE_PHONE_IN_LIMIT;
  882. if( (gON_OFF_Temp0&TCP_LAND_ON_OFF_1)==0 ) gStatus2_Flag|=TCP_ON_OFF_F_1;
  883. else gStatus2_Flag&=~TCP_ON_OFF_F_1;
  884. */
  885. //默认电话全开
  886. gStatus2_Flag&=~HANDLE_PHONE_OUT_LIMIT;
  887. gStatus2_Flag&=~HANDLE_PHONE_IN_LIMIT;
  888. gStatus2_Flag&=~TCP_ON_OFF_F_1;
  889. gON_OFF_Temp0|=PHONE_OUT_ON;
  890. gON_OFF_Temp0|=PHONE_IN_ON;
  891. gON_OFF_Temp0|=TCP_LAND_ON_OFF_1;
  892. if((gON_OFF_Temp1&DISTANCE_TCP_ON_1)==0) gStatus3_Flag |= DISTANCE_ON_F_1;
  893. else gStatus3_Flag &=~ DISTANCE_ON_F_1;
  894. //2,判断是否设防标志
  895. OperateSPIEnd();
  896. Buffer2_Temp=ReadByteFromBuffer2(DEFENCE_F_2);
  897. if(Buffer2_Temp==DEFENCE_YES)
  898. {
  899. gInternal_Flag|=VEHICLE_DEFENCE_F_1;
  900. gStatus1_Flag|=DEFENCE_STATUS_F_1;
  901. }
  902. else
  903. {
  904. gInternal_Flag&=~VEHICLE_DEFENCE_F_1;
  905. gStatus1_Flag&=~DEFENCE_STATUS_F_1;
  906. }
  907. //TCP工作方式下的行车诡计的时间间隔
  908. gCycle_TCP = ReadNextFromBuffer2();
  909. gCycle_TCP<<=8;
  910. gCycle_TCP += ReadNextFromBuffer2();
  911. //GSM工作方式下的行车轨迹的时间间隔
  912. gCycle_GSM = ReadNextFromBuffer2();
  913. gCycle_GSM<<=8;
  914. gCycle_GSM += ReadNextFromBuffer2();
  915. //间隔距离传输的距离值
  916. gCycle_Distance = ReadNextFromBuffer2();
  917. gCycle_Distance<<=8;
  918. gCycle_Distance += ReadNextFromBuffer2();
  919. if( gCycle_GSM>3600 ) gCycle_GSM=1800;
  920. if( gCycle_TCP>3600 ) gCycle_TCP=1800;
  921. if( (gCycle_TCP>0)&&(gCycle_TCP<5) ) gCycle_TCP=5;
  922. if( (gCycle_GSM>0)&&(gCycle_GSM<5) ) gCycle_GSM=5;
  923. //处理传输方式类型
  924. if(gCycle_TCP>5)
  925. {
  926. gCycle_Distance=0;
  927. }
  928. else if(gCycle_Distance==0xFFFF)
  929. {
  930. gCycle_Distance=0;
  931. }
  932. //历史轨迹存储的时间间隔
  933. ReadNextFromBuffer2();
  934. //行车最大速度
  935. gMAX_Speed=ReadNextFromBuffer2();
  936. //如果有线路报警时刻的最小限制距离
  937. gMax_Limit_Distance = ReadNextFromBuffer2();
  938. gMax_Limit_Distance<<=8;
  939. gMax_Limit_Distance += ReadNextFromBuffer2();
  940. if(  (gMax_Limit_Distance>20)&&(gMax_Limit_Distance<0x0FFF) )
  941. {
  942. gCommon_Flag|=ALLOW_LINE_DIS_F_1;
  943. }
  944. else
  945. {
  946. gCommon_Flag&=~ALLOW_LINE_DIS_F_1;
  947. }
  948. //显示出读出的数据
  949. // #ifdef Debug_GSM_COM1
  950. Send_COM1_String( (unsigned char *)ON_OFF0,sizeof(ON_OFF0) );
  951. Send_COM1_Byte(ASCII(gON_OFF_Temp0/0x10));
  952. Send_COM1_Byte(ASCII(gON_OFF_Temp0%0x10));
  953. Send_COM1_Byte(':');
  954. Send_COM1_String( (unsigned char *)ON_OFF1,sizeof(ON_OFF1) );
  955. Send_COM1_Byte(ASCII(gON_OFF_Temp1/0x10));
  956. Send_COM1_Byte(ASCII(gON_OFF_Temp1%0x10));
  957. Send_COM1_Byte(':');
  958. Send_COM1_String( (unsigned char *)ON_OFF2,sizeof(ON_OFF2) );
  959. Send_COM1_Byte(ASCII(gON_OFF_Temp2/0x10));
  960. Send_COM1_Byte(ASCII(gON_OFF_Temp2%0x10));
  961. Send_COM1_Byte(':');
  962. Send_COM1_String( (unsigned char *)FLAG,sizeof(FLAG) );
  963. Send_COM1_Byte(ASCII(gAlarm_Type/0x10));
  964. Send_COM1_Byte(ASCII(gAlarm_Type%0x10));
  965. Send_COM1_Byte(':');
  966. Send_COM1_String( (unsigned char *)TCP_TIME,sizeof(TCP_TIME) );
  967.     Send_COM1_Byte(ASCII(gCycle_TCP/1000));
  968.     Send_COM1_Byte(ASCII((gCycle_TCP%1000)/100));
  969.     Send_COM1_Byte(ASCII(((gCycle_TCP%1000)%100)/10));
  970. Send_COM1_Byte(ASCII(gCycle_TCP%10));
  971. Send_COM1_Byte(':');
  972. Send_COM1_String( (unsigned char *)GSM_TIME,sizeof(GSM_TIME) );
  973.     Send_COM1_Byte(ASCII(gCycle_GSM/1000));
  974.     Send_COM1_Byte(ASCII((gCycle_GSM%1000)/100));
  975.     Send_COM1_Byte(ASCII(((gCycle_GSM%1000)%100)/10));
  976. Send_COM1_Byte(ASCII(gCycle_GSM%10));
  977. Send_COM1_Byte(':');
  978. Send_COM1_String( (unsigned char *)DIS,sizeof(DIS) );
  979.     Send_COM1_Byte(ASCII(gCycle_Distance/1000));
  980.     Send_COM1_Byte(ASCII((gCycle_Distance%1000)/100));
  981.     Send_COM1_Byte(ASCII(((gCycle_Distance%1000)%100)/10));
  982. Send_COM1_Byte(ASCII(gCycle_Distance%10));
  983. Send_COM1_Byte(':');
  984. Send_COM1_Byte(0x0d);
  985. Send_COM1_Byte(0x0a);
  986. Send_COM1_String( (unsigned char *)MAXSPEED,sizeof(MAXSPEED) );
  987.     Send_COM1_Byte(ASCII(gMAX_Speed/100));
  988.     Send_COM1_Byte(ASCII((gMAX_Speed%100)/10));
  989.     Send_COM1_Byte(ASCII(gMAX_Speed%10));
  990.     Send_COM1_Byte(':');
  991.     Send_COM1_String( (unsigned char *)LIMIT_DIS,sizeof(LIMIT_DIS) );
  992.     Send_COM1_Byte('=');
  993.     Send_COM1_Byte(ASCII(gMax_Limit_Distance/0x1000));
  994.     Send_COM1_Byte(ASCII((gMax_Limit_Distance%0x1000)/0x100));
  995.     Send_COM1_Byte(ASCII(((gMax_Limit_Distance%0x1000)%0x100)/0x10));
  996. Send_COM1_Byte(ASCII(gMax_Limit_Distance%0x10));
  997. Send_COM1_Byte(0x0d);
  998. Send_COM1_Byte(0x0a);
  999. // #endif
  1000. }
  1001. /********************************************************
  1002. * 函数名:Load_Info_Three()
  1003. 作用域:外地文件调用
  1004. * 功能:
  1005. * 参数:
  1006. * 返回值:
  1007. * 创建人:
  1008. *
  1009. * 修改历史:(每条详述)
  1010. ********************************************************/
  1011. void Load_Info_Three(void)
  1012. {
  1013. unsigned int i=0;
  1014. unsigned char Area_In=0;
  1015. unsigned char Area_Out=0;
  1016. unsigned char Buffer2_Temp=0;
  1017. Check_Flash(FLASH_AREA_ONE_2);
  1018. OperateSPIEnd();
  1019. Send_COM1_String( (unsigned char *)AREA_PAR,sizeof(AREA_PAR) );
  1020. Send_COM1_Byte('[');
  1021. Buffer2_Temp=ReadByteFromBuffer2(FAREA1_LON_1_2);
  1022. SRAM_Init();
  1023. SRAM_Write( SAREA_DATA_FS,0x55);
  1024. SRAM_Write(SAREA1_LON_1_2,Buffer2_Temp);
  1025. Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
  1026. Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
  1027. for(i=1;i<17*4;i++)
  1028. {
  1029. Buffer2_Temp=ReadNextFromBuffer2();
  1030. SRAM_Write( (SAREA1_LON_1_2+i),Buffer2_Temp);
  1031. Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
  1032. Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
  1033. }
  1034. Send_COM1_Byte(']');
  1035. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  1036. OperateSPIEnd();
  1037. SRAM_Write( SAREA_DATA_FE,0xAA);
  1038. gArea_Par=0;
  1039. SRAM_Init();
  1040. Buffer2_Temp=SRAM_Read(SAREA1_PAR_2);
  1041. //0x55表示是禁出标志,0xAA则表示禁入标志
  1042. if( Buffer2_Temp==0x55) {gArea_Par|=AREA1_ON;Area_Out++;}
  1043. else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA1_ON;gArea_Par|=AREA1_DIR;Area_In++;}
  1044. Buffer2_Temp=SRAM_Read(SAREA2_PAR_2);
  1045. if( Buffer2_Temp==0x55) {gArea_Par|=AREA2_ON;Area_Out++;}
  1046. else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA2_ON;gArea_Par|=AREA2_DIR;Area_In++;}
  1047. Buffer2_Temp=SRAM_Read(SAREA3_PAR_2);
  1048. if( Buffer2_Temp==0x55) {gArea_Par|=AREA3_ON;Area_Out++;}
  1049. else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA3_ON;gArea_Par|=AREA3_DIR;Area_In++;}
  1050. Buffer2_Temp=SRAM_Read(SAREA4_PAR_2);
  1051. if( Buffer2_Temp==0x55) {gArea_Par|=AREA4_ON;Area_Out++;}
  1052. else if(Buffer2_Temp==0xAA) {gArea_Par|=AREA4_ON;gArea_Par|=AREA4_DIR;Area_In++;}
  1053. SRAM_Init();
  1054. SRAM_Write(SAREA_IN_NUM,Area_In);
  1055. SRAM_Write(SAREA_OUT_NUM,Area_Out);
  1056. if(gArea_Par!=0) gStatus2_Flag|=AREA_VAILD_F_1;
  1057. else gStatus2_Flag&=~AREA_VAILD_F_1;
  1058. }
  1059. /********************************************************
  1060. * 函数名:Load_Info_Four()
  1061. 作用域:外地文件调用
  1062. * 功能:
  1063. * 参数:
  1064. * 返回值:
  1065. * 创建人:
  1066. *
  1067. * 修改历史:(每条详述)
  1068. ********************************************************/
  1069. void Load_Info_Four(void)
  1070. {
  1071. unsigned int i=0;
  1072. unsigned char Buffer2_Temp=0;
  1073. unsigned char Buffer3_Temp=0;
  1074. //检查第一个扇区的数据点
  1075. Check_Flash(FLASH_LINEDATA1_ONE_2);
  1076. OperateSPIEnd();
  1077. //先判断此扇区数据点的个数
  1078. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
  1079. Buffer2_Temp=ReadByteFromBuffer2(FLINE_NUM_1);
  1080. Buffer3_Temp=ReadNextFromBuffer2();
  1081. Buffer3_Temp=~Buffer3_Temp;
  1082. OperateSPIEnd();
  1083. if(   ( Buffer2_Temp==Buffer3_Temp)
  1084. &&( Buffer2_Temp>0 )
  1085. &&( Buffer2_Temp<31 ) )
  1086. {
  1087. gLine_Num=Buffer2_Temp;
  1088. gCommon_Flag|=ALLOW_LINE_DATA_F_1;
  1089. }
  1090. else
  1091. {
  1092. gCommon_Flag&=~ALLOW_LINE_DATA_F_1;
  1093. Send_COM1_String((unsigned char *)LOAD_ERROR,sizeof(LOAD_ERROR));
  1094. return;
  1095. }
  1096. //如果扇区点在1-30之间,则认为有效,如果第一个扇区存满30个点,则判断第二个扇区的数据的内容
  1097. if(gLine_Num==30)
  1098. {
  1099. Check_Flash(FLASH_LINEDATA2_ONE_2);
  1100. OperateSPIEnd();
  1101. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
  1102. Buffer2_Temp=ReadByteFromBuffer2(FLINE_NUM_1);
  1103. Buffer3_Temp=ReadNextFromBuffer2();
  1104. Buffer3_Temp=~Buffer3_Temp;
  1105. OperateSPIEnd();
  1106. if(   (Buffer2_Temp==Buffer3_Temp)
  1107. &&( Buffer2_Temp>0 )
  1108. &&(Buffer2_Temp<=30) )
  1109. {
  1110. gLine_Num=gLine_Num+Buffer2_Temp;
  1111. }
  1112. }
  1113. //如果最后的点数满足小于30,则只转移第一个扇区的数据到SRAM
  1114. if(gLine_Num<=30)
  1115. {
  1116. SRAM_Init();
  1117. SRAM_Write( SLINE_NUM_1,gLine_Num );
  1118. SRAM_Write( SLINE_NUM_2,(~gLine_Num) );
  1119. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
  1120. Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
  1121. SRAM_Write( SLINE_DATA_1+0,Buffer2_Temp);
  1122. Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
  1123. Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
  1124. for(i=1;i<8*gLine_Num;i++)
  1125. {
  1126. Buffer2_Temp=ReadNextFromBuffer2();
  1127. SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
  1128. }
  1129. OperateSPIEnd();
  1130. }
  1131. else if( (gLine_Num>30)&&(gLine_Num<=60) )
  1132. {
  1133. SRAM_Init();
  1134. SRAM_Write( SLINE_NUM_1,gLine_Num );
  1135. SRAM_Write( SLINE_NUM_2,(~gLine_Num) );
  1136. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA1_ONE_2);OperateSPIEnd();
  1137. Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
  1138. SRAM_Write( SLINE_DATA_1+0,Buffer2_Temp);
  1139. for(i=1;i<240;i++)
  1140. {
  1141. Buffer2_Temp=ReadNextFromBuffer2();
  1142. SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
  1143. }
  1144. OperateSPIEnd();
  1145. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_LINEDATA2_ONE_2);OperateSPIEnd();
  1146. Buffer2_Temp=ReadByteFromBuffer2(FLINE_DATA_1);
  1147. SRAM_Init();
  1148. SRAM_Write( (SLINE_DATA_1+240),Buffer2_Temp);
  1149. for(i=241;i<8*gLine_Num;i++)
  1150. {
  1151. Buffer2_Temp=ReadNextFromBuffer2();
  1152. SRAM_Write( (SLINE_DATA_1+i),Buffer2_Temp );
  1153. }
  1154. OperateSPIEnd();
  1155. }
  1156. Send_COM1_String( (unsigned char *)LINE_PAR,sizeof(LINE_PAR) );
  1157. Send_COM1_Byte(ASCII(gLine_Num/10));
  1158. Send_COM1_Byte(ASCII(gLine_Num%10));
  1159. SRAM_Init();
  1160. Send_COM1_Byte('[');
  1161. for(i=0;i<8*gLine_Num;i++)
  1162. {
  1163. Buffer2_Temp=SRAM_Read(SLINE_DATA_1+i);
  1164. Send_COM1_Byte(ASCII(Buffer2_Temp/0x10));
  1165. Send_COM1_Byte(ASCII(Buffer2_Temp%0x10));
  1166. Clear_Exter_WatchDog();
  1167. }
  1168. Send_COM1_Byte(']');
  1169. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  1170. }
  1171. /********************************************************
  1172. * 函数名:Check_Flash()
  1173. 作用域:外地文件调用
  1174. * 功能:
  1175. * 参数:
  1176. * 返回值:
  1177. * 创建人:
  1178. *
  1179. * 修改历史:(每条详述)
  1180. 可以用来检查目标号码,短消息中心号码,IP地址的有效性
  1181. 如果数据无效果,则需要将MSP430内部的信息存储区A的数据覆盖
  1182. ********************************************************/
  1183. void Check_Flash(unsigned int Add_Sector)
  1184. {
  1185. unsigned int i=0,j=0,k=0;
  1186. unsigned int iAddress=0;
  1187. unsigned char Sec_Vaild=0;
  1188. unsigned int  nTCP=0;
  1189. unsigned char Secter_One=0,Secter_Two=0;
  1190. Secter_One=0;
  1191. Secter_Two=0;
  1192. //Secter_One=0,说明第一个扇区数据校验核正确。为1,则表示校验核正确,但非正常数据,为2,则表示校验核实不正确
  1193. //Secter_Two=0,说明第二个扇区数据校验核正确。为1,则表示校验核正确,但非正常数据,为2,则表示校验核实不正确
  1194. OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector);OperateSPIEnd();
  1195. j=ReadByteFromBuffer2(0);
  1196. gGeneral_Buffer[0]=j;
  1197. for(i=1;i<254;i++)
  1198. {
  1199. gGeneral_Buffer[i]=ReadNextFromBuffer2();
  1200. j+=gGeneral_Buffer[i];
  1201. }
  1202. gGeneral_Buffer[254]=ReadNextFromBuffer2();
  1203. gGeneral_Buffer[255]=ReadNextFromBuffer2();
  1204. OperateSPIEnd();
  1205. if( ((j/256)==gGeneral_Buffer[254]) && ((j%256)==gGeneral_Buffer[255]) )
  1206. {
  1207. if(Add_Sector==FLASH_INFO1_ONE_2)
  1208. {
  1209. if(   (gGeneral_Buffer[TARGET_NUMBER1_F_2]>16)
  1210. ||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>16)
  1211. ||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<7) )
  1212. {
  1213. Secter_One=1;
  1214. }
  1215. else if(gGeneral_Buffer[TARGET_NUMBER1_F_2]<=16)
  1216. {
  1217. k=0;
  1218. for(i=0;i<gGeneral_Buffer[TARGET_NUMBER1_F_2];i++)
  1219. {
  1220. if(   (gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]>'9')
  1221. ||(gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]<'0') )
  1222. {
  1223. k=1;break;
  1224. }
  1225. }
  1226. if(k==1) Secter_One=1;
  1227. else
  1228. {
  1229. if(   (gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>=7)
  1230. &&(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<=16) )
  1231. {
  1232. k=0;
  1233. for(i=0;i<gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2];i++)
  1234. {
  1235. if(   (gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]>'9')
  1236.     ||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]<'0')  )
  1237. {
  1238. if(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]=='.');
  1239. else
  1240. {
  1241. k=1;break;
  1242. }
  1243. }
  1244. }
  1245. if(k==1) Secter_One=1;
  1246. }
  1247. }
  1248. }
  1249. }
  1250. else if(Add_Sector==FLASH_INFO2_ONE_2)
  1251. {
  1252. gON_OFF_Temp2 = gGeneral_Buffer[ON_OFF_V3_2];
  1253. if(gON_OFF_Temp2==0xFF);
  1254. else Secter_Two=1;
  1255. k= gGeneral_Buffer[WATCH_F_2];
  1256. if(k==0xFF);
  1257. else Secter_Two=1;
  1258. k= gGeneral_Buffer[RESET_NUM_2];
  1259. if(k==0xFF);
  1260. else Secter_Two=1;
  1261. nTCP = gGeneral_Buffer[TCP_TIMER_2];
  1262. nTCP <<= 8;
  1263. nTCP += gGeneral_Buffer[TCP_TIMER_2+1];
  1264. if( (nTCP>0)&&(nTCP<0xFFFF) );
  1265. else Secter_Two=1;
  1266. }
  1267. }
  1268. else
  1269. {
  1270. Secter_One=2;
  1271. }
  1272. /////////////////////////////////////////////////////////////
  1273. OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector+1);OperateSPIEnd();
  1274. j=ReadByteFromBuffer2(0);
  1275. gGeneral_Buffer[0]=j;
  1276. for(i=1;i<254;i++)
  1277. {
  1278. gGeneral_Buffer[i]=ReadNextFromBuffer2();
  1279. j+=gGeneral_Buffer[i];
  1280. }
  1281. gGeneral_Buffer[254]=ReadNextFromBuffer2();
  1282. gGeneral_Buffer[255]=ReadNextFromBuffer2();
  1283. OperateSPIEnd();
  1284. if( ((j/256)==gGeneral_Buffer[254]) && ((j%256)==gGeneral_Buffer[255]) )
  1285. {
  1286. if(Add_Sector==FLASH_INFO1_ONE_2)
  1287. {
  1288. if(   (gGeneral_Buffer[TARGET_NUMBER1_F_2]>16)
  1289. ||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>16)
  1290. ||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<7) )
  1291. {
  1292. Secter_Two=1;
  1293. }
  1294. else if(gGeneral_Buffer[TARGET_NUMBER1_F_2]<=16)
  1295. {
  1296. k=0;
  1297. for(i=0;i<gGeneral_Buffer[TARGET_NUMBER1_F_2];i++)
  1298. {
  1299. if(   (gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]>'9')
  1300. ||(gGeneral_Buffer[TARGET_NUMBER1_F_2+i+1]<'0') )
  1301. {
  1302. k=1;break;
  1303. }
  1304. }
  1305. if(k==1) Secter_Two=1;
  1306. else
  1307. {
  1308. if(   (gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]>=7)
  1309. &&(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2]<=16) )
  1310. {
  1311. k=0;
  1312. for(i=0;i<gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2];i++)
  1313. {
  1314. if(   (gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]>'9')
  1315.     ||(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]<'0')  )
  1316. {
  1317. if(gGeneral_Buffer[GPRS_IP_ADDRESS1_F_2+1+i]=='.');
  1318. else
  1319. {
  1320. k=1;break;
  1321. }
  1322. }
  1323. }
  1324. if(k==1) Secter_Two=1;
  1325. }
  1326. }
  1327. }
  1328. }
  1329. else if(Add_Sector==FLASH_INFO2_ONE_2)
  1330. {
  1331. gON_OFF_Temp2 = gGeneral_Buffer[ON_OFF_V3_2];
  1332. if(gON_OFF_Temp2==0xFF);
  1333. else Secter_Two=1;
  1334. k= gGeneral_Buffer[WATCH_F_2];
  1335. if(k==0xFF);
  1336. else Secter_Two=1;
  1337. k= gGeneral_Buffer[RESET_NUM_2];
  1338. if(k==0xFF);
  1339. else Secter_Two=1;
  1340. nTCP = gGeneral_Buffer[TCP_TIMER_2];
  1341. nTCP <<= 8;
  1342. nTCP += gGeneral_Buffer[TCP_TIMER_2+1];
  1343. if( (nTCP>0)&&(nTCP<0xFFFF) );
  1344. else Secter_Two=1;
  1345. }
  1346. }
  1347. else
  1348. {
  1349. Secter_Two=2;
  1350. }
  1351. ///////////////////////////////////////////////////////////
  1352. //显示一下两个数据
  1353. Send_COM1_Byte('[');
  1354. Send_COM1_Byte(ASCII(Secter_One/10));
  1355. Send_COM1_Byte(ASCII(Secter_One%10));
  1356. Send_COM1_Byte(':');
  1357. Send_COM1_Byte(ASCII(Secter_Two/10));
  1358. Send_COM1_Byte(ASCII(Secter_Two%10));
  1359. Send_COM1_Byte(']');
  1360. if(Secter_One==0)
  1361. {
  1362. if( (Secter_Two==1)||(Secter_Two==2) )
  1363. {
  1364. OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector);OperateSPIEnd();
  1365. Clear_Exter_WatchDog();
  1366. P6OUT|=SPI45DB041_WP;
  1367. WriteBuffer2ToPage(Add_Sector+1);
  1368. OperateSPIEnd();
  1369. P6OUT&=~SPI45DB041_WP;
  1370. gTimer=0;while(gTimer<1000){Clear_Exter_WatchDog();}
  1371. }
  1372. }
  1373. else if(Secter_One==2)
  1374. {
  1375. if( (Secter_Two==0) )
  1376. {
  1377. OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector+1);OperateSPIEnd();
  1378. Clear_Exter_WatchDog();
  1379. P6OUT|=SPI45DB041_WP;
  1380. WriteBuffer2ToPage(Add_Sector);
  1381. OperateSPIEnd();
  1382. P6OUT&=~SPI45DB041_WP;
  1383. gTimer=0;while(gTimer<1000){Clear_Exter_WatchDog();}
  1384. }
  1385. else if( (Secter_Two==1)||(Secter_Two==2) )
  1386. {
  1387. if(Add_Sector==FLASH_INFO1_ONE_2)
  1388. {
  1389. Read_SegAB(0);
  1390. if(gGeneral_Buffer[127]==0xAA)
  1391. {
  1392. for(i=128;i<254;i++) gGeneral_Buffer[i]=0xFF;
  1393. WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
  1394. for(i=1;i<254;i++)
  1395. {
  1396. WriteNextByteToBuffer2(gGeneral_Buffer[i]);
  1397. }
  1398. OperateSPIEnd();
  1399. RFlash_Sector(FLASH_INFO1_ONE_2);
  1400. }
  1401. }
  1402. else if(Add_Sector==FLASH_INFO2_ONE_2)
  1403. {
  1404. Read_SegAB(1);
  1405. if(gGeneral_Buffer[127]==0xAA)
  1406. {
  1407. for(i=128;i<254;i++) gGeneral_Buffer[i]=0xFF;
  1408. WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
  1409. for(i=1;i<254;i++)
  1410. {
  1411. WriteNextByteToBuffer2(gGeneral_Buffer[i]);
  1412. }
  1413. OperateSPIEnd();
  1414. RFlash_Sector(FLASH_INFO2_ONE_2);
  1415. }
  1416. }
  1417. }
  1418. }
  1419. else if(Secter_One==1)
  1420. {
  1421. if(Secter_Two==0)
  1422. {
  1423. OperateSPIEnd();ReadOnePageToBuffer2(Add_Sector+1);OperateSPIEnd();
  1424. Clear_Exter_WatchDog();
  1425. P6OUT|=SPI45DB041_WP;
  1426. WriteBuffer2ToPage(Add_Sector);
  1427. OperateSPIEnd();
  1428. P6OUT&=~SPI45DB041_WP;
  1429. gTimer=0;while(gTimer<1000){Clear_Exter_WatchDog();}
  1430. }
  1431. else if( (Secter_Two==1)||(Secter_Two==2) )
  1432. {
  1433. if(Add_Sector==FLASH_INFO1_ONE_2)
  1434. {
  1435. Read_SegAB(0);
  1436. if(gGeneral_Buffer[127]==0xAA)
  1437. {
  1438. for(i=128;i<254;i++) gGeneral_Buffer[i]=0xFF;
  1439. WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
  1440. for(i=1;i<254;i++)
  1441. {
  1442. WriteNextByteToBuffer2(gGeneral_Buffer[i]);
  1443. }
  1444. OperateSPIEnd();
  1445. RFlash_Sector(FLASH_INFO1_ONE_2);
  1446. }
  1447. }
  1448. else if(Add_Sector==FLASH_INFO2_ONE_2)
  1449. {
  1450. Read_SegAB(1);
  1451. if(gGeneral_Buffer[127]==0xAA)
  1452. {
  1453. for(i=128;i<254;i++) gGeneral_Buffer[i]=0xFF;
  1454. WriteOneByteToBuffer2(0,gGeneral_Buffer[0]);
  1455. for(i=1;i<254;i++)
  1456. {
  1457. WriteNextByteToBuffer2(gGeneral_Buffer[i]);
  1458. }
  1459. OperateSPIEnd();
  1460. RFlash_Sector(FLASH_INFO2_ONE_2);
  1461. }
  1462. }
  1463. }
  1464. }
  1465. if(Secter_One==0)
  1466. {
  1467. iAddress=Add_Sector;
  1468. Sec_Vaild=1;
  1469. }
  1470. else if(Secter_Two==0)
  1471. {
  1472. iAddress=Add_Sector+1;
  1473. Sec_Vaild=1;
  1474. }
  1475. else
  1476. {
  1477. Sec_Vaild=0;
  1478. }
  1479. if(Sec_Vaild==1)
  1480. {
  1481. if(Add_Sector==FLASH_INFO1_ONE_2)
  1482. {
  1483. Read_SegAB(0);
  1484. if(gGeneral_Buffer[127]!=0xAA)
  1485. {
  1486. //OperateSPIEnd();ReadOnePageToBuffer2(iAddress);OperateSPIEnd();
  1487. Init_Buffer2();
  1488. Deal_Sector(iAddress);
  1489. Re430_Flash(0);
  1490. Init_Buffer2();
  1491. }
  1492. }
  1493. else if(Add_Sector==FLASH_INFO2_ONE_2)
  1494. {
  1495. Read_SegAB(1);
  1496. if(gGeneral_Buffer[127]!=0xAA)
  1497. {
  1498. //OperateSPIEnd();ReadOnePageToBuffer2(iAddress);OperateSPIEnd();
  1499. Init_Buffer2();
  1500. Deal_Sector(iAddress);
  1501. Re430_Flash(1);
  1502. Init_Buffer2();
  1503. }
  1504. }
  1505. }
  1506. }
  1507. /********************************************************
  1508. * 函数名:RFlash_Sector()
  1509. 作用域:外地文件调用
  1510. * 功能:
  1511. * 参数:
  1512. * 返回值:
  1513. * 创建人:
  1514. *
  1515. * 修改历史:(每条详述)
  1516. 可以用来检查目标号码,短消息中心号码,IP地址的有效性
  1517. ********************************************************/
  1518. void RFlash_Sector(unsigned int Sector)
  1519. {
  1520. Page_R_Write_Check(Sector);
  1521. gTimer=0;
  1522. while(gTimer<1100){Clear_Exter_WatchDog();}
  1523. OperateSPIEnd();
  1524. P6OUT|=SPI45DB041_WP;
  1525. WriteBuffer2ToPage(Sector+1);
  1526. P6OUT&=~SPI45DB041_WP;
  1527. OperateSPIEnd();
  1528. gTimer=0;
  1529. while(gTimer<1000){Clear_Exter_WatchDog();}
  1530. }
  1531. /********************************************************
  1532. * 函数名:Waiting_Allow_Send()
  1533. 作用域:外地文件调用
  1534. * 功能:
  1535. * 参数:
  1536. * 返回值:
  1537. * 创建人:
  1538. *
  1539. ********************************************************/
  1540. void Waiting_Allow_Send(void)
  1541. {
  1542. gTimer=0;
  1543. while(1)
  1544. {
  1545. Clear_Exter_WatchDog();
  1546. if(  (gHandle_Receive_Over>20)
  1547.   &&(gDisp_Receive_Over>20)
  1548.   &&( (gCommon_Flag&ALLOW_R232_F_1)==0)
  1549.   &&(gGPS_Receive_Over>20)
  1550.   &&(gReceive1_Over_Count>20)  )
  1551. {
  1552.    break;
  1553. }
  1554. if( gTimer>500 )
  1555. {
  1556. break;
  1557. }
  1558. }
  1559. }
  1560. /********************************************************
  1561. * 函数名:Do_Par()
  1562. 作用域:外地文件调用
  1563. * 功能:
  1564. * 参数:
  1565. * 返回值:
  1566. * 创建人:
  1567. *
  1568. ********************************************************/
  1569. void Do_Par(void)
  1570. {
  1571. unsigned int i,j,k;
  1572. unsigned char Check_Data=0;
  1573. unsigned char cNum1,cNum2,cNum3;
  1574. //处理车型,类别,组别,车号
  1575. gType = gGeneral_Buffer[1+9];
  1576. gKind = gGeneral_Buffer[1+10];
  1577. gGroup = gGeneral_Buffer[1+11];
  1578. gVID  = gGeneral_Buffer[1+12];
  1579. gVID <<= 8;
  1580. gVID += gGeneral_Buffer[1+13];
  1581. //处理目标号码1(存储在buffer1相应的缓冲区,第一个字节存储整个目标号码的长度,不包括长度本身这个字节)
  1582. //如果目标号码1带有+,则需要把+号也存储在相应的区域'+'=2B
  1583. i=1+14;
  1584. while(1)
  1585. {
  1586. if(gGeneral_Buffer[i]==0x00) break;
  1587. i++;
  1588. if(i>1+14+15) return;
  1589. //这里的15表示目标号码1不会超过15个数
  1590. }
  1591. //计算这个目标号码1的长度(包括如果前面有'+'的话,也一样要计算在内)
  1592. cNum1=i-(1+14);
  1593. //如果目标号码1的长度没有超过15,则目标号码有效
  1594. if( (i<=1+14+15)&&(cNum1>0) )
  1595. {
  1596. //计算出此目标号码1的号码长度并写入buffer1中相应的位置
  1597. SRAM_Init();
  1598. SRAM_Write(TARGET_NUMBER1_2+0,cNum1);
  1599. Check_Data=0;
  1600. for(j=1+14;j<i;j++)
  1601. {
  1602. SRAM_Write(TARGET_NUMBER1_2+j-14,gGeneral_Buffer[j]);
  1603. Check_Data += gGeneral_Buffer[j];
  1604. }
  1605. SRAM_Write(TARGET_NUMBER1_CHECK_2,Check_Data);
  1606. gGeneral_Flag|=NUM1_VAILD_F_1;
  1607. if(gGeneral_Buffer[1+14]=='0')
  1608. {
  1609. gGeneral_Flag&=~NUM1_VAILD_F_1;
  1610. }
  1611. }
  1612. OperateSPIEnd();
  1613. //处理目标号码2(存储在buffer1相应的缓冲区,第一个字节存储整个目标号码的长度)
  1614. //程序运行到这里i所表示的意义为gGeneral_Buffer[i]=0x00;
  1615. //如果目标号码1带有+,则需要把+号也存储在相应的区域
  1616. j=i+1;
  1617. while(1)
  1618. {
  1619. if(gGeneral_Buffer[j]==0x00) break;
  1620. j++;if(j>i+1+15) return;
  1621. }
  1622. cNum2=j-i;
  1623. if( (j<=i+1+15)&&(cNum2>0) )
  1624. {
  1625. }
  1626. OperateSPIEnd();
  1627. k=j+1;
  1628. while(1)
  1629. {
  1630. if(gGeneral_Buffer[k]==0x00) break;
  1631. k++;if(k>j+1+15) return;
  1632. }
  1633. cNum3=k-j;
  1634. if( (k<=j+1+15)&&(cNum3>0) )
  1635. {
  1636. }
  1637. OperateSPIEnd();
  1638. //延长一定时间
  1639. gTimer=0;Clear_Exter_WatchDog();
  1640. while(gTimer<100){}
  1641. Clear_Exter_WatchDog();
  1642. //++++++++++++++++++++++++++++++++++++++++++
  1643. //将两个目标电话号码写入到Flash相应的区域中
  1644. //1,先读出第一个扇区的数据存储在buffer2中。
  1645. ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
  1646. //先存储车型,类别,车组,车号
  1647. OperateSPIEnd();
  1648. WriteOneByteToBuffer2(VEH_TYPE_2,gType);
  1649. WriteNextByteToBuffer2(gKind);
  1650. WriteNextByteToBuffer2(gGroup);
  1651. WriteNextByteToBuffer2(gGeneral_Buffer[1+12]);
  1652. WriteNextByteToBuffer2(gGeneral_Buffer[1+13]);
  1653. OperateSPIEnd();
  1654. //存储目的电话号码1
  1655. //第一个字节存储号码长度(存储在FLASH中的目标号码如果带有+号,也一样存储在FLASH中,并还要算上长度)
  1656. if(cNum1>0)
  1657. {
  1658. WriteOneByteToBuffer2(TARGET_NUMBER1_F_2,cNum1);
  1659. for(i=0;i<cNum1;i++)
  1660. {
  1661. WriteNextByteToBuffer2(gGeneral_Buffer[1+14+i]);
  1662. }
  1663. OperateSPIEnd();
  1664. }
  1665. //存储目的电话号码2
  1666. if(cNum2>0)
  1667. {
  1668. WriteOneByteToBuffer2(TARGET_NUMBER2_F_2,cNum2);
  1669. for(i=0;i<cNum2;i++)
  1670. {
  1671. WriteNextByteToBuffer2(gGeneral_Buffer[i+1+14+cNum1+1]);
  1672. }
  1673. OperateSPIEnd();
  1674. }
  1675. OperateSPIEnd();
  1676. RFlash_Sector(FLASH_INFO1_ONE_2);
  1677. Re430_Flash(0);
  1678. }
  1679. /********************************************************
  1680. * 函数名:Do_Phone_Note()
  1681. 作用域:外地文件调用
  1682. * 功能:
  1683. * 参数:
  1684. * 返回值:
  1685. * 创建人:
  1686. *
  1687. ********************************************************/
  1688. void Do_Phone_Note(void)
  1689. {
  1690. unsigned int i=0,j=0;
  1691. unsigned char nTemp=0;
  1692. nTemp=gGeneral_Buffer[1+10]; //帧数(范围值0,1,2,3)
  1693. j=0;
  1694. if( (nTemp==0)||(nTemp==1) )
  1695. {
  1696. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
  1697. Write_Phone_Buffer2(nTemp);
  1698. //将Buffer2中的数据的内容写入相关扇区中
  1699. P6OUT|=SPI45DB041_WP;
  1700. WriteBuffer2ToPage(FLASH_PHONE_INFO_ONE_2);
  1701. P6OUT&=~SPI45DB041_WP;
  1702. j=1;
  1703. }
  1704. else if( (nTemp==2)||(nTemp==3) )
  1705. {
  1706. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_TWO_2);OperateSPIEnd();
  1707. Write_Phone_Buffer2(nTemp-2);
  1708. P6OUT|=SPI45DB041_WP;
  1709. WriteBuffer2ToPage(FLASH_PHONE_INFO_TWO_2);
  1710. P6OUT&=~SPI45DB041_WP;
  1711. j=1;
  1712. }
  1713. else
  1714. {
  1715. return;
  1716. }
  1717. gTimer=0;Clear_Exter_WatchDog();
  1718. while(gTimer<600){}
  1719. Clear_Exter_WatchDog();
  1720. gTimer=0;Clear_Exter_WatchDog();
  1721. while(gTimer<600){}
  1722. Clear_Exter_WatchDog();
  1723. }
  1724. /********************************************************
  1725. * 函数名:Write_Phone_Buffer2();
  1726. 作用域:本地文件调用
  1727. * 功能:
  1728. * 参数:  无
  1729. * 返回值:无
  1730. * 创建人:
  1731. * 修改历史:(每条详述)
  1732. ********************************************************/
  1733. void Write_Phone_Buffer2(unsigned char Add_Flag)
  1734. {
  1735. unsigned int i=0;
  1736. unsigned char Num_Phone=0;
  1737. OperateSPIEnd();
  1738. //处理第一个帧电话扇区的数据
  1739. if(Add_Flag==0)
  1740. {
  1741. WriteOneByteToBuffer2(ONE_1_FRAME_2,gGeneral_Buffer[1+12]);
  1742. }
  1743. //处理第二个帧电话扇区的数据
  1744. else if(Add_Flag==1)
  1745. {
  1746. WriteOneByteToBuffer2(TWO_1_FRAME_2,gGeneral_Buffer[1+12]);
  1747. }
  1748. for(i=0;i<(5*21-1);i++)
  1749. {
  1750. WriteNextByteToBuffer2(gGeneral_Buffer[1+13+i]);
  1751. }
  1752. OperateSPIEnd();
  1753. Num_Phone = ReadByteFromBuffer2(PHONE_NUM_2);
  1754. OperateSPIEnd();
  1755. //第1个帧的5个号码
  1756. if( Add_Flag==0 )
  1757. {
  1758. Num_Phone = gGeneral_Buffer[1+11];
  1759. }
  1760. //第2个帧的5个号码
  1761. else if( Add_Flag==1 )
  1762. {
  1763. Num_Phone = 5+gGeneral_Buffer[1+11];
  1764. }
  1765. WriteOneByteToBuffer2(PHONE_NUM_2,Num_Phone);
  1766. OperateSPIEnd();
  1767. }
  1768. /*
  1769. void Debug_Line_Data(void)
  1770. {
  1771. unsigned int i=0;
  1772. unsigned char nTemp=0;
  1773. //1,有斜率
  1774. // unsigned char LineData[40]={ 0x18,0x73,0x4A,0x48,0x04,0xD6,0x0F,0x70,0x18,0x73,0x62,0x30,0x04,0xD6,0x27,0x58,0x18,0x73,0x85,0x58,0x04,0xD6,0x27,0x58,0x18,0x73,0xA5,0xB0,0x04,0xD6,0x73,0x48,0x18,0x73,0xB7,0xF8,0x04,0xD6,0x88,0x60};
  1775. //2,平行
  1776. // unsigned char LineData[40]={ 0x18,0x72,0xEA,0xA8,0x04,0xD6,0x2E,0x60,0x18,0x73,0x20,0x18,0x04,0xD6,0x2E,0x60,0x18,0x73,0x56,0xF0,0x04,0xD6,0x31,0x30,0x18,0x73,0x83,0xF0,0x04,0xD6,0x31,0x30,0x18,0x73,0xA7,0x18,0x04,0xD6,0x2E,0x60};
  1777. //3,垂直
  1778. // unsigned char LineData[40]={ 0x18,0x73,0x69,0x38,0x04,0xD5,0xFE,0x90,0x18,0x73,0x69,0x38,0x04,0xD6,0x20,0x50,0x18,0x73,0x67,0xD0,0x04,0xD6,0x4A,0x80,0x18,0x73,0x66,0x69,0x04,0xD6,0x74,0xB0,0x18,0x73,0x65,0x00,0x04,0xD6,0x7F,0xF0};
  1779. unsigned char LineData[80]={0x18,0x73,0x67,0xd0,0x04,0xd6,0x57,0x28,0x18,0x73,0x67,0xd0,0x04,0xd6,0x20,0x50,
  1780. 0x18,0x73,0x90,0x98,0x04,0xd6,0x0c,0xa0,0x18,0x73,0x7e,0x50,0x04,0xd5,0xec,0x48,
  1781. 0x18,0x73,0x6c,0x08,0x04,0xd5,0x47,0xc0,0x18,0x73,0xfa,0x10,0x04,0xd5,0x36,0xe0,
  1782. 0x18,0x74,0x97,0x90,0x04,0xd5,0x34,0x10,0x18,0x75,0x6b,0xe8,0x04,0xd5,0x44,0xf0,
  1783. 0x18,0x75,0xd5,0x60,0x04,0xd5,0x82,0xd0,0x18,0x75,0xce,0x5b,0x04,0xd5,0xaf,0xd0};
  1784. nTemp=10;
  1785. SRAM_Init();
  1786. SRAM_Write( SLINE_NUM_1,nTemp );
  1787. SRAM_Write( SLINE_NUM_2,(~nTemp) );
  1788. for(i=0;i<80;i++)
  1789. {
  1790. SRAM_Write( (SLINE_DATA_1+i),LineData[i] );
  1791. }
  1792. gLine_Num=10;
  1793. gStatus3_Flag|=LINE_LIMIT_F_1;
  1794. //显示线路数据相应的缓冲区中的数据是否正确
  1795. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  1796. Send_COM1_Byte('[');
  1797. for(i=SLINE_NUM_1;i<SLINE_NUM_1+82;i++)
  1798. {
  1799. nTemp=SRAM_Read(i);
  1800. Send_COM1_Byte(ASCII(nTemp/0x10));
  1801. Send_COM1_Byte(ASCII(nTemp%0x10));
  1802. Clear_Exter_WatchDog();
  1803. }
  1804. Send_COM1_Byte(']');
  1805. Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
  1806. }
  1807. */
  1808. void Ask_Par(void)
  1809. {
  1810. unsigned int i=0;
  1811. unsigned char nTemp=0;
  1812. unsigned char nLength=0,Num=0,Num1=0,nIP=0;
  1813. unsigned char Dis_On=0;
  1814. unsigned int  iTCP=0,iGSM=0,iDistance=0;
  1815. //读取扇区1,2的相关参数
  1816. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);OperateSPIEnd();
  1817. OperateSPIEnd();
  1818. nLength=0;
  1819. gGeneral_Buffer[0]=0; //有效数据的长度(不包括长度本身)
  1820. gGeneral_Buffer[1]=ReadByteFromBuffer2(VEH_TYPE_2); //车型
  1821. gGeneral_Buffer[2]=ReadNextFromBuffer2(); //车类
  1822. gGeneral_Buffer[3]=ReadNextFromBuffer2(); //车组
  1823. gGeneral_Buffer[4]=ReadNextFromBuffer2(); //车号高位
  1824. gGeneral_Buffer[5]=ReadNextFromBuffer2(); //车号低位
  1825. nLength=5;
  1826. OperateSPIEnd();
  1827. Num=ReadByteFromBuffer2(TARGET_NUMBER1_F_2);
  1828. if(Num>16) Num=16;
  1829. for(i=0;i<Num;i++)
  1830. {
  1831. gGeneral_Buffer[6+i]=ReadNextFromBuffer2(); //目标号码1
  1832. }
  1833. OperateSPIEnd();
  1834. gGeneral_Buffer[6+Num]=0x00;
  1835. nLength=6+Num;
  1836. OperateSPIEnd();
  1837. nIP=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2); //IP地址
  1838. if(nIP>16) nIP=16;
  1839. for(i=0;i<nIP;i++)
  1840. {
  1841. gGeneral_Buffer[7+Num+i]=ReadNextFromBuffer2();
  1842. }
  1843. OperateSPIEnd();
  1844. gGeneral_Buffer[7+Num+nIP]=0x00;
  1845. nLength=7+Num+nIP;
  1846. OperateSPIEnd();
  1847. gGeneral_Buffer[8+Num+nIP]=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
  1848. for(i=0;i<4;i++)
  1849. {
  1850. gGeneral_Buffer[9+Num+nIP+i]=ReadNextFromBuffer2();//SOCKET,端口号
  1851. }
  1852. OperateSPIEnd();
  1853. //
  1854. Num1=ReadByteFromBuffer2(GPRS_APN_DATA_F_2); //APN参数
  1855. if( (Num1>0)&&(Num1<20) )
  1856. {
  1857. for(i=0;i<Num1;i++)
  1858. {
  1859. gGeneral_Buffer[13+Num+nIP+i]=ReadNextFromBuffer2();
  1860. }
  1861. OperateSPIEnd();
  1862. }
  1863. else
  1864. {
  1865. OperateSPIEnd();
  1866. Num1=sizeof(APN_DEFAULT);
  1867. for(i=0;i<Num1;i++)
  1868. {
  1869. gGeneral_Buffer[13+Num+nIP+i]=APN_DEFAULT[i];
  1870. }
  1871. }
  1872. gGeneral_Buffer[13+Num+nIP+Num1]=0x00;
  1873. nLength=13+Num+nIP+Num1;
  1874. //读扇区5,6的信息内容
  1875. gTimer=0;Clear_Exter_WatchDog();
  1876. while(gTimer<50){}
  1877. Clear_Exter_WatchDog();
  1878. OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
  1879. OperateSPIEnd();
  1880. nTemp=ReadByteFromBuffer2(ON_OFF_V1_2);
  1881. /*
  1882. if(nTemp&TCP_LAND_ON_OFF_1) gGeneral_Buffer[14+Num+nIP+Num1]=0x30;
  1883. else gGeneral_Buffer[14+Num+nIP+Num1]=0x31;
  1884. */
  1885. gON_OFF_Temp0 &=~ TCP_LAND_ON_OFF_1;
  1886. gStatus2_Flag |= TCP_ON_OFF_F_1;
  1887. gGeneral_Buffer[14+Num+nIP+Num1]=0x31;
  1888. nLength=14+Num+nIP+Num1;
  1889. nTemp=ReadNextFromBuffer2();
  1890. if(nTemp&DISTANCE_TCP_ON_1) Dis_On=0x30;
  1891. else Dis_On=0x31;
  1892. OperateSPIEnd();
  1893. //TCP的间隔参数需要发送6位的ASCII字符数据
  1894. //GSM的间隔一样
  1895. //按距离值一样
  1896. iTCP = ReadByteFromBuffer2(TCP_TIMER_2);
  1897. iTCP <<= 8;
  1898. iTCP += ReadNextFromBuffer2();
  1899. iGSM = ReadNextFromBuffer2();
  1900. iGSM <<= 8;
  1901. iGSM += ReadNextFromBuffer2();
  1902. iDistance = ReadNextFromBuffer2();
  1903. iDistance <<= 8;
  1904. iDistance += ReadNextFromBuffer2();
  1905. OperateSPIEnd();
  1906. gGeneral_Buffer[14+Num+nIP+Num1+1] = ASCII(iTCP/10000);
  1907. gGeneral_Buffer[14+Num+nIP+Num1+2] = ASCII((iTCP%10000)/1000);
  1908. gGeneral_Buffer[14+Num+nIP+Num1+3] = ASCII((iTCP%1000)/100);
  1909. gGeneral_Buffer[14+Num+nIP+Num1+4] = ASCII((iTCP%100)/10);
  1910. gGeneral_Buffer[14+Num+nIP+Num1+5] = ASCII(iTCP%10);
  1911. gGeneral_Buffer[14+Num+nIP+Num1+6] = ASCII(iGSM/10000);
  1912. gGeneral_Buffer[14+Num+nIP+Num1+7] = ASCII((iGSM%10000)/1000);
  1913. gGeneral_Buffer[14+Num+nIP+Num1+8] = ASCII((iGSM%1000)/100);
  1914. gGeneral_Buffer[14+Num+nIP+Num1+9] = ASCII((iGSM%100)/10);
  1915. gGeneral_Buffer[14+Num+nIP+Num1+10] = ASCII(iGSM%10);
  1916. gGeneral_Buffer[14+Num+nIP+Num1+11] = ASCII(iDistance/10000);
  1917. gGeneral_Buffer[14+Num+nIP+Num1+12] = ASCII((iDistance%10000)/1000);
  1918. gGeneral_Buffer[14+Num+nIP+Num1+13] = ASCII((iDistance%1000)/100);
  1919. gGeneral_Buffer[14+Num+nIP+Num1+14] = ASCII((iDistance%100)/10);
  1920. gGeneral_Buffer[14+Num+nIP+Num1+15] = ASCII(iDistance%10);
  1921. gGeneral_Buffer[14+Num+nIP+Num1+16]=Dis_On; //按距离上传时的TCP的工作方式
  1922. OperateSPIEnd();
  1923. nLength=14+Num+nIP+Num1+16;
  1924. gGeneral_Buffer[0]=nLength; //不包括长度本身这个字节,数据区的长度
  1925. }
  1926. void TA_Init(void)
  1927. {
  1928.     TACTL|=TASSEL1;         //输入时钟选择MCLK
  1929.     TACTL|=TACLR;           //定时器A清除位CLR清零
  1930.     TACTL|=MC1;             //定时器A选择连续增记数模式
  1931. //    TACTL|=TAIE;          //定时器A溢出中断允许
  1932.     TAR=0;                  //定时器A的值清零
  1933.     TACCTL0|=OUT;           //TXD2 Idle as Mark
  1934. TACCTL1|=OUT;           //TXD3 Idle as Mark
  1935. TACCTL2|=OUT;           //TXD4 Idle as Mark
  1936. }
  1937. void Re430_Flash(unsigned char InFlag)
  1938. {
  1939. unsigned int i=0,j=0;
  1940. if(InFlag>1) return;
  1941. gGeneral_Buffer[127]=0xAA;
  1942. OperateSPIEnd();
  1943. gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
  1944. // gGeneral_Buffer[127]=gGeneral_Buffer[0];
  1945. for(i=1;i<127;i++)
  1946. {
  1947. gGeneral_Buffer[i]=ReadNextFromBuffer2();
  1948. //gGeneral_Buffer[127]+=gGeneral_Buffer[i];
  1949. }
  1950. OperateSPIEnd();
  1951. Write_SegAB(InFlag);
  1952. gTimer=0;
  1953. while(gTimer<1100){Clear_Exter_WatchDog();}
  1954. }
  1955. /********************************************************
  1956. * 函数名:Check_ParNum()
  1957. 作用域:本地文件调用
  1958. * 功能:
  1959. * 参数:
  1960. * 返回值:
  1961. * 创建人:
  1962. *
  1963. * 修改历史:(每条详述)
  1964. ********************************************************/
  1965. unsigned int Check_ParNum(void)
  1966. {
  1967. unsigned int x=0,y=0;
  1968. unsigned int i=0;
  1969. x=Check_Vaild(CENTER_NUM_2,CENTER_NUM_CHECK_2); //短消息中心号码
  1970. y=Check_Vaild(TARGET_NUMBER1_2,TARGET_NUMBER1_CHECK_2); //目标电话号码
  1971. if(x==1)
  1972. {
  1973. gInternal_Flag&=~CENTER_NUM_VAILD_F_1;
  1974. gInternal_Flag|=SET_CSCA_F_1;
  1975. return(1);
  1976. }
  1977. if(y==1)
  1978. {
  1979. gGeneral_Buffer[CENTER_NUM_2]=SRAM_Read(CENTER_NUM_2);
  1980. for(i=CENTER_NUM_2+1;i<=CENTER_NUM_CHECK_2;i++)
  1981. {
  1982. gGeneral_Buffer[i]=SRAM_Read(i);
  1983. }
  1984. OperateSPIEnd();
  1985. Load_Flash_Par_Buffer1();
  1986. return(2);
  1987. }
  1988. return(0);
  1989. }
  1990. /********************************************************
  1991. * 函数名:Init_Buffer2()
  1992. 作用域:本地文件调用
  1993. * 功能:
  1994. * 参数:
  1995. * 返回值:
  1996. * 创建人:
  1997. *
  1998. * 修改历史:(每条详述)
  1999. ********************************************************/
  2000. void Init_Buffer2(void)
  2001. {
  2002. unsigned int i=0;
  2003. OperateSPIEnd();
  2004. WriteOneByteToBuffer2(0,0xFF);
  2005. for(i=1;i<263;i++)
  2006. {
  2007. WriteNextByteToBuffer2(0xFF);
  2008. }
  2009. WriteNextByteToBuffer2(0xAA);
  2010. OperateSPIEnd();
  2011. }
  2012. /********************************************************
  2013. * 函数名:Check_Buffer2()
  2014. 作用域:本地文件调用
  2015. * 功能:
  2016. * 参数:
  2017. * 返回值:
  2018. * 创建人:
  2019. *
  2020. * 修改历史:(每条详述)
  2021. ********************************************************/
  2022. unsigned char Deal_Sector(unsigned int iSector)
  2023. {
  2024. unsigned int i=0;
  2025. unsigned char Data=0;
  2026. for(i=0;i<3;i++)
  2027. {
  2028. Data=0;
  2029. OperateSPIEnd();ReadOnePageToBuffer2(iSector);OperateSPIEnd();
  2030. Data=ReadByteFromBuffer2(263);OperateSPIEnd();
  2031. if(Data==0xAA);
  2032. else
  2033. {
  2034. break;
  2035. }
  2036. }
  2037. if(Data==0xaa) return(0);
  2038. else return(1);
  2039. }