SJA1000初始化标准程序 点击:2714 | 回复:1



明远

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 22回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2007年3月13日
发表于:2007-05-04 10:07:00
楼主
 
很多CAN初学者,对SJA1000的初始化感到没有头绪,这里给出一个BASIC模式初始化实验程序。
实际上,对一个通信控制器初始化应该是很简单的几条语句。而且像CDR、OCR等等这样的寄存器一般实验中都是标准设置。不必人人都去化时间研究它的设置原理。
应该像操作系统一样,有人做过了,只管调用就行。节省下时间,多做些有创意的工作。
还有波特率设置参数,有人算过了,我们就不必重复再去计算,只要会调用就行。



#pragma SMALL
#include<reg51.h>
#include<sjaregb1.h>
#define uchar unsigned char

uchar xdata *SJA_Adr=0x7f00;
#define can_read(RegAdr)  SJA_Adr[RegAdr]
#define can_write(RegAdr,Val) SJA_Adr[RegAdr]=Val


//BASIC模式初始化程序,调用时直接输入标识符ID、屏蔽码、波特率3个参数.
//例如:initial(0x78,0,500k);


void initial(uchar B_ACR,uchar B_AMR,uchar Fbps)  
{
   uchar c, B_CDR=0x40, B_OCR=0xfa;

  can_write(CDR,B_CDR);   //时钟分频寄存器,默认0x40
  IE=0;
  c=can_read(IR);

  can_write(CR,0x61);   //进入复位模式

can_write(OCR,B_OCR);   //输出控制寄存器,默认0xfa

can_write(BTR0,BTR_TAB[Fbps]);    //波特率设置  
can_write(BTR1,BTR_TAB[Fbps+1]);    
can_write(ACR,B_ACR);             //验收代码寄存器
can_write(AMR,B_AMR);             //验收屏蔽寄存器

can_write(CR,0x06);  //进入工作模式

}


void main(void)
{
uchar c;
initial(0x54,0,250k);   //SJA1000初始化

     .
    .
    .
    .
    .
    .
}



其他在sjaregb1.h里,实际程序initial( )也应在sjaregb1.h里。
 
 



沙漠的风雨

  • 精华:0帖
  • 求助:0帖
  • 帖子:24帖 | 461回
  • 年度积分:0
  • 历史总积分:1069
  • 注册:2003年10月23日
发表于:2007-06-09 13:45:00
1楼
可以到我的博客上看,http://blog.163.com/yu_gui_cao/
有CAN相关的例程

热门招聘
相关主题

官方公众号

智造工程师