// // Created by cfif on 16.03.2024. // #ifndef NATION_CAN_MODULE_CAN_H #define NATION_CAN_MODULE_CAN_H #include "SerialPortIO.h" #include "cmsis_os2.h" #include "n32g45x.h" /* #define CAN_FILTER_STDID(STDID) ((STDID & 0x3FF) << 5) #define CAN_FILTER_EXTID_H(EXTID) ((uint16_t)(((EXTID >> 18) << 5 ) | ((EXTID & 0x2FFFF) >> 13))) #define CAN_FILTER_EXTID_L(EXTID) ((uint16_t)((EXTID & 0x2FFFF) << 3)) */ #define CAN_FILTER_STDID(STDID) ((STDID & 0x7FF) << 5) #define CAN_FILTER_EXTID_H(EXTID) ((uint16_t)(((EXTID << 3) | CAN_ID_EXT) >> 16)) #define CAN_FILTER_EXTID_L(EXTID) ((uint16_t)(( EXTID << 3) | CAN_ID_EXT)) #define CAN_FILTER_STDMASK(STDMASK) ((STDMASK & 0x7FF) << 5) #define CAN_FILTER_EXTMASK_H(EXTMASK) ((uint16_t)(((EXTMASK << 3) >> 16))) #define CAN_FILTER_EXTMASK_L(EXTMASK) ((uint16_t)(EXTMASK << 3)) typedef enum { CAN_BAUD_RATE_1000K, CAN_BAUD_RATE_500K, CAN_BAUD_RATE_250K, CAN_BAUD_RATE_125K } eCanBaudRate; typedef enum { CAN_STD_ID, CAN_EXT_ID } eCanTypeFrame; typedef struct { CAN_Module *can; uint32_t id; eCanTypeFrame canTypeFrame; bool canFilterEnable; uint32_t canFilterId; uint32_t canFilterMask; osMessageQueueId_t rxDataQueue; osMessageQueueId_t rxDataSnifferQueue; osMessageQueueId_t txAccessQueue; } tCanSerialPortNation; void CanSerialPortIrqRxProcessing(tCanSerialPortNation *env); void CanSerialPortSetFilter(tCanSerialPortNation *env, bool canFilterEnable, uint32_t canFilterId, uint32_t canFilterMask); void CanSerialPortSetId(tCanSerialPortNation *env, uint32_t id); void vCanSerialPortInit( tCanSerialPortNation *env, CAN_Module *CANx, eCanBaudRate canBaudRate, uint8_t irqSubPriority, eCanTypeFrame canTypeFrame, uint32_t canId, bool canFilterEnable, uint32_t canFilterId, uint32_t canFilterMask, uint32_t rxBufferLength, uint32_t rxSnifferLength ); tSerialPortIO CanPort_GetIo(tCanSerialPortNation *env); tSerialPortIO CanPort_GetSnifferIo(tCanSerialPortNation *env); #endif //NATION_CAN_MODULE_CAN_H