150 lines
3.2 KiB
C
150 lines
3.2 KiB
C
|
#include "global_time.h"
|
||
|
|
||
|
|
||
|
GLOBAL_TIME global_time = GLOBAL_TIME_DEFAULTS;
|
||
|
|
||
|
|
||
|
void init_global_time_struct(unsigned int freq_pwm)
|
||
|
{
|
||
|
global_time.total_seconds = 0;
|
||
|
global_time.total_seconds10 = 0;
|
||
|
global_time.total_seconds10full = 0;
|
||
|
global_time.microseconds = 0;
|
||
|
global_time.microseconds_temp = 0;
|
||
|
global_time.pwm_tics = 0;
|
||
|
global_time.miliseconds = 0;
|
||
|
global_time.miliseconds_long = 0;
|
||
|
global_time.seconds = 0;
|
||
|
global_time.minuts = 0;
|
||
|
global_time.hours = 0;
|
||
|
global_time.freq_pwm_hz = freq_pwm;
|
||
|
global_time.microseconds_add = 1000000L / global_time.freq_pwm_hz;
|
||
|
}
|
||
|
|
||
|
#pragma CODE_SECTION(global_time_calc,".fast_run2");
|
||
|
void global_time_calc(GLOBAL_TIME_handle gt)
|
||
|
{
|
||
|
unsigned int miliseconds_temp = 0;
|
||
|
static unsigned int miliseconds_temp10 = 0;
|
||
|
|
||
|
gt->pwm_tics++;
|
||
|
gt->microseconds += gt->microseconds_add;
|
||
|
gt->microseconds_temp += gt->microseconds_add;
|
||
|
|
||
|
if (gt->microseconds_temp>=1000)
|
||
|
{
|
||
|
if (gt->microseconds_temp>=2000)
|
||
|
{
|
||
|
miliseconds_temp = gt->microseconds_temp/1000;
|
||
|
gt->microseconds_temp -= miliseconds_temp*1000;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
miliseconds_temp = 1;
|
||
|
gt->microseconds_temp -= 1000;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// gt->miliseconds = gt->microseconds / 1000;
|
||
|
|
||
|
gt->miliseconds += miliseconds_temp;
|
||
|
miliseconds_temp10 += miliseconds_temp;
|
||
|
|
||
|
if(gt->pwm_tics == gt->freq_pwm_hz)
|
||
|
{
|
||
|
gt->total_seconds++;
|
||
|
gt->total_seconds10 += 10;
|
||
|
|
||
|
gt->seconds++;
|
||
|
gt->pwm_tics = 0;
|
||
|
miliseconds_temp10 = 0;
|
||
|
|
||
|
if(gt->seconds == 60)
|
||
|
{
|
||
|
gt->minuts++;
|
||
|
gt->seconds = 0;
|
||
|
|
||
|
if(gt->minuts == 60)
|
||
|
{
|
||
|
gt->hours++;
|
||
|
gt->minuts = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//gt->total_seconds10 += 10;
|
||
|
gt->total_seconds10full = gt->total_seconds10 + miliseconds_temp10/100;
|
||
|
}
|
||
|
|
||
|
|
||
|
void init_timer_sec(unsigned int *start_time)
|
||
|
{
|
||
|
*start_time = global_time.total_seconds;
|
||
|
}
|
||
|
|
||
|
void init_timer_milisec(unsigned int *start_time)
|
||
|
{
|
||
|
*start_time = global_time.miliseconds;
|
||
|
}
|
||
|
|
||
|
int detect_pause_sec(unsigned int wait_pause, unsigned int *old_time)
|
||
|
{
|
||
|
unsigned long delta;
|
||
|
|
||
|
if(global_time.total_seconds >= *old_time)
|
||
|
{
|
||
|
delta = (unsigned int)((unsigned int)global_time.total_seconds - *old_time);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
delta = (unsigned int)((unsigned int)global_time.total_seconds + (0xFFFFUL - *old_time));
|
||
|
}
|
||
|
|
||
|
if (delta>=wait_pause)
|
||
|
{
|
||
|
*old_time = (unsigned int)global_time.total_seconds;
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int detect_pause_milisec(unsigned int wait_pause, unsigned int *old_time)
|
||
|
{
|
||
|
unsigned long delta;
|
||
|
if(global_time.miliseconds >= *old_time)
|
||
|
{
|
||
|
delta = (unsigned int)((unsigned int)global_time.miliseconds - *old_time);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
delta = (unsigned int)((unsigned int)global_time.miliseconds + (0xFFFFUL - *old_time));
|
||
|
}
|
||
|
|
||
|
if (delta>=wait_pause)
|
||
|
{
|
||
|
*old_time = (unsigned int)global_time.miliseconds;
|
||
|
return 1;
|
||
|
}
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
unsigned int get_delta_milisec(unsigned int *old_time, unsigned int upd)
|
||
|
{
|
||
|
unsigned long delta;
|
||
|
|
||
|
if(global_time.miliseconds >= *old_time)
|
||
|
{
|
||
|
delta = (unsigned int)((unsigned int)global_time.miliseconds - *old_time);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
delta = (unsigned int)((unsigned int)global_time.miliseconds + (0xFFFFUL - *old_time));
|
||
|
}
|
||
|
if (upd)
|
||
|
*old_time = (unsigned int)global_time.miliseconds;
|
||
|
|
||
|
return delta;
|
||
|
}
|