📄 main.c
字号:
#define MAINMODULE
#include "config.h"
#include "I2CINT.h"
#include "sysmem.h"
#include "fm3164.h"
#include "main.h"
#include "crc16.h"
#include "transform.h"
#include "port.h"
#define TaskMonitorStkLengh 128
#define TaskSouthStkLengh 128
#define TaskNorthStkLengh 128
#define TaskTD_TwoSecondStkLengh 128
#define TaskSouthId 4
#define TaskNorthId 5
#define TaskMonitorId 2
#define TaskTD_TwoSecondId 10
OS_STK TaskMonitorStk[TaskMonitorStkLengh];
OS_STK TaskSouthStk[TaskSouthStkLengh];
OS_STK TaskNorthStk[TaskNorthStkLengh];
OS_STK TaskTD_TwoSecondStk[TaskTD_TwoSecondStkLengh];
void TaskMonitor(void *pdata);
void TaskTD_TwoSecond(void *pdata);
OS_EVENT *KeyMbox = NULL;
#define IO_KEY1 (1<<18) // 开站上报按键
#define IO_KEY2 (1<<16) // 配置变更上报按键
#define IO_KEY3 (1<<19) // 巡检上报按键
#define IO_KEY4 (1<<17) // 修复上报按键
INT8U localData[256] = {'\0'};
const INT8U ParaInitFlag[4] = {0x00,0x00,0x00,0x01};// 参数区初始化标志
extern INT8U SysGain;
void ResetCpu(void)
{
OS_ENTER_CRITICAL(); // 关中断
while(1)
{
; // 等待看门狗复位
}
}
int main(void)
{
OSInit ();
OSTaskCreate(TaskMonitor,(void *)0, &TaskMonitorStk[TaskMonitorStkLengh - 1], TaskMonitorId);
OSStart();
return 0;
}
INT16S CheckSystemInitFlag(void)
{
INT8U i = 0;
INT8U iic_buff[4];
INT16S flag = 0;
ReadFram(0x0000, iic_buff ,4);
for( i = 0; i < 4; i++ )
{
if( iic_buff[i] != ParaInitFlag[i] )
{
flag = -1;
break;
}
}
return flag;
}
void TaskMonitor(void *pdata)
{
pdata = pdata;
TargetInit();
I2C_Init(400000);
InitMsg();
InitMem();
TD_IntAllPar();//初始化参数
OSTaskCreate (TaskSouth,(void *)0, &TaskSouthStk[TaskSouthStkLengh - 1],TaskSouthId);
OSTaskCreate (TaskNorth,(void *)0, &TaskNorthStk[TaskNorthStkLengh - 1],TaskNorthId);
OSTaskCreate (TaskTD_TwoSecond,(void *)0, &TaskTD_TwoSecondStk[TaskTD_TwoSecondStkLengh - 1],TaskTD_TwoSecondId);
while (1)
{
OSTimeDly(OS_TICKS_PER_SEC/4);
IO0SET = 1 << 13;
OSTimeDly(OS_TICKS_PER_SEC/4);
IO0CLR = 1 << 13;
}
}
void TD_QueryState(void)
{
uint8 state;
for(state=0 ;state<11 ;state++)
{
//下行输出过功率告警计数
if(DownOutputOverPowerAlarmState[state] == 0x01)
{
if (DownOutputOverPowerAlarmCnt[state]++ > 200)
{
DownOutputOverPowerAlarmCnt[state] = 100;
}
noDownOutputOverPowerAlarmCnt[state] = 0;
}
else
{
if (noDownOutputOverPowerAlarmCnt[state]++ > 200)
{
noDownOutputOverPowerAlarmCnt[state] = 100;
}
DownOutputOverPowerAlarmCnt[state] = 0;
}
// 下行输出欠功率告警计数
if(DownOutputLessPowerAlarmState[state] == 0x01)
{
if (DownOutputLessPowerAlarmCnt[state]++ > 200)
{
DownOutputLessPowerAlarmCnt[state] = 100;
}
noDownOutputLessPowerAlarmCnt[state] = 0;
}
else
{
if (noDownOutputLessPowerAlarmCnt[state]++ > 200)
{
noDownOutputLessPowerAlarmCnt[state] = 100;
}
DownOutputLessPowerAlarmCnt[state] = 0;
}
// 下行输出过驻波告警告警计数
if(DownVSWRAlarmState[state] == 0x01)
{
if (DownVSWRAlarmCnt[state]++ > 200)
{
DownVSWRAlarmCnt[state] = 100;
}
noDownVSWRAlarmCnt[state] = 0;
}
else
{
if (noDownVSWRAlarmCnt[state]++ > 200)
{
noDownVSWRAlarmCnt[state] = 100;
}
DownVSWRAlarmCnt[state] = 0;
}
}
// TD-SCDMA失步告警计数
if(AsynchronismAlarmState == 0x01)
{
if (AsynchronismAlarmCnt++ > 200)
{
AsynchronismAlarmCnt = 100;
}
noAsynchronismAlarmCnt = 0;
}
else
{
if (noAsynchronismAlarmCnt++ > 200)
{
noAsynchronismAlarmCnt = 100;
}
AsynchronismAlarmCnt = 0;
}
//告警计数记够后
for(state=0 ; state<11 ;state++)
{
//下行输出过功率告警产生
if((DownOutputOverPowerAlarmCnt[state] > 36) && (Querydata2G[state].DownOutputOverPowerAlarmEn == 0x01))
{
Syncdata2G[state].Dev_DownOutputOverPowerAlarmState = 0x01;
}
else if(noDownOutputOverPowerAlarmCnt[state] > 81)
{
Syncdata2G[state].Dev_DownOutputOverPowerAlarmState = 0x00;
}
//下行输出欠功率告警产生
if((DownOutputLessPowerAlarmCnt[state] > 36) && (Querydata2G[state].DownOutputLessPowerAlarmEn == 0x01))
{
Syncdata2G[state].Dev_DownOutputLessPowerAlarmState = 0x01;
}
else if(noDownOutputLessPowerAlarmCnt[state] > 81)
{
Syncdata2G[state].Dev_DownOutputLessPowerAlarmState = 0x00;
}
//下行输出过驻波告警产生
if((DownVSWRAlarmCnt[state] > 36) && (Querydata2G[state].DownVSWRAlarmEn == 0x01))
{
Syncdata2G[state].Dev_DownVSWRAlarmState = 0x01;
}
else if(noDownVSWRAlarmCnt[state] > 81)
{
Syncdata2G[state].Dev_DownVSWRAlarmState = 0x00;
}
}
//TD模块的告警状态
//下行输出过功率告警产生
if((DownOutputOverPowerAlarmCnt[6] > 36) && (Querydata3G.DownOutputOverPowerAlarmEn == 0x01))
{
Syncdata3G.Dev_DownOutputOverPowerAlarmState = 0x01;
}
else if(noDownOutputOverPowerAlarmCnt[6] > 81)
{
Syncdata3G.Dev_DownOutputOverPowerAlarmState = 0x00;
}
//下行输出欠功率告警产生
if((DownOutputLessPowerAlarmCnt[6] > 36) && (Querydata3G.DownOutputLessPowerAlarmEn == 0x01))
{
Syncdata3G.Dev_DownOutputLessPowerAlarmState = 0x01;
}
else if(noDownOutputLessPowerAlarmCnt[6] > 81)
{
Syncdata3G.Dev_DownOutputLessPowerAlarmState = 0x00;
}
//下行输出过驻波告警产生
if((DownVSWRAlarmCnt[6] > 36) && (Querydata3G.DownVSWRAlarmEn == 0x01))
{
Syncdata3G.Dev_DownVSWRAlarmState = 0x01;
}
else if(noDownVSWRAlarmCnt[6] > 81)
{
Syncdata3G.Dev_DownVSWRAlarmState = 0x00;
}
if((AsynchronismAlarmCnt> 36) && (Querydata3G.AsynchronismAlarmEn ==0x01))
{
Syncdata3G.Dev_AsynchronismAlarmState = 0x01;
}
else if(AsynchronismAlarmCnt> 81)
{
Syncdata3G.Dev_AsynchronismAlarmState = 0x00;
}
}
void TaskTD_TwoSecond(void *pdata)
{
pdata = pdata;
while(1)
{
TD_QueryState();
OSTimeDly(200);
}
}
void TD_IntAllPar(void)
{
//2G初始化设备信息
ReadFram(1, (INT8U *)&Querydata2G[2].ModuleType ,13);//初始化GSM参数
ReadFram(14, (INT8U *)&Querydata2G[3].ModuleType ,13);//初始化DCS参数
ReadFram(27, (INT8U *)&Querydata2G[4].ModuleType ,13);//初始化CDMA800参数
ReadFram(40, (INT8U *)&Querydata2G[5].ModuleType ,13);//初始化CDMA200参数
ReadFram(53, (INT8U *)&Querydata2G[7].ModuleType ,13);//初始化WCDMA参数
//2G初始化同步数据
ReadFram(66, (INT8U *)&Syncdata2G[2].RFSignalSwitch ,6);//初始化GSM参数
ReadFram(72, (INT8U *)&Syncdata2G[3].RFSignalSwitch ,6);//初始化DCS参数
ReadFram(78, (INT8U *)&Syncdata2G[4].RFSignalSwitch ,6);//初始化CDMA800参数
ReadFram(84, (INT8U *)&Syncdata2G[5].RFSignalSwitch ,6);//初始化CDMA200参数
ReadFram(90, (INT8U *)&Syncdata2G[7].RFSignalSwitch ,6);//初始化WCDMA参数
//3G初始化设备信息
ReadFram(96, (INT8U *)&Querydata3G.ModuleType ,15);
//3G初始化同步数据
ReadFram(111, (INT8U *)&Syncdata3G.RFSignalSwitch ,7);
//同步的制式的状态初始化
ReadFram(0x119,(INT8U *)(&SysGain),1);
}
void TD_WriteAllPar(void)
{
//2G初始化设备信息
WriteFram(1, (INT8U *)&Querydata2G[2].ModuleType ,13);//初始化GSM参数
WriteFram(14, (INT8U *)&Querydata2G[3].ModuleType ,13);//初始化DCS参数
WriteFram(27, (INT8U *)&Querydata2G[4].ModuleType ,13);//初始化CDMA800参数
WriteFram(40, (INT8U *)&Querydata2G[5].ModuleType ,13);//初始化CDMA200参数
WriteFram(53, (INT8U *)&Querydata2G[7].ModuleType ,13);//初始化WCDMA参数
//2G初始化同步数据
WriteFram(66, (INT8U *)&Syncdata2G[2].RFSignalSwitch ,6);//初始化GSM参数
WriteFram(72, (INT8U *)&Syncdata2G[3].RFSignalSwitch ,6);//初始化DCS参数
WriteFram(78, (INT8U *)&Syncdata2G[4].RFSignalSwitch ,6);//初始化CDMA800参数
WriteFram(84, (INT8U *)&Syncdata2G[5].RFSignalSwitch ,6);//初始化CDMA200参数
WriteFram(90, (INT8U *)&Syncdata2G[7].RFSignalSwitch ,6);//初始化WCDMA参数
//3G初始化设备信息
WriteFram(96, (INT8U *)&Querydata3G.ModuleType ,15);
//3G初始化同步数据
WriteFram(111, (INT8U *)&Syncdata3G.RFSignalSwitch ,7);
//同步的制式的状态初始化
WriteFram(0x119,(INT8U *)(&SysGain),1);
}
/*********************************************************************************************************
** End Of File
**********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -