我用的是ATmage128+sja1000做的can总县通信,下面是SJA1000的初始化程序:<br />#define REG_CONTROL 0x8000 //内部控制寄存器<br />#define REG_COMMAND 0x8001 //命令寄存器<br />#define REG_STATUS 0x8002 //状态寄存器<br />#define REG_INTERRUPT 0x8003 //中断寄存器<br />#define REG_ACR 0x8004 //验收代码寄存器<br />#define REG_AMR 0x8005 //验收屏蔽寄存器<br />#define REG_BTR0 0x8006 //总线定时寄存器0 <br />#define REG_BTR1 0x8007 //总线定时寄存器1 <br />#define REG_OCR 0x8008 //输出控制寄存器<br />#defineWriteSjaReg(Adr,value) *((unsigned char *)Adr)=value<br />#defineReadSjaReg(Adr) *((unsignedchar *)Adr)<br /><br />void sja_init()<br />{<br /> <br /> WriteSjaReg(REG_CONTROL,0x01);<br /> while((ReadSjaReg(REG_CONTROL)&0x01)==0)<br /> {<br /> WriteSjaReg(REG_CONTROL,0x01);<br /> }<br /><br /> WriteSjaReg(REG_CDR,0x48);<br /> WriteSjaReg(REG_ACR,0x11);<br /> WriteSjaReg(REG_AMR,0x00);<br /> WriteSjaReg(REG_OCR,0xaa);<br /> WriteSjaReg(REG_BTR0,0x00);<br /> WriteSjaReg(REG_BTR1,0x1c); //500kbps<br /> WriteSjaReg(REG_CONTROL, 0x1E); //进入操作模式 <br /> while((ReadSjaReg(REG_CONTROL)&0x01)==1)<br /> { <br /> WriteSjaReg(REG_CONTROL,0x1E);<br /> }<br />}<br /><br />请教各位高手,我的读写函数有什么错吗?我的问题是数据没有写入进去,也没有读取到寄存器里面的值,请问这个问题怎么解决啊,谢谢!! <br /> |
|