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

📄 mcpcan.h

📁 武汉创维特公司的2410arm9开发办的can linux源代码
💻 H
字号:
#ifndef	MCPCAN_H
#define	MCPCAN_H
#define MCP_MAJOR       98#define MCP_NUM         2/* Set the message of the device driver */
#define IOCTL_SET_MSG _IOR(MCP_MAJOR, 0, int*)
/* _IOR means that we're creating an ioctl command 
 * number for passing information from a user process
 * to the kernel module. 
 *
 * The first arguments, MAJOR_NUM, is the major device 
 * number we're using.
 *
 * The second argument is the number of the command 
 * (there could be several with different meanings).
 *
 * The third argument is the type we want to get from 
 * the process to the kernel.
 */

/* Get the message of the device driver */
#define IOCTL_GET_MSG _IOR(MCP_MAJOR, 1, int*)
 /* This IOCTL is used for output, to get the message 
  * of the device driver. However, we still need the 
  * buffer to place the message in to be input, 
  * as it is allocated by the process.
  */

typedef struct mcpcan_data{
	unsigned int BufNo;
	unsigned int IdType;
	unsigned int id;
	unsigned int DataLen;
	char data[9];
}mcpcan_data;
#ifdef	MCP2510_FLAG
	#define	MCP2510_EXT
#else
	#define	MCP2510_EXT	extern
#endif

typedef	volatile unsigned char mcp2510_reg;typedef	struct struct_mcp2510_map{
	// x000 xxxx
	mcp2510_reg	RXF0SIDH;
	mcp2510_reg	RXF0SIDL;
	mcp2510_reg	RXF0EID8;
	mcp2510_reg	RXF0EID0;
	mcp2510_reg	RXF1SIDH;
	mcp2510_reg	RXF1SIDL;
	mcp2510_reg	RXF1EID8;
	mcp2510_reg	RXF1EID0;
	mcp2510_reg	RXF2SIDH;
	mcp2510_reg	RXF2SIDL;
	mcp2510_reg	RXF2EID8;
	mcp2510_reg	RXF2EID0;
	mcp2510_reg	BFPCTRL;
	mcp2510_reg	TXRTSCTRL;
	mcp2510_reg	CANSTAT;
	mcp2510_reg	CANCTRL;
	// x001 xxxx
	mcp2510_reg	RXF3SIDH;
	mcp2510_reg	RXF3SIDL;
	mcp2510_reg	RXF3EID8;
	mcp2510_reg	RXF3EID0;
	mcp2510_reg	RXF4SIDH;
	mcp2510_reg	RXF4SIDL;
	mcp2510_reg	RXF4EID8;
	mcp2510_reg	RXF4EID0;
	mcp2510_reg	RXF5SIDH;
	mcp2510_reg	RXF5SIDL;
	mcp2510_reg	RXF5EID8;
	mcp2510_reg	RXF5EID0;
	mcp2510_reg	TEC;
	mcp2510_reg	REC;
	mcp2510_reg	CANSTAT_x001;	// refer to the same register CANSTAT
	mcp2510_reg	CANCTRL_x001;	// refer to the same register CANCTRL
	// x010 xxxx
	mcp2510_reg	RXM0SIDH;
	mcp2510_reg	RXM0SIDL;
	mcp2510_reg	RXM0EID8;
	mcp2510_reg	RXM0EID0;
	mcp2510_reg	RXM1SIDH;
	mcp2510_reg	RXM1SIDL;
	mcp2510_reg	RXM1EID8;
	mcp2510_reg	RXM1EID0;
	mcp2510_reg	CNF3;
	mcp2510_reg	CNF2;
	mcp2510_reg	CNF1;
	mcp2510_reg	CANINTE;
	mcp2510_reg	CANINTF;
	mcp2510_reg	EFLG;
	mcp2510_reg	CANSTAT_x010;
	mcp2510_reg	CANCTRL_x010;
	// x011 xxxx
	mcp2510_reg	TXB0CTRL;
	mcp2510_reg	TXB0SIDH;
	mcp2510_reg	TXB0SIDL;
	mcp2510_reg	TXB0EID8;
	mcp2510_reg	TXB0EID0;
	mcp2510_reg	TXB0DLC;
	mcp2510_reg	TXB0D0;
	mcp2510_reg	TXB0D1;
	mcp2510_reg	TXB0D2;
	mcp2510_reg	TXB0D3;
	mcp2510_reg	TXB0D4;
	mcp2510_reg	TXB0D5;
	mcp2510_reg	TXB0D6;
	mcp2510_reg	TXB0D7;
	mcp2510_reg	CANSTAT_x011;
	mcp2510_reg	CANCTRL_x011;
	// x100 xxxx
	mcp2510_reg	TXB1CTRL;
	mcp2510_reg	TXB1SIDH;
	mcp2510_reg	TXB1SIDL;
	mcp2510_reg	TXB1EID8;
	mcp2510_reg	TXB1EID0;
	mcp2510_reg	TXB1DLC;
	mcp2510_reg	TXB1D0;
	mcp2510_reg	TXB1D1;
	mcp2510_reg	TXB1D2;
	mcp2510_reg	TXB1D3;
	mcp2510_reg	TXB1D4;
	mcp2510_reg	TXB1D5;
	mcp2510_reg	TXB1D6;
	mcp2510_reg	TXB1D7;
	mcp2510_reg	CANSTAT_x100;
	mcp2510_reg	CANCTRL_x100;
	// x101 xxxx
	mcp2510_reg	TXB2CTRL;
	mcp2510_reg	TXB2SIDH;
	mcp2510_reg	TXB2SIDL;
	mcp2510_reg	TXB2EID8;
	mcp2510_reg	TXB2EID0;
	mcp2510_reg	TXB2DLC;
	mcp2510_reg	TXB2D0;
	mcp2510_reg	TXB2D1;
	mcp2510_reg	TXB2D2;
	mcp2510_reg	TXB2D3;
	mcp2510_reg	TXB2D4;
	mcp2510_reg	TXB2D5;
	mcp2510_reg	TXB2D6;
	mcp2510_reg	TXB2D7;
	mcp2510_reg	CANSTAT_x101;
	mcp2510_reg	CANCTRL_x101;
	// x110 xxxx
	mcp2510_reg	RXB0CTRL;
	mcp2510_reg	RXB0SIDH;
	mcp2510_reg	RXB0SIDL;
	mcp2510_reg	RXB0EID8;
	mcp2510_reg	RXB0EID0;
	mcp2510_reg	RXB0DLC;
	mcp2510_reg	RXB0D0;
	mcp2510_reg	RXB0D1;
	mcp2510_reg	RXB0D2;
	mcp2510_reg	RXB0D3;
	mcp2510_reg	RXB0D4;
	mcp2510_reg	RXB0D5;
	mcp2510_reg	RXB0D6;
	mcp2510_reg	RXB0D7;
	mcp2510_reg	CANSTAT_x110;
	mcp2510_reg	CANCTRL_x110;
	// x111 xxxx
	mcp2510_reg	RXB1CTRL;
	mcp2510_reg	RXB1SIDH;
	mcp2510_reg	RXB1SIDL;
	mcp2510_reg	RXB1EID8;
	mcp2510_reg	RXB1EID0;
	mcp2510_reg	RXB1DLC;
	mcp2510_reg	RXB1D0;
	mcp2510_reg	RXB1D1;
	mcp2510_reg	RXB1D2;
	mcp2510_reg	RXB1D3;
	mcp2510_reg	RXB1D4;
	mcp2510_reg	RXB1D5;
	mcp2510_reg	RXB1D6;
	mcp2510_reg	RXB1D7;
	mcp2510_reg	CANSTAT_x111;
	mcp2510_reg	CANCTRL_x111;	
} T_MCP2510_MAP;

// Define the Base Address( in its own address space ) of MCP20510
#define	MCP2510_MAP	((T_MCP2510_MAP*)0x0)

// Define the initial value for the mcp2510's configuration register
// Buffer Pin Full Control : disabled
#define	BFPCTRL_INIT_VAL	(0x00)
// Transmitter Request to Send pin : Digital Input
#define	TXRTSCTRL_INIT_VAL	(0x00)
// Configure the bit timing : 125kHZ
#define	CNF1_INIT_VAL		(0x03)
#define	CNF2_INIT_VAL		(0xb1)
#define	CNF3_INIT_VAL		(0x05)
// Configure the interrupt : disable all interrupts
#define	CANINTE_INIT_VAL	(0x03)    //0xe3
#define	CANINTF_INIT_VAL	(0x00)
// Reset Error Flag Register
#define	EFLG_INIT_VAL		(0x00)
// Transmitter Buffer Control
#define	TXBnCTRL_INIT_VAL	(0x00)
// Receiver Buffer 0 Control Register : Turn mask/filter off, receiver all message, Rollover disable
#define	RXB0CTRL_INIT_VAL	(0x60)
// Receiver Buffer 1 Control Register : Turn mask/filter off, receiver all message
#define	RXB1CTRL_INIT_VAL	(0x60)

/* Function prototypes */
#define	TOLONG( addr )		((unsigned long)(addr))
MCP2510_EXT void MCP2510_Init( int MinorNum );
//--------------------------------//
#define	TXBUF0		0
#define	TXBUF1		1
#define	TXBUF2		2

#define	RXBUF0		3
#define	RXBUF1		4

#define	STANDID		0
#define	EXTID		1
MCP2510_EXT void MCP2510_TX(int TxBuf, int IdType, unsigned int id, int DataLen, char * data);
MCP2510_EXT void MCP2510_RX(int RxBuf, int * IdType, unsigned int * id, int * DataLen, char *data);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -