Format
Custom struct for spi handle, cs pin
Add prefix to functions
This commit is contained in:
2024-11-21 22:27:07 +01:00
parent 2ea3aa9bd3
commit 5bedd47b98
2 changed files with 497 additions and 599 deletions

959
mcp2515.c

File diff suppressed because it is too large Load Diff

137
mcp2515.h
View File

@@ -12,87 +12,88 @@
#include "can.h" #include "can.h"
typedef enum { typedef enum {
ERROR_OK = 0, ERROR_OK = 0,
ERROR_FAIL = 1, ERROR_FAIL = 1,
ERROR_ALLTXBUSY = 2, ERROR_ALLTXBUSY = 2,
ERROR_FAILINIT = 3, ERROR_FAILINIT = 3,
ERROR_FAILTX = 4, ERROR_FAILTX = 4,
ERROR_NOMSG = 5 ERROR_NOMSG = 5
} CAN_Error; } CAN_Error;
typedef enum { typedef enum {
CLKOUT_DISABLE = -1, CLKOUT_DISABLE = -1,
CLKOUT_DIV1 = 0x0, CLKOUT_DIV1 = 0x0,
CLKOUT_DIV2 = 0x1, CLKOUT_DIV2 = 0x1,
CLKOUT_DIV4 = 0x2, CLKOUT_DIV4 = 0x2,
CLKOUT_DIV8 = 0x3, CLKOUT_DIV8 = 0x3,
} CAN_CLKOUT; } CAN_CLKOUT;
typedef enum { typedef enum { MCP_20MHZ, MCP_16MHZ, MCP_8MHZ } CAN_CLOCK;
MCP_20MHZ, MCP_16MHZ, MCP_8MHZ
} CAN_CLOCK;
typedef enum { typedef enum {
CAN_5KBPS, CAN_5KBPS,
CAN_10KBPS, CAN_10KBPS,
CAN_20KBPS, CAN_20KBPS,
CAN_31K25BPS, CAN_31K25BPS,
CAN_33KBPS, CAN_33KBPS,
CAN_40KBPS, CAN_40KBPS,
CAN_50KBPS, CAN_50KBPS,
CAN_80KBPS, CAN_80KBPS,
CAN_83K3BPS, CAN_83K3BPS,
CAN_95KBPS, CAN_95KBPS,
CAN_100KBPS, CAN_100KBPS,
CAN_125KBPS, CAN_125KBPS,
CAN_200KBPS, CAN_200KBPS,
CAN_250KBPS, CAN_250KBPS,
CAN_500KBPS, CAN_500KBPS,
CAN_1000KBPS CAN_1000KBPS
} CAN_SPEED; } CAN_SPEED;
typedef enum { typedef enum { MASK0, MASK1 } MASK;
MASK0, MASK1
} MASK;
typedef enum { typedef enum { RXF0 = 0, RXF1 = 1, RXF2 = 2, RXF3 = 3, RXF4 = 4, RXF5 = 5 } RXF;
RXF0 = 0, RXF1 = 1, RXF2 = 2, RXF3 = 3, RXF4 = 4, RXF5 = 5
} RXF;
typedef enum { typedef enum { TXB0 = 0, TXB1 = 1, TXB2 = 2 } TXBn;
TXB0 = 0, TXB1 = 1, TXB2 = 2
} TXBn;
typedef enum { typedef enum { RXB0 = 0, RXB1 = 1 } RXBn;
RXB0 = 0, RXB1 = 1
} RXBn;
typedef struct {
SPI_HandleTypeDef* hspi;
GPIO_TypeDef* cs_port;
uint16_t cs_pin;
} MCP2515_HandleTypeDef;
CAN_Error MCP_reset(void);// void MCP2515_Init(MCP2515_HandleTypeDef* hcan, SPI_HandleTypeDef* hspi, GPIO_TypeDef* cs_port, uint16_t cs_pin);
CAN_Error MCP_setListenOnlyMode();// CAN_Error MCP2515_Reset(MCP2515_HandleTypeDef* hcan);
CAN_Error MCP_setSleepMode();// uint8_t MCP2515_Get_Status(MCP2515_HandleTypeDef* hcan);
CAN_Error MCP_setLoopbackMode();//
CAN_Error MCP_setNormalMode();// CAN_Error MCP2515_Set_Listen_Only_Mode(MCP2515_HandleTypeDef* hcan);
CAN_Error MCP_setBitrate(CAN_SPEED canSpeed);// CAN_Error MCP2515_Set_Sleep_Mode(MCP2515_HandleTypeDef* hcan);
CAN_Error MCP_setBitrateClock(CAN_SPEED canSpeed, CAN_CLOCK canClock); // CAN_Error MCP2515_Set_Loopback_Mode(MCP2515_HandleTypeDef* hcan);
CAN_Error MCP_setFilterMask(MASK num, uint8_t ext, uint32_t ulData);// CAN_Error MCP2515_Set_Normal_Mode(MCP2515_HandleTypeDef* hcan);
CAN_Error MCP_setFilter(RXF num, uint8_t ext, uint32_t ulData);//
CAN_Error MCP_sendMessageTo(TXBn txbn, can_frame *frame);// CAN_Error MCP2515_Set_Bitrate_Clock(MCP2515_HandleTypeDef* hcan, CAN_SPEED canSpeed, CAN_CLOCK canClock);
CAN_Error MCP_sendMessage(can_frame *frame);//
CAN_Error MCP_readMessageFrom(RXBn rxbn, can_frame *frame);// CAN_Error MCP2515_Set_Filter_Mask(MCP2515_HandleTypeDef* hcan, MASK mask, uint8_t ext, uint32_t ulData);
CAN_Error MCP_readMessage(can_frame *frame);// CAN_Error MCP2515_Set_Filter(MCP2515_HandleTypeDef* hcan, RXF num, uint8_t ext, uint32_t ulData);
uint8_t MCP_checkReceive(void);//
uint8_t MCP_checkError(void);// CAN_Error MCP2515_Send_Message_To(MCP2515_HandleTypeDef* hcan, TXBn txbn, can_frame* frame);
uint8_t MCP_getErrorFlags(void);// CAN_Error MCP2515_Send_Message(MCP2515_HandleTypeDef* hcan, can_frame* frame);
void MCP_clearRXnOVRFlags(void);//
uint8_t MCP_getInterrupts(void);// CAN_Error MCP2515_Read_Message_From(MCP2515_HandleTypeDef* hcan, RXBn rxbn, can_frame* frame);
uint8_t MCP_getInterruptMask(void);// CAN_Error MCP2515_Read_Message(MCP2515_HandleTypeDef* hcan, can_frame* frame);
void MCP_clearInterrupts(void);//
void MCP_clearTXInterrupts(void); uint8_t MCP2515_Check_Receive(MCP2515_HandleTypeDef* hcan);
uint8_t MCP_getStatus(void);// uint8_t MCP2515_Get_Error_Flags(MCP2515_HandleTypeDef* hcan);
void MCP_clearRXnOVR(void);// uint8_t MCP2515_Check_Error(MCP2515_HandleTypeDef* hcan);
void MCP_clearMERR();//
void MCP_clearERRIF();// void MCP2515_Clear_RXn_OVR_Flags(MCP2515_HandleTypeDef* hcan);
uint8_t MCP2515_Get_Interrupts(MCP2515_HandleTypeDef* hcan);
void MCP2515_Clear_Interrupts(MCP2515_HandleTypeDef* hcan);
uint8_t MCP2515_Get_Interrupt_Mask(MCP2515_HandleTypeDef* hcan);
void MCP2515_Clear_TX_Interrupts(MCP2515_HandleTypeDef* hcan);
void MCP2515_Clear_RXn_OVR(MCP2515_HandleTypeDef* hcan);
void MCP2515_Clear_MERR(MCP2515_HandleTypeDef* hcan);
void MCP2515_Clear_ERRIF(MCP2515_HandleTypeDef* hcan);
#endif /* APPLICATION_USER_INC_MCP2515_H_ */ #endif /* APPLICATION_USER_INC_MCP2515_H_ */