Files
ls1x-master-v0.4/private/ls1c102/1c102_mytimer.c
2025-01-15 10:57:40 +08:00

83 lines
2.0 KiB
C

#include "../../include/ls1x.h"
#include "../../include/Config.h"
#include "ls1c102_ptimer.h"
#include "1c102_mytimer.h"
#define TIMER_NUM 100
Timertask_Typedef mytimer_que[MYTIME_QUEUE_NUMBER]={0};
char Reg_timer_task(unsigned int exe_time, int (*handle_fun)(void))
{
unsigned char i = 0;
for(i=0; i<=MYTIME_QUEUE_NUMBER-1; ++i)
{
if(!mytimer_que[i].status){
mytimer_que[i].que_number = i;
mytimer_que[i].status = MYTIME_TASK_ENABLE;
mytimer_que[i].execute_time = exe_time/TIMER_NUM;
mytimer_que[i].handle_fun = handle_fun;
break;
}
else {
if (i == MYTIME_QUEUE_NUMBER) {
printf("The queue is full.\n");
return -1;
}
}
}
return mytimer_que[i].que_number;
}
void Del_timer_task(unsigned char que_num)
{
mytimer_que[que_num].status = MYTIME_TASK_DISABLE;
return;
}
void Timer_IRQ_Handle()
{
unsigned char i = 0;
for(i=0; i<=MYTIME_QUEUE_NUMBER-1; ++i)
{
if(mytimer_que[i].status == MYTIME_TASK_ENABLE)
{
if(--mytimer_que[i].execute_time <= 0)
{
mytimer_que[i].handle_fun();
Del_timer_task(mytimer_que[i].que_number); /*执行完删除该定时任务*/
}
}
}
return;
}
unsigned int SystemFreq;
static void timer_start()
{
TIM_InitTypeDef timer_info;
TIM_StructInit(&timer_info);
timer_info.Clock_Freq = SystemFreq;
timer_info.TIME_CMP = ((timer_info.Clock_Freq*TIMER_NUM)/1000); //(1ms*TIMER_NUM)ms
timer_info.TIME_STP = ((timer_info.Clock_Freq*TIMER_NUM)/1000);
TIM_Init(&timer_info);
return;
}
void Timer_Init()
{
int i = 0;
for(i=0; i<MYTIME_QUEUE_NUMBER-1; ++i)
{
mytimer_que[i].status = MYTIME_TASK_DISABLE;
mytimer_que[i].que_number = 0;
mytimer_que[i].execute_time = 0;
mytimer_que[i].handle_fun = NULL;
}
timer_start();
return;
}