📄 gpr.c
字号:
/*******************************************
程序名称:Module_Rst()
功能:复位西门子MC35
返回值:无
********************************************/
nodebug cofunc void cofModule_Rst(void)
{
BitWrPortI(PDDR, &PDDRShadow, 1, 1);
waitfor(DelayMs(100));
BitWrPortI(PDDR, &PDDRShadow, 0, 1); //低电平有效
waitfor(DelayMs(300));
BitWrPortI(PDDR, &PDDRShadow, 1, 1);
waitfor(DelayMs(1000));
ModemSetDTR(1); //置DTR有效
}
/* START FUNCTION DESCRIPTION **********************************************/
/*CofModemInit_LINTON */
/*DESCRIPTION: resets modem with AT, ATZ commands. Yields to other tasks*/
/* while waiting for responses. */
/*RETURN VALUE: 1 - success */
/* 0 - modem not responding */
/*END DESCRIPTION **********************************************************/
nodebug cofunc int CofModemInit_LINTON(unsigned long baud) //this program is modified by LINTON based on CofModemInit().
{
auto int i, received;
auto int status;
unsigned char buffer[64];
unsigned long tr;
for(i = 0;i < 64;i++) buffer[i] = 0;
if(shut_mc35 > 3)//关闭模块电源
{
#ifdef DTU_DEBUG
wfd { cof_serAputs("\r\nshut up mc35,please wait 15 seconds\r\n"); }
#endif
BitWrPortI(PEDR, &PEDRShadow, 1, 5);
waitfor(DelayMs(5000));
VdHitWd(wd);
waitfor(DelayMs(5000));
VdHitWd(wd);
waitfor(DelayMs(5000));
VdHitWd(wd);
BitWrPortI(PEDR, &PEDRShadow, 0, 5);
shut_mc35 = 0;
}
//wfd { cofModule_Rst(); } //激活模块
Module_Rst();
//set DTR active
ModemSetDTR(1); //置DTR有效
//check DSR line,DSR(PB4)connect to GND
serCflowcontrolOff(); //流量控制打开
waitfor(DelayMs(1000));
VdHitWd(wd);//dog
wfd { CofModemSend("ATZ\r"); } // Reset
waitfor(DelayMs(300));
#ifdef DTU_DEBUG
wfd { cof_serAputs("\r\nATZ"); }
while(serCrdUsed() > 0)
{
wfd { cof_serAputc(serCgetc()); }
}
#endif
VdHitWd(wd);//dog
wfd { CofModemSend("ATQ0E0X0V1\r"); } // Q0: return result code
waitfor(DelayMs(300)); // E0: Echo off
#ifdef DTU_DEBUG // X0: retrun code 0-4,14
wfd { cof_serAputs("\r\nATQ0E0X0V1"); } // V1: <CR><LF>text<CR><LF>
while(serCrdUsed() > 0)
{
wfd { cof_serAputc(serCgetc()); }
}
#endif
VdHitWd(wd);//dog
wfd { CofModemSend("AT&C1&D2&S0\r"); }
waitfor(DelayMs(300));
#ifdef DTU_DEBUG
wfd { cof_serAputs("\r\nAT&C1&D2&S0"); }
while(serCrdUsed() > 0)
{
wfd { cof_serAputc(serCgetc()); }
}
#endif
VdHitWd(wd);//dog
waitfor(DelayMs(200));
serCrdFlush();
for(i = 0;i < 3;i++)
{
//force command mode
//wfd { CofModemSend("AT\r"); } //送AT
//wfd { status = CofModemExpect("OK", 2000); } //等待ok返回
//waitfor(DelayMs(50)); //等待100ms
wfd { CofModemSend("AT^SSYNC=1\r"); }
wfd { status = CofModemExpect("OK", 1000); } //等待ok返回
waitfor(DelayMs(50));
VdHitWd(wd); //dog
if(status)
{
wfd { cof_serAputs("\r\nAT+CSQ\r\n"); }
wfd { CofModemSend("AT+CSQ\r"); }
tr = MS_TIMER;
while(1) // 显示返回结果以确定信号强度
{
while((received = serCgetc()) == -1)
{
if(MS_TIMER - tr > 500) break; //timed out
}
if(MS_TIMER - tr > 500) break;
wfd { cof_serAputc(received); } // putchar(received);
tr = MS_TIMER;
}
//wfd { CofModemSend(MODEM_INIT_STRING); } //送出初始化字符串
//ModemSend("AT+CGDCONT=1,\"IP\",\"CMnet\"\r");
ModemSend("AT+CGDCONT=1,\"IP\",\"");
readUserBlock(buffer,APN_Config,sizeof(buffer));
ModemSend(buffer);
ModemSend("\"\r");
VdHitWd(wd);//dog
#ifdef DTU_DEBUG
serAputs("AT+CGDCONT=1,\"IP\",\"");
serAputs(buffer);
serAputs("\r\n");
#endif
status = ModemExpect("OK", 2000);
VdHitWd(wd);//dog
if(status)
{
#ifdef DTU_DEBUG
wfd { cof_serAputs("AT+CGDCONT OK!\n\r"); }
#endif
return 1;
}
}
}
shut_mc35++;
return 0;
}
/*******************************************
程序名称:Module_Rst()
功能:复位西门子MC35
返回值:无
********************************************/
nodebug void Module_Rst(void)
{
BitWrPortI(PDDR, &PDDRShadow, 0, 1);
msDelay(100);
BitWrPortI(PDDR, &PDDRShadow, 1, 1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -