打印
[微控制器/MCU]

关于CAN编程的,帮我看看毛病出哪了

[复制链接]
1360|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yoyowodeai|  楼主 | 2010-7-11 21:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大虾们帮我看看毛病出哪了。初始化MODR时就跳步出去,一直循环,我的读SJA1000程序有错吗?用的是MEGA162单片机
uint  Read_SJA1000(uint address)
{
uchar  data;
asm("nop");
ALE_on;
asm("nop");
DDRA=0xff;
PORTA=address;
asm("nop");
ALE_off;
asm("nop");
cs_on;
asm("nop");
rd_on;
asm("nop");
DDRA=0x00;
PORTA=0xff;
asm("nop");
data=PINA;
asm("nop");
rd_off;
cs_off;
asm("nop");
return  data;
}

void Write_SJA1000(uint address , uint data)
{
asm("nop");
ALE_on;
asm("nop");
DDRA=0xff;
PORTA=address;
asm("nop");
ALE_off;
asm("nop");
cs_on;
asm("nop");
wr_on;
asm("nop");
PORTA=data;
asm("nop");
wr_off;
cs_off;
asm("nop");
asm("nop");
}

void initSJA1000()
{
uchar i,j;
CLI();
Write_SJA1000(MODR , 0x01);//复位模式
while(!(Read_SJA1000(MODR)&0x01))
  {
   Write_SJA1000(MODR , 0x01);                      //到这就一直跳步出去,一直循环         
  }
Write_SJA1000(CDR , 0x88);
Write_SJA1000(BTR0 , 0x40);
Write_SJA1000(BTR1 , 0x1C);
Write_SJA1000(OCR , 0x1A);
Write_SJA1000(ACR0 , 0x00);
Write_SJA1000(ACR1 , 0x00);
Write_SJA1000(ACR2 , 0x00);
Write_SJA1000(ACR3 , 0x00);
Write_SJA1000(AMR0 , 0xFF);
Write_SJA1000(AMR1 , 0x00);
Write_SJA1000(AMR2 , 0xFF);
Write_SJA1000(AMR3 , 0x00);
Write_SJA1000(EWLR , 0xff);
do
{
  Write_SJA1000(MODR , 0x00);
}while((Read_SJA1000(MODR))&0x01);
  Write_SJA1000(IER , 0x07);
  SEI();
}

相关帖子

沙发
年轻不在| | 2010-7-11 21:30 | 只看该作者
你将cs_on一直选通试试,我以前也遇到过同样的问题。

使用特权

评论回复
板凳
bit6019| | 2010-7-11 21:30 | 只看该作者
复位引脚你看看有没有问题

使用特权

评论回复
地板
yoyowodeai|  楼主 | 2010-7-11 21:31 | 只看该作者
复位没问题,片选好像有点问题,一直为高电平。。。。

使用特权

评论回复
5
S3C2440| | 2010-7-12 21:32 | 只看该作者
延时有问题!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

191

主题

1265

帖子

2

粉丝