83 lines
2.0 KiB
C
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;
|
|
} |