can.c

来自「2407模版程序」· C语言 代码 · 共 56 行

C
56
字号
#include "can.h"

#define TREG1	(0x4<<2)
#define TREG2	(0x3)
#define	SAM		(0x1<<7)
#define SJW		(0x1<<8)
#define SBG		(0x1<<10)

int init_can()
{
	*CANIMR = 0xbfff;	/*Enable all CAN interrupt*/
	*CANMDER = 0x0000;
	//*CANLAM0H = 0x9ad9;
	//*CANLAM0L = 0x64d2;
	*CANLAM0H = 0xffff;
	*CANLAM0L = 0xffff;
	*CANMDER = 0x0000;	
	*CANMSGID5H = 0x8e15;
	*CANMSGID5L = 0xdc35;
	*CANMSGID0H = 0xcc91;
	*CANMSGID0L = 0xd9f9;	
	*CANMSGCTRL5 = 0x0008;
	*CANMDER = 0x0021;
	*(CANMCR) = 0x1000;	
	while ( !(*(CANGSR) & 0x0010) )
		kickdog();
	*CANBCR2 = 3;
	*CANBCR1 = TREG1 | TREG2 | SAM | SJW | SBG;
	*CANMCR = 0x0000;
	while ( *CANGSR & 0x0010 )
		kickdog();
}

int can_tx(unsigned int *txdata)
{
	int i;
	/*for (i=0;i<4;i++){
		*(mbxbase+i)=*(txdata+i);*/
	*CANMBX5A = *txdata;
	*CANMBX5B = *(txdata+1);
	*CANMBX5C = *(txdata+2);
	*CANMBX5D = *(txdata+3);
	*CANTCR = 0x0080;
}

int can_rx(unsigned int *rxdata)
{
	while ( !(*CANRCR & 0x0010) )
		kickdog();
	*rxdata = *CANMBX0A;
	*(rxdata+1) = *CANMBX0B;
	*(rxdata+2) = *CANMBX0C;
	*(rxdata+3)= *CANMBX0D;
	*CANRCR |= 0x0010;
}
	

⌨️ 快捷键说明

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