📄 msp430_gprs.c
字号:
/* 主程序修改说明记录
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2005年6月20日:
程序文件说明:
根据新制作的PCB图(GPS-M22:V2.4)版本的原理图,此程序为对应的系统文件
程序版本号:V2.32
程序功能说明:
1,增加外部的SRAM,用于接收外接部件的大量数据的传输(增加W24L011AJ(128K),实际使用64K),锁存器74HC573。
2,串口的分配: 串口0 M22
串口1 外接部件(调试串口)
串口2 GPS
串口3 车载电话
串口4 显示终端
3,主要实现功能:
(1),与行使记录仪之间的交互通讯
(2),
(3),
(4),
(5),
详细说明与行使记录仪之间的通讯流程:
主控向记录仪发送的数据有: 1,每一秒种发送8个字节的经,纬度,(用于记录仪存储和运算)(记录仪不用给出ECHO)
2,每隔1个小时发送一个查询当前记录仪时间,如果判断记录仪的时间和GPS的时间误差超过1秒,此时记录仪显示车辆速度为0,则发送矫正时间参数)
记录仪需要给出ECHO
3,主控接收到中心设置超速的限制值的参数设置(转发给记录仪)(记录仪需要给出ECHO)
4,主控接收到中心设置间隔距离的限制值的参数设置(转发给记录仪)(记录仪需要给出ECHO)
5,主控接收到中心设置疲劳驾驶的时间限制值的参数设置(转发给记录仪)(记录仪需要给出ECHO)
记录仪表向主控发送的数据有:1,记录仪接收到主控的查询当前时间命令,则返回当前记录仪的时间和当前速度的值
2,如果车辆速度超过设置的报警警戒值,则记录仪上发超速报警的信息,每间隔2秒发送一次,直至主控收到后返回响应,则停止发送超速报警信息
如果记录仪在超速的状态下,判断不处于超速,则主动发送停止超速的的信息,直至主控收到后返回响应
3,如果属于疲劳驾驶的状态下,记录仪应该向主控发送一个信息
4,车辆行使状态下,根据数据上报的类型(按时间上报数据点,按距离上报数据点...)如果属于按距离上报数据点,则如果记录仪表每判断到一个间隔
距离,则需要向主控发送一个信息
主控查询大量记录仪数据的通讯形式:中心下发一个查询记录仪大量数据的下行命令,主控转发给记录仪,记录仪则分批读取数据发送给主控
主控先负责接收数据,每接收一包数据,先判断是否属于部分数据包,如果是,则将有效数据提取出来,依次存储在外部的扩展SRAM里。然后给出一个
接收到此数据包的响应,然后等待接收记录仪的下一个数据包。直至接收到记录仪发送过来的此数据全部转发完成的信息,则主控开始进行外部SRAM的数据
转发(TCP方式)]
所有的中心的查询命令和设置命令,主控均不做命令字的检验,,主控接收记录仪的所有命令的回应包括设置的响应,或者数据返回
2005年8月30日
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/********************************************************\
系统程序结构的说明:
1,FLASH的分配
扇区0-----暂停使用
扇区1,2---作为存储目标号码,IP地址和端口号(双备份)
扇区3,4---作为电话号码的存储
扇区5,6---作为上传数据间隔,开关量等等的存储(双备份)
2,串口的分配
串口0 M22
串口1 外接部件(调试串口)
串口2 GPS
串口3 车载电话
串口4 显示终端
3, SRAM的分配
1,串行存储器的两个264byte的SRAM的分配buffer1,buffer2,
buffer1的分配:与原来的程序保持一致(不变),具体细节见相关地方
buffer2的使用用来存储读取的相关页的数据
2,外部64K的SRAM的分配
0-----60K 作为接收外部数据(以行使记录仪为例)大量数据的接收(在串口1的中断子程序中处理接收)
61K---64K 作为存储记录仪需要向显示终端发送数据的缓冲存储(暂时这么考虑)
3,MSP430F149的内部SRAM的分配
4,TCP数据的发送方式和类别
根据以前的TCP数据的方式发送方式,现在将发送的数据分位如下几类:
A, 存储在buffer1相关区域的上行数据(包括手柄,和显示终端需要上行的相关信息,和对一些下行命令的响应信息)
B, 存储在周期数据缓冲区gCircle_Buffer[]中有需要发送的数据(主要存储的是周期发送的报警信息和行车轨迹信息)
C, TCP在线状态下的握手信息数据的定时发送主要以发FF 0D数据
D, 发送外接部件的数据(以存储在外部的SRAM的数据区域)
5,显示终端和手柄终端的接收和发送缓冲区的说明
手柄和显示屏与主控系统通讯均是采用的模拟串口3,和4。属于半双工的形式,故在向终端发送数据的时候需要判断是否在接收数据。
接收手柄的数据缓冲:gHandle_Buffer[30]
向手柄的发送数据的缓冲:保持与原来的兼容,是在需要向手柄发送数据的时候才组织数据发送(以节省SRAM的空间)
接收显示屏数据缓冲:gDisp_Buffer_R[50]
向显示屏的发送数据的缓冲:gDisp_Buffer[256]
6,与外接部件的数据通讯的接收和发送缓冲说明(以记录仪为例)
接收外接部件的数据缓冲:外部SRAM(0---64K)
向外接部件发送的数据缓冲:
修改记录:
2005年8月23日:
ACC关闭后20分钟,TCP下线,将按30分钟的方式传送数据。1个小时关闭模块
ACC关闭后20分钟 ,如果ACC再次开启,则重新启动程序
行车轨迹只可以最少10分钟的SMS的补偿,报警信息可以允许GSM方式传送
手柄通讯方式的改变
重点监控制:中心下行监控命令,则改变工作状态为监控方式,则上传数据的不受ACC开和关闭的控制
并且,不管时间间隔多大,均采用TCP常连线的方式。重点监控的方式是数传方式的改变
但此状态方式并不存储在FLASH中,同时,即使ACC关闭,在开启的时候,也不允许重新
启动程序。直到重点监控结束。数传的方式改变。
2005年9月1日:
增加通过手柄接口设置参数的部分,APN,电话号码本
调试一些线路报警的算法
2005年9月5日:
线路偏离的算法正确验证
增加如果ACC开启状态下,持续12个小时,则会将MCU重新启动一次。以恢复设备状态
此功能是为了防止在实际接线中,施工时候直接将ACC接在常电上的一个自恢复保护措施
2005年9月6日:
完善线路偏离报警的算法(但线路数据通过中心并没完成设置)
通过手柄端口设置电话号码完成
通过手柄端口参数设置完善(增加了APN的设置,按距离上传的距离值设置,)
2005年9月8日:
通过手柄端口设置显示终端的短信预置完成
2005年9月14日:
根据要求修改上报数据的补偿方式(短消息)
1,被劫报警的上报方式的修改
2005年9月22日:实际跑车进行线路报警的完善
2005年10月9日:
1,针对电话方面的恢复处理
2,针对疲劳报警或者预警的误报处理
根据在现场实际应用中发现的情况,以后需要完善的几点:
A;因为手柄和显示终端是半双工通讯,并且均为模拟串口的方式,在需要将232的IC改换为3232的同时,
为了增加通讯的可靠性,则需要针对部分指令的响应处理.
2005年10月16日:
1,针对模拟串口的发送和接收时候,需要停止某些中断
2,增加对MSP430内部的两个信息存储器的利用。分别为128个字节,作为存储备份参数利用
信息存储器A,备份扇区1和扇区2的前128字节的数据
信息存储器B,备份扇区3和扇区4的前128字节的数据
如果开机检测扇区1和扇区2,均是校验核不正确的扇区数据,则需要将信息存储器A中的前128个字节读出,并重新计算校验核
存储在扇区1或者扇区2中。
同样道理,信息存储器B是对应的扇区3和扇区4
3,每次更新或者从新计算扇区1和2的时候需要及时的更新信息存储器A
每次更新或者重新计算扇区3和4的时候需要及时的更新信息存储器B:
暂时未完成测试
2005年10月17日:
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -