81 lines
2.2 KiB
C
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
|