基础版本
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
/*C*****************************************************************************
|
||||
* NAME: time_count.c
|
||||
*-------------------------------------------------------------------------------
|
||||
* RELEASE:
|
||||
* REVISION: 1.0
|
||||
|
||||
*******************************************************************************/
|
||||
/*_____ I N C L U D E S ______________________________________________________*/
|
||||
|
||||
#include "config.h" //全局声明
|
||||
|
||||
void delay(unsigned int Counter)
|
||||
{
|
||||
unsigned int i;
|
||||
for (; Counter != 0; Counter--)
|
||||
{
|
||||
i = 55; // 经示波器测试,精度1%
|
||||
while (i--)
|
||||
;
|
||||
}
|
||||
}
|
||||
/*_____ M A C R O S __________________________________________________________*/
|
||||
|
||||
/****************************************************
|
||||
函数名:TimerTask
|
||||
功能 :定时器初始化(主定时器,timer2)1ms
|
||||
参数 :无
|
||||
返回值:无
|
||||
****************************************************/
|
||||
void Timer_Init(void)
|
||||
{
|
||||
u8 i = 0, j = 0;
|
||||
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 开TIM2时钟
|
||||
/*TIM2*/
|
||||
TIM_TimeBaseStructure.TIM_Prescaler = 168 - 1; // 分频系数1000k
|
||||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数方式
|
||||
TIM_TimeBaseStructure.TIM_Period = 1000 - 1; // 计数上限 10ms 100hz
|
||||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟选裕:系统时钟
|
||||
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // TIM2时基初始化
|
||||
/***********************/
|
||||
TXHData.Timer_Num_Top = 0; // 初始化定时器数目
|
||||
/***************初始化定时器组*******************/
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MDRestartTimer[i];
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MBCountTimer[i];
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MBCountRXIDLETimer[i];
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MD_FramContinuityTimer[i];
|
||||
TXHData.Timer_Num_Top++;
|
||||
for (j = 0; j < 16; j++)
|
||||
{
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MD_Port_Info[i].GunInfo[j].LTDelayTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MD_Port_Info[i].FatherDevice[j].LTDelayTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
}
|
||||
}
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.POSCutTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.HeartbeatTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.POS_RS232Timer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.ReSendDataTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.GPSDataTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.AnalogTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.CTIMEReadTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MD_LORA_SlaveTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.KeyFindTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.POSReLinkTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MD_MultiplexRXIDLETimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MD_MultiplexTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.MD_Multiplex_Port_Info.MultiplexDevicerTimer[i];
|
||||
TXHData.Timer_Num_Top++;
|
||||
}
|
||||
TXHData.Timer_Buff[TXHData.Timer_Num_Top] = &TXHData.DelayDetectionTimer;
|
||||
TXHData.Timer_Num_Top++;
|
||||
TIM_Cmd(TIM2, ENABLE); // 打开TIM2
|
||||
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //
|
||||
Timer_NVIC_Configuration();
|
||||
}
|
||||
/****************************************************
|
||||
函数名:Timer_NVIC_Configuration
|
||||
功能 :定时器中断配置timer2
|
||||
参数 :无
|
||||
返回值:无
|
||||
****************************************************/
|
||||
void Timer_NVIC_Configuration(void)
|
||||
{
|
||||
NVIC_InitTypeDef NVIC_InitStructure; // 定义中断配置结构体
|
||||
|
||||
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
}
|
||||
/****************************************************
|
||||
函数名:SYSTimer_IRQHandler
|
||||
功能 :系统定时器中断(主定时器,timer2)10ms
|
||||
参数 :无
|
||||
返回值:无
|
||||
****************************************************/
|
||||
void SYSTimer_IRQHandler(void)
|
||||
{
|
||||
u8 pTimer = 0;
|
||||
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
|
||||
{
|
||||
for (pTimer = 0; pTimer < TXHData.Timer_Num_Top; pTimer++) // 轮训定时器队列
|
||||
{
|
||||
if (TXHData.Timer_Buff[pTimer]->Init == 1) // 定时器初始化标志
|
||||
{
|
||||
TXHData.Timer_Buff[pTimer]->Init = 0;
|
||||
TXHData.Timer_Buff[pTimer]->ON_OFF = 0;
|
||||
TXHData.Timer_Buff[pTimer]->Flag = 0;
|
||||
TXHData.Timer_Buff[pTimer]->TimerCount = 0;
|
||||
}
|
||||
else if (TXHData.Timer_Buff[pTimer]->ON_OFF == 1 && TXHData.Timer_Buff[pTimer]->Flag == 0) // 定时器开启状态,未到时
|
||||
{
|
||||
TXHData.Timer_Buff[pTimer]->TimerCount += 1; // 如果定时器开启,计数值累加
|
||||
if (TXHData.Timer_Buff[pTimer]->TimerCount >= TXHData.Timer_Buff[pTimer]->TimerCountMax) // 判断定时器是否到时
|
||||
{
|
||||
TXHData.Timer_Buff[pTimer]->Flag = 1; // 置位定时器到时标志
|
||||
if (TXHData.Timer_Buff[pTimer]->Cycle == 1) // 定时器循环,清除定时器计数值
|
||||
{
|
||||
TXHData.Timer_Buff[pTimer]->TimerCount = 0;
|
||||
}
|
||||
else // 到时不循环,初始化定时器
|
||||
{
|
||||
TXHData.Timer_Buff[pTimer]->ON_OFF = 0;
|
||||
TXHData.Timer_Buff[pTimer]->TimerCount = 0;
|
||||
TXHData.Timer_Buff[pTimer]->Cycle = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef __TIME_COUNT_H_
|
||||
#define __TIME_COUNT_H_
|
||||
/*H******************************************************************************
|
||||
* NAME: time_count.h
|
||||
*********************************************************************************/
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
typedef struct ///定时器结构体
|
||||
{
|
||||
u8 Init;
|
||||
u8 ON_OFF; //到时标志
|
||||
u8 Flag; //到时标志
|
||||
u8 Cycle; //循环标志
|
||||
u32 TimerCount; //计数值
|
||||
u32 TimerCountMax; //计数值
|
||||
}timer_TypeDef;
|
||||
//变量声明
|
||||
|
||||
//******************************************************************************
|
||||
//函数声明
|
||||
|
||||
extern void Timer_Init(void);
|
||||
void Timer_NVIC_Configuration(void);
|
||||
extern void SYSTimer_IRQHandler(void);
|
||||
void delay(unsigned int Counter);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user