EDN China > 设计实例 > 通信 > 正文
?

基于dsPIC33FJ128MC506的CAN通信

山东省科学院自动化研究所 张云 李明强 庄汝科?? 2009年04月14日 ?? 收藏0

?  *bufPntRegAddr = (bufPnt << (4*(n&3))); // 写缓冲指针寄存器CiBUFPNTn内容*maskSelRegAddr = (maskSel << (2*(n&7))); // 确定关连屏蔽寄存器

  CiFMSKSELn *fltEnRegAddr = (0x1 << n); //使能第n个滤波器

  C1CTRL1bits.WIN=0; //恢复寄存器地址选择位

  }

  /*

  下面的函数用来写接收屏蔽寄存器"m" ,各输入参数的意义分别为:

  m-> 屏蔽寄存器号[0-3]

  identifier->屏蔽位

  mide -> "0" 表示无论是标准帧还是扩展帧,屏蔽器都起作用

  "1" 表示屏蔽器是否起作用要参照'exide' 位 */

  void ecan1WriteRxAcptMask(int m, long identifier, unsigned int mide)

  {

  /*定义局部变量*/

  unsigned long sid10_0=0, eid15_0=0, eid17_16=0;

  unsigned int *maskRegAddr;

  //因为将要设置的特殊寄存器要与别的寄存器共用地址,所以需设置控制位WIN

  C1CTRL1bits.WIN=1;

  /* 根据"m"计算出CiRXMmSID 寄存器的地址*/

  maskRegAddr = (unsigned int *)(&C1RXM0SID + (m << 2));

  /* 将屏敝ID写入到屏蔽寄存器中*/

  if(mide==1) { //扩展帧格式

  eid15_0 = (identifier & 0xFFFF);

  eid17_16= (identifier>>16) & 0x3;

  sid10_0 = (identifier>>18) & 0x7FF;

  *maskRegAddr=(sid10_0)<<5 + 0x8 + eid17_16;

  *(maskRegAddr+2)= eid15_0;

  }else{ // 标准帧格式

  sid10_0 = (identifier & 0x7FF);

  *maskRegAddr=(sid10_0)<<5; *(maskRegAddr+2)=0;

  }

  C1CTRL1bits.WIN=0;

  }

  TJA1054的启动

  TJA1054是广泛应用的低速容错CAN收发器,其工作启动要按照其说明进行,下面的函数将TJA1054初始化为工作状态。

  void TJA1054Init (void)

  {  ?

  TRISBbits.TRISB15=1; //将错误引脚设为输入状态

  TRISEbits.TRISE4=0; //将EN引脚设为输出状态

  TRISEbits.TRISE5=0; //将STB引脚设为输出状态

  PORTEbits.RE5=1; //STB=0;

  PORTEbits.RE4=0; //EN=1

  PORTEbits.RE5=1; //STB=1;

  PORTEbits.RE4=1; //EN=1

  }

  结合以上内容,ECAN1的初始化函数为:

  void ecan1Init(void)

  {

  C1CTRL1bits.REQOP=4;

  while(C1CTRL1bits.OPMODE!=4); //请求进入配置模式

  ecan1ClkInit(); //调用波特率设置函数

  C1FCTRLbits.DMABS=0b000; //在DMA RAM 中设置4个CAN报文缓冲

  ecan1WriteRxAcptFilter(1,0x36,0,2,0); //配置接过收滤寄存器

  /*配置接收屏蔽寄存器,要注意的是,这里设为“1”的位是非屏蔽位,设为“0”的位为屏蔽位。这里的0x7FF将会对标准帧ID的每一位都进行检查是否对应的过滤器相匹配*/

  ecan1WriteRxAcptMask(0,0x7ff,0);

  C1CTRL1bits.REQOP=0;

  while(C1CTRL1bits.OPMODE!=0); //进入正常模式

  /*以下语句设置CAN报文的发射接收控制*/


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

dsPIC33FJ128MC506? CAN? TJA1054?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈