📄 mcp2515.h
字号:
#ifndef __MCP2510_H
#define __MCP2510_H
#include "predef.h"
/* 寄存器地址 */
#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 BFPCTRL 0x0c
#define TXRTSCTRL 0x0d
#define CANSTAT 0x0e
#define CANCTRL 0x0f
#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
#define TEC 0x1c
#define REC 0x1d
#define RXM0SIDH 0x20
#define RXM0SIDL 0x21
#define RXM0EID8 0x22
#define RXM0EID0 0x23
#define RXM1SIDH 0x24
#define RXM1SIDL 0x25
#define RXM1EID8 0x26
#define RXM1EID0 0x27
#define CNF3 0x28
#define CNF2 0x29
#define CNF1 0x2a
#define CANINTE 0x2b
#define CANINTF 0x2c
#define EFLG 0x2d
#define TXB0CTRL 0x30
#define TXB0SIDH 0x31
#define TXB0SIDL 0x32
#define TXB0EID8 0x33
#define TXB0EID0 0x34
#define TXB0DLC 0x35
#define TXB0D0 0x36
#define TXB0D1 0x37
#define TXB0D2 0x38
#define TXB0D3 0x39
#define TXB0D4 0x3a
#define TXB0D5 0x3b
#define TXB0D6 0x3c
#define TXB0D7 0x3d
#define TXB1CTRL 0x40
#define TXB1SIDH 0x41
#define TXB1SIDL 0x42
#define TXB1EID8 0x43
#define TXB1EID0 0x44
#define TXB1DLC 0x45
#define TXB1D0 0x46
#define TXB1D1 0x47
#define TXB1D2 0x48
#define TXB1D3 0x49
#define TXB1D4 0x4a
#define TXB1D5 0x4b
#define TXB1D6 0x4c
#define TXB1D7 0x4d
#define TXB2CTRL 0x50
#define TXB2SIDH 0x51
#define TXB2SIDL 0x52
#define TXB2EID8 0x53
#define TXB2EID0 0x54
#define TXB2DLC 0x55
#define TXB2D0 0x56
#define TXB2D1 0x57
#define TXB2D2 0x58
#define TXB2D3 0x59
#define TXB2D4 0x5a
#define TXB2D5 0x5b
#define TXB2D6 0x5c
#define TXB2D7 0x5d
#define RXB0CTRL 0x60
#define RXB0SIDH 0x61
#define RXB0SIDL 0x62
#define RXB0EID8 0x63
#define RXB0EID0 0x64
#define RXB0DLC 0x65
#define RXB0D0 0x66
#define RXB0D1 0x67
#define RXB0D2 0x68
#define RXB0D3 0x69
#define RXB0D4 0x6a
#define RXB0D5 0x6b
#define RXB0D6 0x6c
#define RXB0D7 0x6d
#define RXB1CTRL 0x70
#define RXB1SIDH 0x71
#define RXB1SIDL 0x72
#define RXB1EID8 0x73
#define RXB1EID0 0x74
#define RXB1DLC 0x75
#define RXB1D0 0x76
#define RXB1D1 0x77
#define RXB1D2 0x78
#define RXB1D3 0x79
#define RXB1D4 0x7a
#define RXB1D5 0x7b
#define RXB1D6 0x7c
#define RXB1D7 0x7d
/* 命令 */
#define CMD_RESET 0xc0
#define CMD_READ 0x03
#define CMD_RRXB0SIDH 0x90
#define CMD_RRXB0D0 0x92
#define CMD_RRXB1SIDH 0x94
#define CMD_RRXB1D0 0x96
#define CMD_WRITE 0x02
#define CMD_LTXB0SIDH 0x40
#define CMD_LTXB0D0 0x41
#define CMD_LTXB1SIDH 0x42
#define CMD_LTXB1D0 0x43
#define CMD_LTXB2SIDH 0x44
#define CMD_LTXB2D0 0x45
#define CMD_REQUEST0 0x81
#define CMD_REQUEST1 0x82
#define CMD_REQUEST2 0x84
#define CMD_READSTATUS 0xa0
#define CMD_GETRXSTATUS 0xb0
#define CMD_BITMODIFY 0x05
/* CAN 通信协议 */
#define bufn0 0
#define bufn1 1
#define bufn2 2
#define BtPri 0x80
#define btFrameType0 0x00 // 主控发命令,优先级最高
#define btFrameType1 0x10 // 主控发数据,
#define btFrameType2 0x20 // 参数帧,子模块向主模块传递参数设置
#define btFrameType3 0x30 // 数据帧,子模块向主模块传递推子位置
#define btModuleId0 0x00 // 主控
#define btModuleId1 0x01 // 子模块1#
#define btModuleId2 0x02 // 子模块1#
#define btModuleId3 0x03 // 子模块1#
#define btModuleId4 0x04 // 子模块1#
#define btModuleId5 0x05 // 子模块1#
#define btModuleId6 0x06 // 子模块1#
#define btModuleId7 0x07 // 子模块1#
#define btModuleId8 0x08 // 子模块1#
#define btModuleId9 0x09 // 子模块1#
#define btModuleId10 0x0a // 子模块1#
#define btModuleId11 0x0b // 子模块1#
#define btModuleId31 0x1f // 子模块31#
#define btChnId0 0x00
#define btChnId1 0x01
#define btChnId2 0x02
#define btChnId3 0x03
#define btChnId4 0x04
#define btChnId5 0x07 // 传送4个通道的AD值
#define CAN_CMD_EQ3 0x83
#define CAN_CMD_KEY 0xb0 // 按键
#define CAN_CMD_LAP 0xa0 // LED
#define CAN_CMD_NAME 0xc0
#define CAN_CMD_AD 0xad
/* 一个报文结构 */
typedef struct{
//u8_t bIsRTR: 1;
u8_t btChnIndex ;
u8_t btModuleIndex ;
u8_t btFrameType;
u8_t btPRI;
u8_t btDataLen; //(1~8)
u8_t btCommand;
u8_t btData[7];
}CAN_FRAME;
/* 函数声明 */
void MCP2515_Reset(void); // mcp2515复位
u8_t MCP2515_ReadReg(u8_t); // mcp2515读寄存器
void MCP2515_WriteReg(u8_t, u8_t); // mcp2515写寄存器
void MCP2515_ReadSeqReg(u8_t, u8_t *, u8_t); // 顺序读寄存器内容
void MCP2515_WriteSeqReg(u8_t, u8_t *, u8_t); // 顺序写寄存器内容
void MCP2515_SndRequest(u8_t); // mcp2515请求发送Tx中的内容
void MCP2515_BitModify(u8_t, u8_t, u8_t); // mcp2515位修改
void MCP2515_Init(void); // mcp2515初始化
void sendStandardFrame(u8_t , u8_t , u8_t , u8_t , u8_t , u8_t , u8_t , u8_t *);
extern void delay(u32_t);
/* 外部全局变量 */
extern u8_t stdFrameID[2]; // ID寄存器值
extern u8_t stdFrameDLC; // DLC寄存器值
extern u8_t stdRecvLength; // 接收的数据长度
extern u8_t stdData[8]; // 接收到的数据
extern u8_t id[4];
extern u8_t TData[4];
extern u8_t RData[20];
extern u8_t TxFrameID[2]; //发送帧ID
extern u8_t TxFrameDLC;
extern u8_t TxFrameData[8];
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -