36 lines
1.0 KiB
C
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);
|
|
}
|
|
}
|