#pragma once // IRQs: FDCAN1_IT0, FDCAN1_IT1 // FDCAN2_IT0, FDCAN2_IT1 // FDCAN3_IT0, FDCAN3_IT1 #define CANFD typedef struct { volatile uint32_t header[2]; volatile uint32_t data_word[CANPACKET_DATA_SIZE_MAX/4U]; } canfd_fifo; #define CANS_ARRAY_SIZE 3 extern FDCAN_GlobalTypeDef *cans[CANS_ARRAY_SIZE]; #define CAN_ACK_ERROR 3U void can_clear_send(FDCAN_GlobalTypeDef *FDCANx, uint8_t can_number); void update_can_health_pkt(uint8_t can_number, uint32_t ir_reg); // ***************************** CAN ***************************** // FDFDCANx_IT1 IRQ Handler (TX) void process_can(uint8_t can_number); // FDFDCANx_IT0 IRQ Handler (RX and errors) // blink blue when we are receiving CAN messages void can_rx(uint8_t can_number); bool can_init(uint8_t can_number);