📄 interrupt_routine.c
字号:
/** THIS SAMPLE CODE IS PROVIDED AS IS. FUJITSU MICROELECTRONICS **/
/** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR OMMISSIONS **/
/*****************************************************************************
* Date : 2001/11/20
* PROJECT: interrupt_routine
* Program: RX0 ID=1 BUFFER0 DATA:RAM=0x300乣0x34F (stored every 4byte)
* RX0 ID=2 BUFFER1 DATA:RAM=0x350乣0x3FF (stored every 4byte)
* RX1 ID=1 BUFFER0 DATA:RAM=0x400乣0x44F (stored every 4byte)
* RX1 ID=2 BUFFER1 DATA:RAM=0x450乣0x4FF (stored every 4byte)
* variable size: unsigned char : 1byte
* unsigend int : 2byte
* unsigned long : 4byte
* unsigned double : 8byte
*****************************************************************************/
#include "_ffmc16.h"
#include "extern.h"
#define CLEAR 0x00
extern unsigned long *RX0_BUFFER0;
extern unsigned long *RX0_BUFFER1;
extern unsigned long *RX1_BUFFER0;
extern unsigned long *RX1_BUFFER1;
unsigned long i;
unsigned long j;
/* CAN0 RX Int routine */
__interrupt void can0_rx_int(void)
{
if(IO_RCR0.bit.RC0==1) /* ID = 1 ? */
{
*RX0_BUFFER0=IO_CANID0.DTR[0].BYTE0_3; /* 4byte DATA */
RX0_BUFFER0=RX0_BUFFER0+1; /* adress = adress + 4byte */
if(RX0_BUFFER0 >= (unsigned long *)0x44F )
RX0_BUFFER0 = (unsigned long *)0x0400; /* start address = 0x400 */
}
else if(IO_RCR0.bit.RC1==1) /* ID = 2 ? */
{
*RX0_BUFFER1=IO_CANID0.DTR[1].BYTE0_3; /* 4byte DATA */
RX0_BUFFER1=RX0_BUFFER1+1; /* adress = adress + 4byte */
if(RX0_BUFFER1 >= (unsigned long *)0x49F )
RX0_BUFFER1 = (unsigned long *)0x450;/* start address= 0x450 */
}
else
{
/* */
}
IO_RCR0.word = CLEAR; /* RX Complete Reg clear */
}
/* CAN0 TX Int routine */
__interrupt void can0_tx_int(void)
{
if(IO_CANCT0.LEIR.bit.TCE ==1 )
{
IO_CANCT0.LEIR.bit.TCE = 0;
IO_TCR0.word = CLEAR; /* TX Complete Reg clear */
error_judge_CAN0();
}
else if(IO_CANCT0.LEIR.bit.NTE ==1 )
{
IO_CANCT0.LEIR.bit.NTE = 0;
error_judge_CAN0();
}
else
{
__wait_nop();
}
}
/* CAN1 RX Int routine */
__interrupt void can1_rx_int(void)
{
if(IO_RCR1.bit.RC0==1) /* ID = 1 ? */
{
*RX1_BUFFER0=IO_CANID1.DTR[0].BYTE0_3; /* 4byte DATA */
RX1_BUFFER0=RX1_BUFFER0+1; /* adress = adress + 4byte */
if(RX1_BUFFER0 >= (unsigned long *)0x54F )
RX1_BUFFER0 = (unsigned long *)0x0500; /* start address = 0x400 */
}
else if(IO_RCR1.bit.RC1==1) /* ID = 2 ? */
{
*RX1_BUFFER1=IO_CANID1.DTR[1].BYTE0_3; /* 4byte DATA */
RX1_BUFFER1=RX1_BUFFER1+1; /* adress = adress + 4byte */
if(RX1_BUFFER1 >= (unsigned long *)0x59F )
RX1_BUFFER1 = (unsigned long *)0x550;/* start address= 0x450 */
}
else
{
/* */
}
IO_RCR1.word = CLEAR; /* RX Complete Reg clear */
}
/* CAN1 TX Int routine */
__interrupt void can1_tx_int(void)
{
if(IO_CANCT1.LEIR.bit.TCE ==1 )
{
IO_CANCT1.LEIR.bit.TCE = 0;
IO_TCR1.word = CLEAR; /* TX Complete Reg clear */
error_judge_CAN1();
}
else if(IO_CANCT1.LEIR.bit.NTE ==1 )
{
IO_CANCT1.LEIR.bit.NTE = 0;
error_judge_CAN1();
}
else
{
__wait_nop();
}
}
/* Reload Timer0 Int routine*/
__interrupt void timer0_int(void)
{
IO_TMCSR0.bit.UF = CLEAR; /* Under Flow frag clear */
i++;
IO_CANID0.DTR[5].BYTE0_3 = i;/* CAN0 message buffer5 data set */
IO_TREQR0.word = 0x0020; /* Transmission Request TREQ0 */
}
/* Reload Timer1 Int routine*/
__interrupt void timer1_int(void)
{
IO_TMCSR1.bit.UF = CLEAR; /* Under Flow frag clear */
j++;
IO_CANID1.DTR[5].BYTE0_3 = j;/* message buffer5 data set */
IO_TREQR1.word = 0x0020; /* Transmission Request TREQ1 */
}
/* dummy Int routine*/
__interrupt void dummy(void)
{
__wait_nop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -