73 lines
1.4 KiB
C
73 lines
1.4 KiB
C
|
|
#include "sys_tim.h"
|
|||
|
|
#include "platform.h"
|
|||
|
|
#include "modbus_regs_file.h"
|
|||
|
|
#include "modbus_config.h"
|
|||
|
|
|
|||
|
|
static uint32_t time_ms_cnt = 0;
|
|||
|
|
static uint32_t time_sec_cnt = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
@brief тут счётчики инкрементируем
|
|||
|
|
*/
|
|||
|
|
void SysTick_Handler(void)
|
|||
|
|
{
|
|||
|
|
static uint16_t sec_update_cnt=0;
|
|||
|
|
time_ms_cnt++;
|
|||
|
|
sec_update_cnt++;
|
|||
|
|
if(sec_update_cnt==1000u) //если 1000 милисек отсчитали
|
|||
|
|
{
|
|||
|
|
sec_update_cnt=0u;
|
|||
|
|
time_sec_cnt++;
|
|||
|
|
}
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
@brief инициализируем системный таймер на 1ms
|
|||
|
|
*/
|
|||
|
|
void SysTick_Init(void)
|
|||
|
|
{
|
|||
|
|
SysTick_Config((P_SYSCLK/1000UL));
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
@brief блокирущая задержка
|
|||
|
|
*/
|
|||
|
|
void delay(uint32_t ms)
|
|||
|
|
{
|
|||
|
|
uint32_t tickstart = time_get_ms();
|
|||
|
|
uint32_t wait = ms;
|
|||
|
|
|
|||
|
|
while ((time_get_ms() - tickstart) < wait)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
@brief получить время в ms
|
|||
|
|
*/
|
|||
|
|
uint32_t time_get_ms(void)
|
|||
|
|
{
|
|||
|
|
return time_ms_cnt;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
@brief получить время в сеундах
|
|||
|
|
*/
|
|||
|
|
uint32_t time_get_sec(void)
|
|||
|
|
{
|
|||
|
|
return time_sec_cnt;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
@brief передаём указатель на счётчи времени в модбас
|
|||
|
|
*/
|
|||
|
|
uint8_t MBRF_time_init(void)
|
|||
|
|
{
|
|||
|
|
uint8_t MB_init_eror = 0u;
|
|||
|
|
MB_init_eror+=MBRF_create_reg(MBADDR_TIME_SEC0, ((uint16_t*)&time_sec_cnt)+1u, MBTYPE_TIME_SEC); //0x006E
|
|||
|
|
MB_init_eror+=MBRF_create_reg(MBADDR_TIME_SEC1, &time_sec_cnt, MBTYPE_TIME_SEC); //0x006F
|
|||
|
|
return MB_init_eror;
|
|||
|
|
}
|