⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initcan0.c

📁 MC9S12DG128上两路CAN模块收发通讯例程
💻 C
字号:
#include <mc9s12dg128.h>

/*****************************
    Structure Declaration
*****************************/
typedef struct{
  byte id[4];
  byte data[8];
  byte length;
  byte prio;
}candata;


/*****************************
    function prototype
*****************************/
void Init_CAN0(void);


void Init_CAN0(void) {
  //locate CAN0 port to PM0/PM1
  //MODRR[1] MODRR[0] RXCAN0 TXCAN0
  //    0       0       PM0   PM1
  //    0       1       PM2   PM3
  //    1       0       PM4   PM5
  //    1       1       PJ6   PJ7
  MODRR_MODRR0 = 0;
  MODRR_MODRR1 = 0;
  
  //Initialization Mode Request
  CAN0CTL0_INITRQ = 1;
  
  //Congfig CAN0CTL1 register
  CAN0CTL1_CANE   = 1;    //enable msCAN module       1:enabled     0:disabled
  CAN0CTL1_CLKSRC = 0;    //Clock Source              1:Bus         0:OSC
  CAN0CTL1_LOOPB  = 0;    //Loop Back Self Test Mode  1:enabled     0:disabled
  CAN0CTL1_LISTEN = 0;    //Listen Only Mode          1:Listen Only 0:Normal Mode
  CAN0CTL1_WUPM   = 0;    //Wake-Up Mode              1:>Twup       0:Any Signal wake up
  
  //=======================
  //Config CAN0 Baudrate
  //=======================
  //
  //  Tq = 1/4000000(s)  Fq=4000000(Hz)
  //  T_bit = (1+Tseg1+Tseg2)*Tq = 16*Tq
  //  F_bit = Fq/(1+Tseg1+Tseg2) = 4000000/16 = 250kbps
  //
  //=======================  
  //Config CAN0BTR0 register
  CAN0BTR0_BRP    = 7;    //Baud Rate Prescaler(Prescaler=BRP+1=4 16M_OSC-->4M)
  CAN0BTR0_SJW    = 1;    //SJW = (SJW+1)*Tq = 2*Tq
  
  //Config CAN0BTR1 register
  CAN0BTR1_SAMP   = 1;    //Sampling                  1: 3 samples  0:1 sample per bit 
  CAN0BTR1_TSEG_10= 6;    //Tseg1=6+1=7
  CAN0BTR1_TSEG_20= 7;    //Tseg2=7+1=8 
  
  //=======================
  //Config CAN0 Filiter
  //=======================
  //Config CAN0IDAC register
  //MSCAN Identifier Acceptance Control Register
  CAN0IDAC_IDAM0  = 0;    //00:2*32bit 01:4*16bit
  CAN0IDAC_IDAM1  = 0;    //10:8*8bit  11:closed,no message is acceped
  
  //Config CAN0IDAR0-7 register
  CAN0IDAR0       = 0x00;
  CAN0IDAR1       = 0x00;
  CAN0IDAR2       = 0x00;
  CAN0IDAR3       = 0x00;
  CAN0IDAR4       = 0x00;
  CAN0IDAR5       = 0x00;
  CAN0IDAR6       = 0x00;
  CAN0IDAR7       = 0x00;
  //Config CAN0IDMR0-7 register
  CAN0IDMR0       = 0xff;
  CAN0IDMR1       = 0xff;
  CAN0IDMR2       = 0xff;
  CAN0IDMR3       = 0xff;
  CAN0IDMR4       = 0xff;
  CAN0IDMR5       = 0xff;
  CAN0IDMR6       = 0xff;
  CAN0IDMR7       = 0xff;
  //=======================


  //Exit Initialization Mode Request
  CAN0CTL0_INITRQ = 0;
  while(CAN0CTL1_INITAK==1);  //wait for exit initialization mode
   
  //CAN0RFLG |= 254;            //Reset error flags 
  
  //CAN0 Interrupts Enable
  CAN0RIER        = 0x01;     //RxFIE=1; others=0
  
  return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -