新聞中心

EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > 基于dsPIC33FJ128MC506的CAN通信(07-100)

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

——
作者:山東省科學(xué)院自動(dòng)化研究所 張?jiān)?李明強(qiáng) 莊汝科 時(shí)間:2009-03-04 來(lái)源:電子產(chǎn)品世界 收藏

  下面的函數(shù)用來(lái)寫(xiě)接收屏蔽寄存器"m" ,各輸入?yún)?shù)的意義分別為:

本文引用地址:http://2s4d.com/article/92042.htm

  m-> 屏蔽寄存器號(hào)[0-3]

  identifier->屏蔽位

  mide -> "0" 表示無(wú)論是標(biāo)準(zhǔn)幀還是擴(kuò)展幀,屏蔽器都起作用

  "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;

  //因?yàn)閷⒁O(shè)置的特殊寄存器要與別的寄存器共用地址,所以需設(shè)置控制位WIN

  C1CTRL1bits.WIN=1;

  /* 根據(jù)"m"計(jì)算出CiRXMmSID 寄存器的地址*/

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

  /* 將屏敝ID寫(xiě)入到屏蔽寄存器中*/

  if(mide==1) { //擴(kuò)展幀格式

  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{ // 標(biāo)準(zhǔn)幀格式

  sid10_0 = (identifier & 0x7FF);

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

  }



關(guān)鍵詞: CAN TJA1054 dsPIC33FJ128MC506

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉