⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcp2515.h

📁 CAN总线驱动程序
💻 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 + -