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

📄 interrupt_routine.c

📁 富士通单片机90540CAN总线通信源代码
💻 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 + -