📄 mcp2515.h
字号:
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
//====================================================================================//
//模式寄存器
#define CAN_MODE 0x0F //模式寄存器
//状态寄存器
#define CANSTAT 0x0E //
//比特率设置寄存器
#define CAN_CNF1 0x2a //CNF1
#define CAN_CNF2 0x29 //CNF2 位时序
#define CAN_CNF3 0x28 //CNF3
//中断时能寄存器
#define CANINTE 0x2B
//中断标志寄存器
#define CANINTF 0x2C
//接收相关寄存器
#define CAN_BFPCTRL 0x0c //RXnBF接收引脚和状态寄存器
/* Recieve Filters */
#define RXF0SIDH 0x00
#define RXF0SIDL 0x01
#define RXF0EID8 0x02
#define RXF0EID0 0x03
#define RXF1SIDH 0x04
#define RXF1SIDL 0x05
#define RXF1EID8 0x06
#define RXF1EID0 0x07
#define RXF2SIDH 0x08
#define RXF2SIDL 0x09
#define RXF2EID8 0x0A
#define RXF2EID0 0x0B
#define RXF3SIDH 0x10
#define RXF3SIDL 0x11
#define RXF3EID8 0x12
#define RXF3EID0 0x13
#define RXF4SIDH 0x14
#define RXF4SIDL 0x15
#define RXF4EID8 0x16
#define RXF4EID0 0x17
#define RXF5SIDH 0x18
#define RXF5SIDL 0x19
#define RXF5EID8 0x1A
#define RXF5EID0 0x1B
/* Receive Masks */
#define RXM0SIDH 0x20
#define RXM0SIDL 0x21
#define RXM0EID8 0x22
#define RXM0EID0 0x23
#define RXM1SIDH 0x24
#define RXM1SIDL 0x25
#define RXM1EID8 0x26
#define RXM1EID0 0x27
//接收缓存0
#define CAN_RXB0CTRL 0x60 //接收缓冲器0控制寄存器
#define CAN_RXB0SIDH 0x61 //接收缓存0标准ID10--ID3
#define CAN_RXB0SIDL 0x62 //接收缓存0标准ID2--ID0 SRR IDE 扩展EID17-EID16
//SRR <0:标准数据帧 1:标准远程发送请求帧> IDE 0 标准帧 1 扩展帧
#define CAN_RXB0EID8 0x63 //扩展EID15-EID8
#define CAN_RXB0EID0 0x64 //扩展EID7-EID0
#define CAN_RXB0DLC 0x65 //接收缓存0数据长度 0x08
#define CAN_RXB0DM 0x66 //接收缓存0数据起始字节
//接收缓存1
#define CAN_RXB1CTRL 0x70 //接收缓冲器1控制寄存器
#define CAN_RXB1SIDH 0x71 //接收缓存1标准ID10--ID3
#define CAN_RXB1SIDL 0x72 //接收缓存标准ID2--ID0 SRR IDE 扩展EID17-EID16
//SRR <0:标准数据帧 1:标准远程发送请求帧> IDE 0 标准帧 1 扩展帧
#define CAN_RXB1EID8 0x73 //扩展EID15-EID8
#define CAN_RXB1EID0 0x74 //扩展EID7-EID0
#define CAN_RXB1DLC 0x75 //接收缓存1数据长度 0x08
#define CAN_RXB1DM 0x76 //接收缓存1数据起始字节
//发送相关寄存器
#define CAN_TXRTSCTRL 0x0d //TXnRTS发送请求引脚和状态寄存器
//发送缓冲器0
#define CAN_TXB0CTRL 0x30 //发送缓冲器0控制寄存器
#define CAN_TXB0SIDH 0x31 //发送缓存0标准ID10--ID3
#define CAN_TXB0SIDL 0x32 //发送缓存0标准ID2--ID0 SRR IDE 扩展EID17-EID16
//SRR <0:标准数据帧 1:标准远程发送请求帧> IDE 0 标准帧 1 扩展帧
#define CAN_TXB0EID8 0x33 //扩展EID15-EID8
#define CAN_TXB0EID0 0x34 //扩展EID7-EID0
#define CAN_TXB0DLC 0x35 //发送缓存0数据长度 0x08
#define CAN_TXB0DM 0x36 //发送缓存0数据起始字节
//发送缓冲器1
#define CAN_TXB1CTRL 0x40 //发送缓冲器1控制寄存器
#define CAN_TXB1SIDH 0x41 //发送缓存1标准ID10--ID3
#define CAN_TXB1SIDL 0x42 //发送缓存1标准ID2--ID0 SRR IDE 扩展EID17-EID16
//SRR <0:标准数据帧 1:标准远程发送请求帧> IDE 0 标准帧 1 扩展帧
#define CAN_TXB1EID8 0x43 //扩展EID15-EID8
#define CAN_TXB1EID0 0x44 //扩展EID7-EID0
#define CAN_TXB1DLC 0x45 //发送缓存1数据长度 0x08
#define CAN_TXB1DM 0x46 //发送缓存1数据起始字节
//发送缓冲器2
#define CAN_TXB2CTRL 0x50 //发送缓冲器2控制寄存器
#define CAN_TXB2SIDH 0x51 //发送缓存2标准ID10--ID3
#define CAN_TXB2SIDL 0x52 //发送缓存2标准ID2--ID0 SRR IDE 扩展EID17-EID16
//SRR <0:标准数据帧 1:标准远程发送请求帧> IDE 0 标准帧 1 扩展帧
#define CAN_TXB2EID8 0x53 //扩展EID15-EID8
#define CAN_TXB2EID0 0x54 //扩展EID7-EID0
#define CAN_TXB2DLC 0x55 //发送缓存2数据长度 0x08
#define CAN_TXB2DM 0x56 //发送缓存2数据起始字节
//指令定义
#define RESET_COMMAND 0xC0 //复位指令
#define READ_COMMAND 0x03 //读寄存器指令
#define READRX_COMMAND 0x90 //读接收缓存 由1,2两位确定哪一个缓存
#define WRITE_COMMAND 0x02 //写寄存器指令
#define WRITETX_COMMAND 0x40 //写发送缓存,由0,1,2三位确定哪一个发送缓存
#define RTS_COMMAND 0x80 //TXB发送请求
#define RTS0_COMMAND 0x81 //TXB0发送请求
#define RTS1_COMMAND 0x82 //TXB1发送请求
#define RTS2_COMMAND 0x84 //TXB2发送请求
#define RSTATE_COMMAND 0xA0 //快速查询发送接收状态位
#define RXSTATE_COMMAND 0xB0 //快速查询RX状态
#define BITM_COMMAND 0x05 //位修改指令
/* CNF1 */
#define SJW_1TQ 0x40
#define SJW_2TQ 0x80
#define SJW_3TQ 0x90
#define SJW_4TQ 0xC0
/* CNF2 */
#define BTLMODE_CNF3 0x80
#define BTLMODE_PH1_IPT 0x00
#define SMPL_3X 0x40
#define SMPL_1X 0x00
#define PHSEG1_8TQ 0x38
#define PHSEG1_7TQ 0x30
#define PHSEG1_6TQ 0x28
#define PHSEG1_5TQ 0x20
#define PHSEG1_4TQ 0x18
#define PHSEG1_3TQ 0x10
#define PHSEG1_2TQ 0x08
#define PHSEG1_1TQ 0x00
#define PRSEG_8TQ 0x07
#define PRSEG_7TQ 0x06
#define PRSEG_6TQ 0x05
#define PRSEG_5TQ 0x04
#define PRSEG_4TQ 0x03
#define PRSEG_3TQ 0x02
#define PRSEG_2TQ 0x01
#define PRSEG_1TQ 0x00
/* CNF3 */
#define PHSEG2_8TQ 0x07
#define PHSEG2_7TQ 0x06
#define PHSEG2_6TQ 0x05
#define PHSEG2_5TQ 0x04
#define PHSEG2_4TQ 0x03
#define PHSEG2_3TQ 0x02
#define PHSEG2_2TQ 0x01
#define PHSEG2_1TQ 0x00
#define CAN_500kbps 0 //BRP setting in CNF1
#define CAN_250kbps 1 //Based on 16 MHz Fosc
#define CAN_125kbps 2 //
//====================================================================================//
typedef struct
{
UINT32 flags;
UINT32 cob;
UINT32 id;
UINT16 length;
UINT8 data[8];
} CAN_MSG_t;
BOOL MCP2515_Init(UINT8 baud);
INT32 MCP2515_Read(CAN_MSG_t * pCanMsg);
INT32 MCP2515_Write(CAN_MSG_t * pCanMsg);
BOOL MCP2515_SetBaudrate(UINT8 baud);
BOOL MCP2515_Reset(VOID);
BOOL MCP2515_SetMode(UINT8 mode);
#ifdef __cplusplus
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -