有没有做过can总线的朋友?遇到点问题想请教一下芯片初始化都没有问题了,我用自发自收模式,波特率是不是暂时就不用考虑了?
可是发送完以后,却收不到发出去的数据,怎么回事啊?sr和ir寄存器也没有错误提示。原因可能在哪里呢?匹配电阻用的是120欧姆的。
初始化程序:
int init_can()
{
int data;
wr_can((int*)MODE,9);
data=rd_can((int*)MODE);
while((data&0x1f)!=9)
{ wr_can((int*)MODE,9);
for(data=0;data <100;data++);
data=rd_can((int*)MODE);
}
wr_can((int*)CDR,0x0c0);//扩展模式,rxinten=1,RX1无效,时钟输出无效
wr_can((int*)IER,0x0c0);
wr_can((int*)BTR0,0x40);//100k:44h,27h,500k:40h,26h
wr_can((int*)BTR1,0x26);
wr_can((int*)OCR, 0x1a); //tx0: 1Ah 通过TX1:c2h
wr_can((int*)ACR1,0x0ff);
wr_can((int*)AMR1,0x064);
wr_can((int*)ACR0,0x0ff);
wr_can((int*)AMR0,0x033);
wr_can((int*)ACR2,0x0ff);
wr_can((int*)AMR2,0x0ff);
wr_can((int*)ACR3,0x0ff);
wr_can((int*)AMR3,0x0ff);
wr_can((int*)CMR,0x1e);
wr_can((int*)RBSA,0);
wr_can((int*)MODE,0x0c);
if(rd_can((int*)MODE)==0x0c)
{wr_can((int*)IER,0x0ff);
return 1; //ok
}
else
return 0; //nok
}
发送程序:
int transmit_can(int buff[])//,int length,int prior,int function)
{
int data,addr;
int i,start;
data=rd_can((int*)SR);
while ((data&0x04)==0)
{data=rd_can((int*)SR);//busy
}
wr_can((int*)FFIR,buff[0]);//size
wr_can((int*)ID1,buff[1]);//prior
wr_can((int*)ID2,buff[2]); //object
wr_can((int*)ID3,buff[3]);//station,source
wr_can((int*)ID4,buff[4]);//function
start=0x15;
data=rd_can((int*)SR);
if((data&0x04)==0x04)
{
for(i=0;i <8;i++)
{ wr_can((int*)start,buff[i+5]);
}
}
wr_can((int*)CMR,0x10);//这里我改为0x11也是一样的结果
data=rd_can((int*)SR);
while((data&0x20)==0x20)
{data=rd_can((int*)ECC);
data=rd_can((int*)EWLR);
data=rd_can((int*)TXERR);
data=rd_can((int*)SR);
}
return 1;
}
发送的数据为[0x88,0x33,0x64,0x99,0xff,1,2,3,4,5,6,7,8]
接收到的数据为[0x88,0x33,0x64,0x99,0xff,XXXXXXXXXX],0xff后的数据就不对了,请大侠帮忙看一下错误到底出现在哪里?