新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > 基于dsPIC33FJ128MC506的CAN通信(07-100)

基于dsPIC33FJ128MC506的CAN通信(07-100)

——
作者:山东省科学院自动化研究所 张云 李明强 庄汝科时间:2009-03-04来源:电子产品世界收藏

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

本文引用地址:http://www.amcfsurvey.com/article/92042.htm

  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;

  }



评论


技术专区

关闭