打印
[CAN-bus/DeviceNet]

can自收发模式问题?

[复制链接]
1929|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ligang411|  楼主 | 2008-8-23 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 本人用89c51+sja1000+tja1050,89c51的p26接sja_cs,p26接sja复位。现在用自收发模式(mod.2=1)调试,初始化sja1000总是失败,下面是初始化程序,请高手指点。

void init_sja1000(void)
{
    uchar state,ss,status;
    uchar ACRR[4];
    uchar AMRR[4];

// 接收代码寄存器
    ACRR[0] = 0xff;
    ACRR[1] = 0xff;
    ACRR[2] = 0xff;
    ACRR[3] = 0xff;    

// 接收屏蔽寄存器,
    AMRR[0] = 0xff;
    AMRR[1] = 0Xff;
    AMRR[2] = 0xff;
    AMRR[3] = 0xff;    

// 使用do--while语句确保进入复位模式
    do
    {
        MODR  = 0x09;  // 设置MOD.0=1--进入复位模式,以便设置相应的寄存器
        state = MODR;   //state=0x09
        ss=ECC;         //ss=0x2f
        status=MODR;   //status=0x09
    }
    while( !(status & 0x01) );//
    status=MODR;          //这条语句status=0x2f  应该是0x09这是为什么?
    ss=ECC;               //ss=0x2f
    status=status & 0x01; //status=0x2f
if(status==0x01)
{
    state  = MODR;
    ss=MODR;
// 对SJA1000部分寄存器进行初始化设置
    CDR  = 0x88;    // CDR为时钟分频器,CDR.3=1--时钟关闭, CDR.7=0---basic CAN, CDR.7=1---Peli CAN
    BTR0 = 0x53;    // 总线定时寄存器0 ;总线波特率设定
    BTR1 = 0x2f;    // 总线定时寄存器1 ;总线波特率设定
    IER  = 0x01;    // IER.0=1--接收中断使能;  IER.1=0--关闭发送中断使能
    OCR  = 0x1a;    // 配置输出控制寄存器
    CMR  = 0x04;    // 释放接收缓冲器

// 初始化接收代码寄存器
    ACR0 = ACRR[0];
    ACR1 = ACRR[1];
    ACR2 = ACRR[2];    
    ACR3 = ACRR[3]; 

    // 初始化接收屏蔽寄存器
    AMR0 = AMRR[0];
    AMR1 = AMRR[1];
    AMR2 = AMRR[2];
    AMR3 = AMRR[3]; 
    
    

  

// 使用do--while语句确保进入自接收模式
    do
    {
        MODR   = 0x0c;    //MOD.2=1--进入自接收模式,
        MODR   = 0x0c;
        state  = ECC;
        status=MODR;
     }
    while( !(status & 0x0c) );
}
}


相关帖子

沙发
ligang411|  楼主 | 2008-8-25 11:16 | 只看该作者

原理图有问题么

初始化总是不成功。

使用特权

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

本版积分规则

14

主题

16

帖子

0

粉丝