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

📄 can_16.c

📁 富士通单片机90540CAN总线通信源代码
💻 C
字号:
/**    THIS SAMPLE CODE IS PROVIDED AS IS. FUJITSU MICROELECTRONICS     **/
/** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR OMMISSIONS **/
/*****************************************************************************
 *  Date   :        2002/11/01
 *  PROJECT:        MB90540
*****************************************************************************/
/****************************************************************************
      Note 1: Data write to CSRn is enabled by assigning a variable or
              constant to member IO_CANCTn.CSR.word with a simple assignment
              expression.
      Note 2: The usage of bit access members of CSRn are limited to the
              reading description.
      Note 3: Data write to IDRy_n is enabled by assigning a variable or
              constant to member IO_CANIDn.IDR[y].lword with a simple
              assignment expression.
      Note 4: The usage of bit access members of IDRy_n are limited to the
              reading description.
      Note 5: Data write to DLCRy_n is enabled by assigning a variable or
              constant to member IO_CANIDn.DLCR[y].word with a simple
              assignment expression.
      Note 6: The usage of bit access members of DLCRy_n are limited to the
              reading description.
      Note 7: Data write to DTRy_n is enabled by assigning a variable or
              constant to member IO_CANIDn.DTR[y].BYTE0_3 and
              IO_CANIDn.DTR[y].BYTE4_7 with a simple assignment expression.
****************************************************************************/
#include "_ffmc16.h"
#include "extern.h"

#define CLEAR 0x00
unsigned long *RX0_BUFFER0;
unsigned long *RX0_BUFFER1;
unsigned long *RX1_BUFFER0;
unsigned long *RX1_BUFFER1;

/* CAN0 initialize */
void init_CAN0(void)
{
  IO_ICR00.byte = 0x03;       /* CAN0 INT level set */
  IO_ICR03.byte = 0x02;       /* Reload0 Timer INT level set */
  IO_CANCT0.IDER.word = 0x0000;   /* Standard frame format */
  IO_CANCT0.AMSR.lword = 0x000000;  /* full bit compare */

/*  IO_CANCT0.BTR.word = 0x2B9D;*/    /* bit rate 33.3kbit/s */
/*  IO_CANCT0.BTR.word = 0x3A87;*/    /* bit rate 125kbit/s */
/*  IO_CANCT0.BTR.word = 0x4983;*/    /* bit rate 250kbit/s */
  IO_CANCT0.BTR.word = 0x4981;    /* bit rate 500kbit/s */
/*  IO_CANCT0.BTR.word = 0x4980;*/    /* bit rate 1000kbit/s */

  /* Tx set */
  IO_CANID0.IDR[5].lword = 0x00A000;  /* message buffer5 ID=5 */
  IO_CANID0.DLCR[5].word = 0x000002;  /* set the data length */
  IO_CANCT0.RFWTR.word   = 0x0000;  /* tx starts immediately */
  IO_CANCT0.TRTRR.word   = 0x0000;  /* remote tx request clear*/
  IO_CANCT0.TIER.word    = 0x0020;  /* CAN0 Tx Interrupt valid */

  /* Rx set*/
  IO_CANID0.IDR[0].lword = 0x2000;  /* message buffer0 ID=1 */
  IO_CANID0.IDR[1].lword = 0x4000;  /* message buffer1 ID=2 */
  IO_RIER0.word = 0x0003;       /* CAN0 Rx Interrupt valid */
  /* Stored start address */
  RX0_BUFFER0=(unsigned long *)0x400; /* ID=1 400H乣44FH */
  RX0_BUFFER1=(unsigned long *)0x450; /* ID=2 450H乣4FFH */

  /* CAN Bus start */
  IO_BVALR0.word = 0x0023;      /* message buffer valid */
  IO_CANCT0.CSR.word = 0x0084;    /* Control status register */
  while(IO_CANCT0.CSR.bit.HALT == 1); /* HALT=0 waite */

  /* CAN0 Tx data set */
  IO_CANID0.DTR[5].BYTE0_3 = 0xB0B0A0A0;  /* message buffer5 data set */
/*  IO_TREQR0.word = 0x0020;*/      /* CAN0 TX start */
}
/* CAN1 initialize */
void init_CAN1(void)
{
  IO_ICR01.byte = 0x03;     /* CAN1 INT level set */
  IO_ICR12.byte = 0x02;     /* Reload1 Timer INT level set */
  IO_CANCT1.IDER.word = 0x0000;   /* Standard frame format */
  IO_CANCT1.AMSR.lword = 0x000000;  /* full bit compare */

/*  IO_CANCT1.BTR.word = 0x2B9D;*/    /* bit rate 33.3kbit/s */
/*  IO_CANCT1.BTR.word = 0x3A87;*/    /* bit rate 125kbit/s */
/*  IO_CANCT1.BTR.word = 0x4983;*/    /* bit rate 250kbit/s */
  IO_CANCT1.BTR.word = 0x4981;    /* bit rate 500kbit/s */
/*  IO_CANCT1.BTR.word = 0x4980;*/    /* bit rate 1000kbit/s */

  /* Tx set */
  IO_CANID1.IDR[5].lword = 0x00A000;  /* message buffer5 ID=5 */
  IO_CANID1.DLCR[5].word = 0x000002;  /* set the data length */
  IO_CANCT1.RFWTR.word   = 0x0000;  /* tx starts immediately */
  IO_CANCT1.TRTRR.word   = 0x0000;  /* remote tx request clear*/
  IO_CANCT1.TIER.word    = 0x0020;  /* CAN1 Tx Interrupt valid */

  /* Rx set*/
  IO_CANID1.IDR[0].lword = 0x2000;  /* message buffer0 ID=1 */
  IO_CANID1.IDR[1].lword = 0x4000;  /* message buffer1 ID=2 */
  IO_RIER1.word = 0x0003;       /* CAN1 Rx Interrupt valid */
  /* Stored start address */
  RX1_BUFFER0=(unsigned long *)0x500; /* ID=1 500H乣54FH */
  RX1_BUFFER1=(unsigned long *)0x550; /* ID=2 550H乣5FFH */

  /* CAN1 Bus start */
  IO_BVALR1.word = 0x0023;      /* message buffer valid */
  IO_CANCT1.CSR.word = 0x0084;    /* Control status register */
  while(IO_CANCT1.CSR.bit.HALT == 1); /* HALT=0 waite */

  /* CAN1 Tx data set */
  IO_CANID1.DTR[5].BYTE0_3 = 0xA0A0;  /* message buffer5 data set */
  IO_TREQR1.word = 0x0020;      /* CAN1 TX start */
}

  /* Reload Timer0 initialize */
void init_RELOAD0(void)
{
/*  IO_TMR0 = 0x1338;*/   /* CAN0 Tx Interval 10ms*/
  IO_TMR0 = 0xC350;   /* CAN0 Tx Interval 100ms*/

  IO_TMCSR0.word = 0x087B;  /* 冇/2**5,reload mode,INT valid */
}
  /* Reload Timer0 initialize */
void init_RELOAD1(void)
{
  IO_TMR1 = 0x1338;   /* CAN1 Tx Interval 10ms*/
/*  IO_TMR1 = 0xC350;*/   /* CAN1 Tx Interval 100ms*/

  IO_TMCSR1.word = 0x087B;  /* 冇/2**5,reload mode,INT valid */
}


⌨️ 快捷键说明

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