最近在做CAN通信,用的是AT90CAN128和TJA1042收发器,想实现最简单的通信,就是1号板只发送,2号板只接受,但是一直没有成功,其中有几个问题一直闹不清楚;
1,ID号,作为接受MOB,有设置它的滤波ID(CANIDT)和屏蔽ID(CANIDM),不知道CANIDM中的位为1是屏蔽啊,还是0为屏蔽验收,我认为是1为屏蔽,也就是说CANIDM中的为0的位,在接受数据时,ID相应的位必须与CANIDT响应的位相同,而为1的位则不进行比较,不知道对吗?
2,在两节点发送过程中,经检测,老出现OVRTIM状态(CANGIT),到底是什么原因出现的OVRTIM,应该怎样处理它,是在该中断中清楚标志位,还是不管它,,不知道用不用开这个异常中断?
3,经示波器检测,一号板TXD引脚发出去的波形和2号板RXD的波形是一致的,这说明中间的收发器和隔离器是没有错的,但是有这样一个问题,就是1号板执行完发送程序,他的TXD引脚一直有波形,说明一直在发送,并且TXOK(CANSTMOB)一直为0,就死在while()判断那了,当执行了CANCDMOB=0x48后,也就是使能发送后,
CANSTMOB中的AERR(Acknowledgement Error)就置位了,好像是应答错误,不知道怎么解释这错误,求大家帮忙分析分析:
我的发送程序是这样的
void CAN_Send(void)
{
uchar i=0;
CANPAGE=0x10;//选择信箱1为发送
CANSTMOB=0x00;
CANIDT4=0x00;
CANIDT3=0x00;
CANIDT2=0x40;
CANIDT1=0xff;
for(i=0;i<8;i++)
{
CANMSG=can_transdata[i];
}
CANCDMOB=0x48;
while(!(CANSTMOB&(1<<TXOK)));
CANSTMOB&=~(1<<TXOK);
}
|