📄 sub_c.c
字号:
Clear_Exter_WatchDog();
//++++++++++++++++++++++++++++++++++++++++++
//将两个目标电话号码写入到Flash相应的区域中
//1,先读出第一个扇区的数据存储在buffer2中。
ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
//先存储车型,类别,车组,车号
OperateSPIEnd();
WriteOneByteToBuffer2(VEH_TYPE_2,gType);
WriteNextByteToBuffer2(gKind);
WriteNextByteToBuffer2(gGroup);
WriteNextByteToBuffer2(gGeneral_Buffer[1+12]);
WriteNextByteToBuffer2(gGeneral_Buffer[1+13]);
OperateSPIEnd();
//存储目的电话号码1
//第一个字节存储号码长度(存储在FLASH中的目标号码如果带有+号,也一样存储在FLASH中,并还要算上长度)
if(cNum1>0)
{
WriteOneByteToBuffer2(TARGET_NUMBER1_F_2,cNum1);
for(i=0;i<cNum1;i++)
{
WriteNextByteToBuffer2(gGeneral_Buffer[1+14+i]);
}
OperateSPIEnd();
}
//存储目的电话号码2
if(cNum2>0)
{
WriteOneByteToBuffer2(TARGET_NUMBER2_F_2,cNum2);
for(i=0;i<cNum2;i++)
{
WriteNextByteToBuffer2(gGeneral_Buffer[i+1+14+cNum1+1]);
}
OperateSPIEnd();
}
OperateSPIEnd();
RFlash_Sector(FLASH_INFO1_ONE_2);
Re430_Flash(0);
}
/********************************************************\
* 函数名:Do_Phone_Note()
作用域:外地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
\********************************************************/
void Do_Phone_Note(void)
{
unsigned int i=0,j=0;
unsigned char nTemp=0;
nTemp=gGeneral_Buffer[1+10]; //帧数(范围值0,1,2,3)
j=0;
if( (nTemp==0)||(nTemp==1) )
{
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
Write_Phone_Buffer2(nTemp);
//将Buffer2中的数据的内容写入相关扇区中
P6OUT|=SPI45DB041_WP;
WriteBuffer2ToPage(FLASH_PHONE_INFO_ONE_2);
P6OUT&=~SPI45DB041_WP;
j=1;
}
else if( (nTemp==2)||(nTemp==3) )
{
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_TWO_2);OperateSPIEnd();
Write_Phone_Buffer2(nTemp-2);
P6OUT|=SPI45DB041_WP;
WriteBuffer2ToPage(FLASH_PHONE_INFO_TWO_2);
P6OUT&=~SPI45DB041_WP;
j=1;
}
else
{
return;
}
gTimer=0;Clear_Exter_WatchDog();
while(gTimer<600){}
Clear_Exter_WatchDog();
gTimer=0;Clear_Exter_WatchDog();
while(gTimer<600){}
Clear_Exter_WatchDog();
}
/********************************************************\
* 函数名:Write_Phone_Buffer2();
作用域:本地文件调用
* 功能:
* 参数: 无
* 返回值:无
* 创建人:
* 修改历史:(每条详述)
\********************************************************/
void Write_Phone_Buffer2(unsigned char Add_Flag)
{
unsigned int i=0;
unsigned char Num_Phone=0;
OperateSPIEnd();
//处理第一个帧电话扇区的数据
if(Add_Flag==0)
{
WriteOneByteToBuffer2(ONE_1_FRAME_2,gGeneral_Buffer[1+12]);
}
//处理第二个帧电话扇区的数据
else if(Add_Flag==1)
{
WriteOneByteToBuffer2(TWO_1_FRAME_2,gGeneral_Buffer[1+12]);
}
for(i=0;i<(5*21-1);i++)
{
WriteNextByteToBuffer2(gGeneral_Buffer[1+13+i]);
}
OperateSPIEnd();
Num_Phone = ReadByteFromBuffer2(PHONE_NUM_2);
OperateSPIEnd();
//第1个帧的5个号码
if( Add_Flag==0 )
{
Num_Phone = gGeneral_Buffer[1+11];
}
//第2个帧的5个号码
else if( Add_Flag==1 )
{
Num_Phone = 5+gGeneral_Buffer[1+11];
}
WriteOneByteToBuffer2(PHONE_NUM_2,Num_Phone);
OperateSPIEnd();
}
/*
void Debug_Line_Data(void)
{
unsigned int i=0;
unsigned char nTemp=0;
//1,有斜率
// 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};
//2,平行
// 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};
//3,垂直
// 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};
unsigned char LineData[80]={0x18,0x73,0x67,0xd0,0x04,0xd6,0x57,0x28,0x18,0x73,0x67,0xd0,0x04,0xd6,0x20,0x50,
0x18,0x73,0x90,0x98,0x04,0xd6,0x0c,0xa0,0x18,0x73,0x7e,0x50,0x04,0xd5,0xec,0x48,
0x18,0x73,0x6c,0x08,0x04,0xd5,0x47,0xc0,0x18,0x73,0xfa,0x10,0x04,0xd5,0x36,0xe0,
0x18,0x74,0x97,0x90,0x04,0xd5,0x34,0x10,0x18,0x75,0x6b,0xe8,0x04,0xd5,0x44,0xf0,
0x18,0x75,0xd5,0x60,0x04,0xd5,0x82,0xd0,0x18,0x75,0xce,0x5b,0x04,0xd5,0xaf,0xd0};
nTemp=10;
SRAM_Init();
SRAM_Write( SLINE_NUM_1,nTemp );
SRAM_Write( SLINE_NUM_2,(~nTemp) );
for(i=0;i<80;i++)
{
SRAM_Write( (SLINE_DATA_1+i),LineData[i] );
}
gLine_Num=10;
gStatus3_Flag|=LINE_LIMIT_F_1;
//显示线路数据相应的缓冲区中的数据是否正确
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
Send_COM1_Byte('[');
for(i=SLINE_NUM_1;i<SLINE_NUM_1+82;i++)
{
nTemp=SRAM_Read(i);
Send_COM1_Byte(ASCII(nTemp/0x10));
Send_COM1_Byte(ASCII(nTemp%0x10));
Clear_Exter_WatchDog();
}
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
}
*/
void Ask_Par(void)
{
unsigned int i=0;
unsigned char nTemp=0;
unsigned char nLength=0,Num=0,Num1=0,nIP=0;
unsigned char Dis_On=0;
unsigned int iTCP=0,iGSM=0,iDistance=0;
//读取扇区1,2的相关参数
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);OperateSPIEnd();
OperateSPIEnd();
nLength=0;
gGeneral_Buffer[0]=0; //有效数据的长度(不包括长度本身)
gGeneral_Buffer[1]=ReadByteFromBuffer2(VEH_TYPE_2); //车型
gGeneral_Buffer[2]=ReadNextFromBuffer2(); //车类
gGeneral_Buffer[3]=ReadNextFromBuffer2(); //车组
gGeneral_Buffer[4]=ReadNextFromBuffer2(); //车号高位
gGeneral_Buffer[5]=ReadNextFromBuffer2(); //车号低位
nLength=5;
OperateSPIEnd();
Num=ReadByteFromBuffer2(TARGET_NUMBER1_F_2);
if(Num>16) Num=16;
for(i=0;i<Num;i++)
{
gGeneral_Buffer[6+i]=ReadNextFromBuffer2(); //目标号码1
}
OperateSPIEnd();
gGeneral_Buffer[6+Num]=0x00;
nLength=6+Num;
OperateSPIEnd();
nIP=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2); //IP地址
if(nIP>16) nIP=16;
for(i=0;i<nIP;i++)
{
gGeneral_Buffer[7+Num+i]=ReadNextFromBuffer2();
}
OperateSPIEnd();
gGeneral_Buffer[7+Num+nIP]=0x00;
nLength=7+Num+nIP;
OperateSPIEnd();
gGeneral_Buffer[8+Num+nIP]=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
for(i=0;i<4;i++)
{
gGeneral_Buffer[9+Num+nIP+i]=ReadNextFromBuffer2();//SOCKET,端口号
}
OperateSPIEnd();
//
Num1=ReadByteFromBuffer2(GPRS_APN_DATA_F_2); //APN参数
if( (Num1>0)&&(Num1<20) )
{
for(i=0;i<Num1;i++)
{
gGeneral_Buffer[13+Num+nIP+i]=ReadNextFromBuffer2();
}
OperateSPIEnd();
}
else
{
OperateSPIEnd();
Num1=sizeof(APN_DEFAULT);
for(i=0;i<Num1;i++)
{
gGeneral_Buffer[13+Num+nIP+i]=APN_DEFAULT[i];
}
}
gGeneral_Buffer[13+Num+nIP+Num1]=0x00;
nLength=13+Num+nIP+Num1;
//读扇区5,6的信息内容
gTimer=0;Clear_Exter_WatchDog();
while(gTimer<50){}
Clear_Exter_WatchDog();
OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
OperateSPIEnd();
nTemp=ReadByteFromBuffer2(ON_OFF_V1_2);
/*
if(nTemp&TCP_LAND_ON_OFF_1) gGeneral_Buffer[14+Num+nIP+Num1]=0x30;
else gGeneral_Buffer[14+Num+nIP+Num1]=0x31;
*/
gON_OFF_Temp0 &=~ TCP_LAND_ON_OFF_1;
gStatus2_Flag |= TCP_ON_OFF_F_1;
gGeneral_Buffer[14+Num+nIP+Num1]=0x31;
nLength=14+Num+nIP+Num1;
nTemp=ReadNextFromBuffer2();
if(nTemp&DISTANCE_TCP_ON_1) Dis_On=0x30;
else Dis_On=0x31;
OperateSPIEnd();
//TCP的间隔参数需要发送6位的ASCII字符数据
//GSM的间隔一样
//按距离值一样
iTCP = ReadByteFromBuffer2(TCP_TIMER_2);
iTCP <<= 8;
iTCP += ReadNextFromBuffer2();
iGSM = ReadNextFromBuffer2();
iGSM <<= 8;
iGSM += ReadNextFromBuffer2();
iDistance = ReadNextFromBuffer2();
iDistance <<= 8;
iDistance += ReadNextFromBuffer2();
OperateSPIEnd();
gGeneral_Buffer[14+Num+nIP+Num1+1] = ASCII(iTCP/10000);
gGeneral_Buffer[14+Num+nIP+Num1+2] = ASCII((iTCP%10000)/1000);
gGeneral_Buffer[14+Num+nIP+Num1+3] = ASCII((iTCP%1000)/100);
gGeneral_Buffer[14+Num+nIP+Num1+4] = ASCII((iTCP%100)/10);
gGeneral_Buffer[14+Num+nIP+Num1+5] = ASCII(iTCP%10);
gGeneral_Buffer[14+Num+nIP+Num1+6] = ASCII(iGSM/10000);
gGeneral_Buffer[14+Num+nIP+Num1+7] = ASCII((iGSM%10000)/1000);
gGeneral_Buffer[14+Num+nIP+Num1+8] = ASCII((iGSM%1000)/100);
gGeneral_Buffer[14+Num+nIP+Num1+9] = ASCII((iGSM%100)/10);
gGeneral_Buffer[14+Num+nIP+Num1+10] = ASCII(iGSM%10);
gGeneral_Buffer[14+Num+nIP+Num1+11] = ASCII(iDistance/10000);
gGeneral_Buffer[14+Num+nIP+Num1+12] = ASCII((iDistance%10000)/1000);
gGeneral_Buffer[14+Num+nIP+Num1+13] = ASCII((iDistance%1000)/100);
gGeneral_Buffer[14+Num+nIP+Num1+14] = ASCII((iDistance%100)/10);
gGeneral_Buffer[14+Num+nIP+Num1+15] = ASCII(iDistance%10);
gGeneral_Buffer[14+Num+nIP+Num1+16]=Dis_On; //按距离上传时的TCP的工作方式
OperateSPIEnd();
nLength=14+Num+nIP+Num1+16;
gGeneral_Buffer[0]=nLength; //不包括长度本身这个字节,数据区的长度
}
void TA_Init(void)
{
TACTL|=TASSEL1; //输入时钟选择MCLK
TACTL|=TACLR; //定时器A清除位CLR清零
TACTL|=MC1; //定时器A选择连续增记数模式
// TACTL|=TAIE; //定时器A溢出中断允许
TAR=0; //定时器A的值清零
TACCTL0|=OUT; //TXD2 Idle as Mark
TACCTL1|=OUT; //TXD3 Idle as Mark
TACCTL2|=OUT; //TXD4 Idle as Mark
}
void Re430_Flash(unsigned char InFlag)
{
unsigned int i=0,j=0;
if(InFlag>1) return;
gGeneral_Buffer[127]=0xAA;
OperateSPIEnd();
gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
// gGeneral_Buffer[127]=gGeneral_Buffer[0];
for(i=1;i<127;i++)
{
gGeneral_Buffer[i]=ReadNextFromBuffer2();
//gGeneral_Buffer[127]+=gGeneral_Buffer[i];
}
OperateSPIEnd();
Write_SegAB(InFlag);
gTimer=0;
while(gTimer<1100){Clear_Exter_WatchDog();}
}
/********************************************************\
* 函数名:Check_ParNum()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
unsigned int Check_ParNum(void)
{
unsigned int x=0,y=0;
unsigned int i=0;
x=Check_Vaild(CENTER_NUM_2,CENTER_NUM_CHECK_2); //短消息中心号码
y=Check_Vaild(TARGET_NUMBER1_2,TARGET_NUMBER1_CHECK_2); //目标电话号码
if(x==1)
{
gInternal_Flag&=~CENTER_NUM_VAILD_F_1;
gInternal_Flag|=SET_CSCA_F_1;
return(1);
}
if(y==1)
{
gGeneral_Buffer[CENTER_NUM_2]=SRAM_Read(CENTER_NUM_2);
for(i=CENTER_NUM_2+1;i<=CENTER_NUM_CHECK_2;i++)
{
gGeneral_Buffer[i]=SRAM_Read(i);
}
OperateSPIEnd();
Load_Flash_Par_Buffer1();
return(2);
}
return(0);
}
/********************************************************\
* 函数名:Init_Buffer2()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void Init_Buffer2(void)
{
unsigned int i=0;
OperateSPIEnd();
WriteOneByteToBuffer2(0,0xFF);
for(i=1;i<263;i++)
{
WriteNextByteToBuffer2(0xFF);
}
WriteNextByteToBuffer2(0xAA);
OperateSPIEnd();
}
/********************************************************\
* 函数名:Check_Buffer2()
作用域:本地文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
unsigned char Deal_Sector(unsigned int iSector)
{
unsigned int i=0;
unsigned char Data=0;
for(i=0;i<3;i++)
{
Data=0;
OperateSPIEnd();ReadOnePageToBuffer2(iSector);OperateSPIEnd();
Data=ReadByteFromBuffer2(263);OperateSPIEnd();
if(Data==0xAA);
else
{
break;
}
}
if(Data==0xaa) return(0);
else return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -