📄 mytry.c
字号:
#include "240x_c.h"
void system_init(void);
void MailBox0_INIT(void);
void Can_Send(void);
void inline disable()
{
asm(" setc INTM");
}
//open the interrupt
void inline enable()
{
asm(" clrc INTM");
}
int ReceiveDataA , ReceiveDataB , ReceiveDataC , ReceiveDataD;
int SendDataA , SendDataB , SendDataC , SendDataD;
int CAN_Flag=0;
int testreg=0,k;
interrupt void c_int5()
{ CAN_Flag = 1;
testreg = *PIVR;
k++;
*CANRCR = 0x0010;
*CANIFR = 0xFFFF;
}
main()
{ disable();
system_init();
MailBox0_INIT();
SendDataA = 0X1122;
SendDataB = 0X3344;
SendDataC = 0X5566;
SendDataD = 0X7788;
ReceiveDataA = 0;
ReceiveDataB = 0;
ReceiveDataC = 0;
ReceiveDataD = 0;
CAN_Flag =0;
enable();
Can_Send();
while(1)
{ testreg = *CANRCR;
testreg = *CANTCR;
if(CAN_Flag == 1)
{
CAN_Flag = 0;
ReceiveDataA = *CANMBX0A;
ReceiveDataB = *CANMBX0B;
ReceiveDataC = *CANMBX0C;
ReceiveDataD = *CANMBX0D;
*CANRCR = 0x0010;
*CANMDER = 0x0000; /*enable mailbox*/
*CANMCR = 0x0100; /*CDR=1,change data request*/
SendDataA = ReceiveDataA + 1;
SendDataB = ReceiveDataB + 1;
SendDataC = ReceiveDataC + 1;
SendDataD = ReceiveDataD + 1;
*CANMCR = 0x04C0; /*DBO=1,CDR=0,ABO=1,STM=1*/
*CANMDER = 0x0001; /*enable mailbox0,4*/
Can_Send();
}
}
}
//////////////////////////////////
void system_init()
{
asm(" setc SXM "); /*符号位扩展有效*/
asm(" clrc OVM "); /*累加器结果正常溢出*/
asm(" clrc CNF "); /*B0被配置为数据空间*/
*SCSR1 = 0x81FE; /*CLKIN=6M,CLKOUT=24M,*SCSR1 = 0x81FE;,*/
*WDCR = 0xE8; /*不使能看门狗*/
*IMR = 0x0010; /*开CAN中断,int5*/
*IFR = 0xFFFF; /*清除所有中断标志*/
}
//////////////////////////////////
void MailBox0_INIT()
{
/*设置IOPC6\IOPC7 位CANRX,CANTX*/
*MCRB = 0x00C0; /**MCRB | 0x00C0; */
/*CAN寄存器配置*/
*CANIFR = 0xFFFF; /*clear can int lable*/
*CANLAM0H=0x9FFF; /* LAM0 */
*CANLAM0L=0xFFFF; /* recv any mail */
/*设置位定时器*/
*CANMCR = 0x1000; /*CCR=1,reset mode*/
while((*CANGSR & 0x0010)!=0x0010); /* CCE=1? */
/*CCE=1,change BCR2,BCR1 enable*/
*CANBCR2 = 0X0003;
*CANBCR1 = 0X005E; /*125k*/
*CANMCR = 0X0000; /*CCR=0,CPU work normal*/
while((*CANGSR & 0x0010)!=0x0000); /* CCE=0? */
/*CCE=0,BCR2,BCR1 change ok*/
/*初始化邮箱:messagebox0 as recv*/
*CANMDER = 0x0000; /*disable mailbox */
*CANMCR = 0x0100; /*CDR=1,change ID request*/
*CANMSGID0H = 0x40A0; /* ID*/
/*IDE=0,AME=0,AAM=0,standard frame*/
*CANMCR = 0x04C0; /* test mode */
*CANMDER = 0x0001; /* enable MessageBox0 */
*CANIMR = 0x81c0; /* low lever int ,enable recv int*/
*CANIFR = 0xFFFF;
}
void Can_Send()
{
*CANMCR = 0x0100; /* Data change request */
*CANMSGID4H = 0x00A0; /*ID,standard frame*/
*CANMSGCTRL4 = 0x0008; /* data frame,DLC=8 */
*CANMBX4A = SendDataA;
*CANMBX4B = SendDataB;
*CANMBX4C = SendDataC;
*CANMBX4D = SendDataD;
*CANMCR = 0x04C0; /* normal:0x0480 ,test:0x04C0*/
*CANMDER = *CANMDER | 0x0010;/* enable mailBox4*/
*CANIFR=0xFFFF;
*CANTCR = 0x0040; /* MailBox4,send */
while((*CANTCR & 0x4000)!=0x4000);
*CANTCR = *CANTCR | 0x4000;
testreg = *CANTCR;
}
interrupt void nothing()
{;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -