CAN的初始化 点击:940 | 回复:0



沙漠的风雨

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:24帖 | 461回
  • 年度积分:0
  • 历史总积分:1069
  • 注册:2003年10月23日
发表于:2006-02-15 15:10:00
楼主
下面是sja1000的初始化函数,想把sja1000为设置为 Peli模式 自测试模式
硬件为89s51+sja1000 
大家帮我看看 错在那里啊
我的qq 346138227  yu_gui_cao@163.com
/********************************************************
*函数原型: void Sja_1000_Init(void)                     *
说明:     
      初始化sja1000为 Peli模式 自测试模式
*********************************************************/
void Sja_1000_Init(void)
{   unsigned char tt;

bit s; 

    for (tt=0;tt<100;tt++);
//置复位
s=1;
while (s==1)
s=BCAN_ENTER_RETMODEL();  //MOD.0=1    
if (s==0)send_string_com("  ENTER ");
   
    //测试SJA1000
s=1;
while (s==1)
s=BCAN_CREATE_COMMUNATION(); //测试寄存器 
if (s==0) send_string_com(" CREATE ");   

    //初始化时分控制器: PeilCAN模式、CLOCKOFF禁止
s=1;
while (s==1) 
s=BCAN_SET_CLK(0xC8);    //CDR=0xC8;
if (s==0)send_string_com(" SET_CLK ");   

// 设置输出控制器
s=1;
while (s==1) s=BCAN_SET_OUT(0xAA);  //OCR=0xAA;
if (s==0)send_string_com(" SET_Out ");    
   
    //设置总线时序(波特率)  
s=1;
while (s==1) 
s=BCAN_SET_BANDRATE(0x04); // 100Kbps  
if (s==0)send_string_com(" BANDRATE ");


   // 设置滤波器,地址为本地的IP前29位,全匹配
    s=1;
while (s==1)
s=  BCAN_SET_ACR(0xFF,0xFF,0xFF,0xFF);
    if (s==0)send_string_com(" SET_ACR ");
s=1;
while (s==1)
s=  BCAN_SET_AMR(0xFF,0xFF,0xFF,0xFF);     
if (s==0)send_string_com("  SET_AMR ");   

// 模式控制器:  单滤波器、正常模式、清除复位请求
s=1;
while (s==1)  
s=BCAN_SET_MOD(0xFC);      //正常 MOD=0xF8; 自测0xFC  
if (s==0)send_string_com(" MOD ");  
   
s=1;
while (s==1)  
s=BCAN_QUIT_RETMODEL(); //MOD.0=0
if (s==0)send_string_com(" RETMODEL");

//设置错误报警限制寄存器 为192(0xC0)
    s=1;
while (s==1)  
s= BCAN_SET_EMLR(0xC0);   //EMLR=0xC0
    if (s==0)send_string_com(" SET_EMLR ");

// 中断控制: 总线错误中断、发送中断、接收中断
//s=1;
// while (s==1)
s=BCAN_SET_INTENABLE(0x03);   //IER=0x03
if (s==0)send_string_com(" INTENABLE ");


热门招聘
相关主题

官方公众号

智造工程师