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

📄 initcan4.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_CAN4(void);


void Init_CAN4(void) {
  //locate CAN4 port to 
  //MODRR[3] MODRR[2] RXCAN4 TXCAN4
  //    0       0       PJ6   PJ7
  //    0       1       PM4   PM5
  //    1       0       PM6   PM7
  MODRR_MODRR2 = 1;
  MODRR_MODRR3 = 0;
  
  //Initialization Mode Request
  CAN4CTL0_INITRQ = 1;
  
  //Congfig CAN4CTL1 register
  CAN4CTL1_CANE   = 1;    //enable msCAN module       1:enabled     0:disabled
  CAN4CTL1_CLKSRC = 0;    //Clock Source              1:Bus         0:OSC
  CAN4CTL1_LOOPB  = 0;    //Loop Back Self Test Mode  1:enabled     0:disabled
  CAN4CTL1_LISTEN = 0;    //Listen Only Mode          1:Listen Only 0:Normal Mode
  CAN4CTL1_WUPM   = 0;    //Wake-Up Mode              1:>Twup       0:Any Signal wake up
  
  //=======================
  //Config CAN4 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 CAN4BTR0 register
  CAN4BTR0_BRP    = 7;    //Baud Rate Prescaler(Prescaler=BRP+1=4 16M_OSC-->4M)
  CAN4BTR0_SJW    = 1;    //SJW = (SJW+1)*Tq = 2*Tq
  
  //Config CAN4BTR1 register
  CAN4BTR1_SAMP   = 1;    //Sampling                  1: 3 samples  0:1 sample per bit 
  CAN4BTR1_TSEG_10= 6;    //Tseg1=6+1=7
  CAN4BTR1_TSEG_20= 7;    //Tseg2=7+1=8 
  
  //=======================
  //Config CAN4 Filiter
  //=======================
  //Config CAN4IDAC register
  //MSCAN Identifier Acceptance Control Register
  CAN4IDAC_IDAM0  = 0;    //00:2*32bit 01:4*16bit
  CAN4IDAC_IDAM1  = 0;    //10:8*8bit  11:closed,no message is acceped
  
  //Config CAN4IDAR0-7 register
  CAN4IDAR0       = 0x00;
  CAN4IDAR1       = 0x00;
  CAN4IDAR2       = 0x00;
  CAN4IDAR3       = 0x00;
  CAN4IDAR4       = 0x00;
  CAN4IDAR5       = 0x00;
  CAN4IDAR6       = 0x00;
  CAN4IDAR7       = 0x00;
  //Config CAN4IDMR0-7 register
  CAN4IDMR0       = 0xff;
  CAN4IDMR1       = 0xff;
  CAN4IDMR2       = 0xff;
  CAN4IDMR3       = 0xff;
  CAN4IDMR4       = 0xff;
  CAN4IDMR5       = 0xff;
  CAN4IDMR6       = 0xff;
  CAN4IDMR7       = 0xff;
  //=======================


  //Exit Initialization Mode Request
  CAN4CTL0_INITRQ = 0;
  while(CAN4CTL1_INITAK==1);  //wait for exit initialization mode
  
  //CAN0RFLG |= 254;            //Reset error flags
  //CAN4 Interrupts Enable
  CAN4RIER        = 0x01;     //RxFIE=1; others=0
  
  return;
}

⌨️ 快捷键说明

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