ep100can程序

#include <hidef.h>
#include “derivative.h”
#include “can.h”

void init_can0(void)
{
if(CAN0CTL0_INITRQ0)
CAN0CTL0_INITRQ=1;
while(CAN0CTL1_INITAK
0);
CAN0BTR0_SJW=1;
CAN0BTR0_BRP=7;
CAN0BTR1 = 0x1c;
//CAN0IDAR0=0xFF;
CAN0IDMR0=0xFF;
CAN0IDMR1=0xFF;
CAN0IDMR2=0xFF;
CAN0IDMR3=0xFF;
CAN0IDMR4=0xFF;
CAN0IDMR5=0xFF;
CAN0IDMR6=0xFF;
CAN0IDMR7=0xFF;
CAN0CTL1 = 0xC0;
CAN0CTL0 = 0x00;
//while(CAN0CTL0_INITRQ1);
while(CAN0CTL1_INITAK
1);
while(CAN0CTL0_SYNCH==0);
CAN0RIER_RXFIE=1;
}

can_send(struct msg_a_s msg_a)
{ unsigned long sp;
if(msg_a.len>8)
return(0);
if(CAN0CTL0_SYNCH==0)
return(0);
do
{
CAN0TBSEL=CAN0TFLG;

}while(CAN0TBSEL0);
if(msg_a.RTR
0)

{
if(msg_a.ide0)
{
CAN0TXIDR0=(unsigned long)msg_a.id>>3;
CAN0TXIDR1=(unsigned long)msg_a.id<<5;
}
else {
CAN0TXIDR0=(unsigned long)msg_a.id>>21;
CAN0TXIDR1=(unsigned long)(((unsigned long)msg_a.id>>15&0x07)|((unsigned long)msg_a.id>>13&0xE0)|0x18);
CAN0TXIDR2=(unsigned long)msg_a.id>>7;
CAN0TXIDR3=(unsigned long)msg_a.id<<1;
}
for(sp=0;sp<msg_a.len;sp++)
*(&CAN0TXDSR0+sp)=msg_a.data[sp];
}
else
{ if(msg_a.ide
0)
{
CAN0TXIDR0=(unsigned long)msg_a.id>>3;
CAN0TXIDR1=(unsigned long)msg_a.id<<5|0x10;
} else
{
CAN0TXIDR0=(unsigned long)msg_a.id>>21;
CAN0TXIDR1=(unsigned long)(((unsigned long)msg_a.id>>15&0x07)|((unsigned long)msg_a.id>>13&0xE0)|0x18);
CAN0TXIDR2=(unsigned long)msg_a.id>>7;
CAN0TXIDR3=(unsigned long)msg_a.id<<1|0x01;
}

}

CAN0TXDLR=msg_a.len;
CAN0TXTBPR=msg_a.pro;
CAN0TFLG=1;
}

can_receive(struct msg_a_s *msg_a)
{ unsigned int sp1;
//if(CAN0RXDLR>8)
//return(0);
while(CAN0RFLG0);
msg_a->len=CAN0RXDLR;
if(msg_a->len>8)
return(0);
else {
msg_a->ide=CAN0RXIDR1_IDE;
if(msg_a->ide
1) {

msg_a->id=(unsigned long)(CAN0RXIDR0<<21)|(unsigned long)((CAN0RXIDR1&0xE0)<<13)|
(unsigned long)((CAN0RXIDR1&0x07)<<15)|(unsigned long)(CAN0RXIDR2<<7)|(unsigned long)(CAN0RXIDR3>>1);
msg_a->RTR=(unsigned long)CAN0RXIDR3&0x01;
}
else
{
msg_a->id=(unsigned long)CAN0RXIDR1>>5|(unsigned long)CAN0RXIDR0<<3;
msg_a->RTR=((unsigned long)CAN0RXIDR1&0x10)>>4;
}
}
for(sp1=0;sp1<msg_a->len;sp1++)
msg_a->data[sp1]=*(&CAN0RXDSR0+sp1);
CAN0RFLG=1;

}

#ifndef CAN_H
#define CAN_H
struct msg_a_s
{
unsigned long id;
unsigned int ide;
unsigned int len;
unsigned int RTR;
unsigned int data[8];
unsigned int pro;
};
extern void init_can0(void);
extern can_receive(struct msg_a_s *msg_a);
extern can_send(struct msg_a_s msg_a);
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值