📄 can_16.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 + -