CanSerialPort_NATION_N32G45x/Inc/CanSerialPort.h

81 lines
2.2 KiB
C

//
// 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