Master_Control/Core/Src/Clock_Sync.c
jazzpi 3d4f9eab74 Send counter with clock sync frames
This allows for a simple sanity check on the slave to catch missed
frames.
2022-08-02 18:33:52 +02:00

36 lines
1.0 KiB
C

#include "Clock_Sync.h"
#include "CAN_Communication.h"
#include "stm32g4xx_hal.h"
#include "stm32g4xx_hal_fdcan.h"
#include "stm32g4xx_hal_tim.h"
static FDCAN_HandleTypeDef* can;
static TIM_HandleTypeDef* sync_timer;
static TIM_HandleTypeDef* heartbeat_timer;
static uint8_t clock_sync_counter = 0;
void clock_sync_init(FDCAN_HandleTypeDef* can_handle,
TIM_HandleTypeDef* sync_timer_handle,
TIM_HandleTypeDef* heartbeat_timer_handle) {
can = can_handle;
sync_timer = sync_timer_handle;
heartbeat_timer = heartbeat_timer_handle;
HAL_TIM_Base_Start_IT(heartbeat_timer);
// Delay between starting the timers so the interrupts don't fire at the same
// time
HAL_Delay(50);
HAL_TIM_Base_Start_IT(sync_timer);
}
void clock_sync_handle_timer_complete(TIM_HandleTypeDef* timer) {
if (timer == sync_timer) {
CAN_Transmit(can, CLOCK_SYNC_ADDRESS, &clock_sync_counter, 1);
clock_sync_counter++;
} else if (timer == heartbeat_timer) {
CAN_Transmit(can, MASTER_HEARTBEAT_ADDRESS, NULL, 0);
}
}