SJA1000初始化实验程序 点击:1878 | 回复:0



明远

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 22回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2007年3月13日
发表于:2007-05-04 09:56: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里。


热门招聘
相关主题

官方公众号

智造工程师