📄 can.c
字号:
#include "f2407_c.h"
#define LED port40
volatile ioport unsigned int port40;/*LED*/
unsigned int test_can(void);
void can_init(void)
{
*CAN_IFR=0xffff;
/*config CAN timer*/
*MCR=0x1000; /*set CCR=1*/
while(((*GSR)&0x0010)!=0x0010); /*if CCE=0 then wait*/
*BCR1=0x0023/*0x01ab*/;
*BCR2=0x0003; /*can clk=1Mhz, 10 TQs*/
*MCR=(*MCR)&0xefff; /*CCR=0;*/
while(((*GSR)&0x0010)==0x0010); /*if CCE=1 then wait*/
/*config mailbox*/
*MDER=0xff80; /*box0-5 disabled*/
/*box3 is receive box*/
*MCR=(*MCR)|0x0100; /*set CDR=1*/
/*0x0140 self-test mode*/
/*config mailbox4(send box)*/
*MSGID4H=0x0555;
*MSGID4L=0xaaaa; /*mailbox4 send*/
*MSGCTRL4=0x0008; /*1 byte data */
*MBX4A=0x7777;
*MBX4B=0x7777;
*MBX4C=0x7777;
*MBX4D=0x7777;
*MSGID0H=0x4555; /*mailbox0 receive*/
*MSGID0L=0xaaaa;
*MSGCTRL0=0x0008;
*MBX0A=0xffff;
*MBX0B=0xffff;
*MBX0C=0xffff;
*MBX0D=0xffff;
*LAM0_H=0x7fff;
*LAM0_L=0xffff;
*LAM1_H=0x7fff;
*LAM1_L=0xffff;
*MCR=(*MCR)&0xfeff; /*CDR=0;*/
}
unsigned int test_can(void)
{
unsigned int data_rec1,data_rec2,data_rec3,data_rec4;
can_init();
*MDER=(*MDER)|0x0001; /*enable mailbox0*/
*TCR=(*TCR)|0x0040; /*TRS4=1*/
/*send data frame*/
while(((*TCR)&0x4000)!=0x4000); /*if TA4=0 then wait*/
*TCR=(*TCR)|0x4000; /*set TA4=1*/
/*wait to receive*/
while(((*RCR)&0x0010)!=0x0010); /*if RMP0=0 then wait*/
*RCR=(*RCR)|0x0010; /*RMP0=1*/
data_rec1=*MBX0A;
data_rec2=*MBX0B;
data_rec3=*MBX0C;
data_rec4=*MBX0D;
if(data_rec1!=0x2222)return(0);
if(data_rec2!=0x5555)return(0);
if(data_rec3!=0xaaaa)return(0);
if(data_rec4!=0xeeee)return(0);
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -