📄 gsm_430.c
字号:
OK **1,为了减少串行FLASH的操作(包括串行FLASH中的SRAM的操作,则将以前存储在buffer1中的数据转移到外部的SRAM中)
3,根据硬件PCB的改进,增加对外部串行FLASH的WP管脚的控制(预防对FLASH的操作损坏)
4,针对场强信号的发送,改为每间隔一定时间发送场强信号,而不是在查询CSQ后才发送场强指令OK
5,如果M22处于电话状态下,则需要每间隔一定时间查询CLCC指令 OK
2005年10月19日:
1,增加进行测试外部SRAM的指令()完成测试OK
2,增加主控主动挂机指令的接收手柄的响应,如果2秒内未接收到手柄的挂机指令响应,则重复发送
重复5次,则丢弃此包(还未调试)
3,将对手柄需要发送的的数据存储在外部SRAM中。改变原来向手柄发送指令随时发送的结构模式
取消所有对buffer1的操作
14,因为每次在发送数据和登陆TCP前,均有个验证中心号码和目标号码等参数的有效性,需要是对外部SRAM进行操作
频繁的操作可能引起外部FLASH内容的丢失,则这里改为每30分钟进行所有的验证,如果严整正确,则设置
一个标志,如果失败,则立刻进行数据的重装工作
2005年11月3日
1,根据在MSP430内部的两个信息扇区,取消对信息扇区数据的校验核的计算,取代的是最后一个字节存储0XAA,
只表示此信息扇区存储过数据。如果在检验外部FLASH的两个扇区的数据均不正确的情况下
则需要将两个信息扇区的数据覆盖到外部的FLASH中
2005年11月8日:
1,增加定位查询的可靠信,如果在接收到一个短消息(属于定位查询),并且,设备工作在
GSM的工作方式下,并且目标号码属于无效的状态,则需要暂时提取这个短消息号码中的
号码,然后作为暂时的目标号码存储起来,在发送定位数据的时候则以此目标号码为准。
2005年11月16日:
1,取消每次系统程序上电后,查询记录仪驾驶员代码的操作
2005年11月19日
1,精简程序,减少AD转换判断部分,增加对FLASH的可靠操作,尤其是对电话号码存储部分的操作
2005年11月21日
1,完善参数设置方面的尤其是APN方面的处理,增加对buffer2的处理机制
2005年11月23日
1,针对山东市场的一体机,默认电话始终处于开启状态
2005年12月1日:
1,针对在测试过程中,出现的模拟串口失效的问题,则增加了个几个恢复(重新对TA定时器进行初始化)
2005年12月3日:
1,针对如果外部的晶振如果暂时的失效,则会严重影响三个模拟串口的接收,则采用系统程序重新启来恢复
2005年12月4日:
1,针对外部晶振XT2的暂时失效,则增加对外部晶振XT2的失效中断处理程序
2005年12月8日:
在前面版本的一体机的程序结构下,需要进行部分程序结构的修改,使得符合一体机的概念,就是将GPS
工作部分和记录仪的工作部分能够在任何一个还没工作正常下,双方能互相不干扰和影响,即GSM模块在
进行初始化或者正在初始化的过程中,并不影响记录仪的工作和显示屏的工作
2005年12月27日:
根据以前存在接收记录仪数据的方式有可能判断不到正确的数据包,现在将接收记录仪数据的方式进行改进
\********************************************************/
/********************************************************\
* 文件名: GSM_430.C
* 创建时间:2004年12月7日
* 创建人:
* 版本号: 1.00
* 功能: 系统主程序框架
* 文件属性:公共文件
* 修改历史:(每条详述)
\********************************************************/
#include <msp430x14x.h>
#include <math.h>
#include "TA_Uart.h"
#include "SPI45DB041.h"
#include "W_Protocol.h"
#include "Handle_Protocol.h"
#include "Uart01.h"
#include "M22_AT.h"
#include "Define_Bit.h"
#include "D_Buffer.h"
#include "Other_Define.h"
#include "General.h"
#include "Main_Init.h"
#include "Sub_C.h"
#include "Check_GSM.h"
#include "Do_Reset.h"
#include "Do_M22.h"
#include "Do_Handle.h"
#include "Do_GPS.h"
#include "Do_Disp.h"
#include "Do_Other.h"
#include "Do_SRAM.h"
#include "Do_Record.h"
#include "Record_Protocol.h"
#include "Msp430_Flash.h"
/*
#include "Disp_Protocol.h"
*/
//#define Debug_GSM_COM1
unsigned int i;
unsigned int Z_Timer=0;
unsigned int Debug_Timer=0;
/********************************************************\
* 函数名:main.c
作用域:本地文件调用
作为主框架程序
* 功能: 项目主函数,系统的循环运行
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
void main(void)
{
//看门狗定时器WDT的设置:
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗WDT ,WDTPW看门狗的口令
//时钟模块的设置:
BCSCTL2|=SELS+SELM1; //SELS表示用XT2CLK作为SMCLK的时钟源
//SELM1表示用XT2CLK作为MCLK时钟源
//ACLK---辅助时钟,用于软件选择分频因子,也可用软件选做各外围模块的时钟信号
//MCLK---主时钟,主要用于CPU和系统,也可软件选择分频因子
//SMCLK--子时钟,由软件选择用于外围模块
// BCSCTL2|=DIVS_3; //选择SMCLK时钟的分频因子为8
// BCSCTL2|=DIVM_3; //选择MCLK时钟的分频因子为8
//-------------------------------
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
for (i = 0xFF; i > 0; i--);
}
while ( IFG1 & OFIFG ); // OSCFault flag still set?
//--------------------------------
for (i = 60000; i > 0; i--);
//定时器TA的设置
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
//定时器TB的设置
TBCTL|=TBSSEL1; //输入时钟源选择MCLK
TBCTL|=TBCLR; //定时器B清除位CLR清零
TBCTL|=MC1; //模式为连续增记数
// TBCTL|=TBIE; //定时器B溢出中断允许
TBR=0; //寄存器B的值清零
TBCCTL0|=CCIE;
/*
=============================================================================
波特率的计算方式
8000 000 /19200=416.6667D(十进制)=01A0H+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -