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

📄 timer_user.c

📁 the timer control demo source for the NEC mcu
💻 C
字号:
/*
*******************************************************************************
**
**  This device driver was created by Applilet for the 78K0/KB2, 78K0/KC2,
**  78K0/KD2, 78K0/KE2 and 78K0/KF2 8-Bit Single-Chip Microcontrollers.
**
**  Filename :	timer_user.c
**  Abstract :	This file implements a device driver for the timer module
**  Device :	uPD78F0547
**  Compiler:	NEC/CC78K0
**
*******************************************************************************
*/
#pragma sfr

#include "timer.h"
#include "timer_config.h"

#if TM00_NotUse==0
#if TM00_INTTM000==1
#pragma interrupt  INTTM000 HD_INTTM000
#endif
#if TM00_INTTM010==1
#pragma interrupt  INTTM010 HD_INTTM010
#endif
#endif

#if TM01_NotUse==0
#if TM01_INTTM001==1
#pragma interrupt  INTTM001 HD_INTTM001
#endif
#if TM01_INTTM011==1
#pragma interrupt  INTTM011 HD_INTTM011
#endif
#endif

#if TM50_NotUse==0 && TM50_INTTM50==1
#pragma interrupt  INTTM50 HD_INTTM50
#endif

#if TM51_NotUse==0 && TM51_INTTM51==1
#pragma interrupt  INTTM51 HD_INTTM51
#endif

#if TMH0_NotUse==0 && TMH0_INTTMH0==1
#pragma interrupt  INTTMH0 HD_INTTMH0
#endif

#if TMH1_NotUse==0 && TMH1_INTTMH1==1
#pragma interrupt  INTTMH1 HD_INTTMH1
#endif

/*
*******************************************************************************
**  Include files
*******************************************************************************
*/

/*
*******************************************************************************
**  MacroDefine
*******************************************************************************
*/
#if TM00_NotUse==0 && TM00_PulseMeasurement==1
#if	TM00_Pulse_TI00nAndTI01nFreeRunning==1
static unsigned long tm00_pulse0_old0=0;
static unsigned long tm00_pulse0_old1=0;
unsigned long tm00_pulse0_pos=0;
unsigned long tm00_pulse0_neg=0;
unsigned char tm00_pulse0_ovf=0;

static unsigned long tm00_pulse1_old0=0;
static unsigned long tm00_pulse1_old1=0;
unsigned long tm00_pulse1_pos=0;
unsigned long tm00_pulse1_neg=0;
unsigned char tm00_pulse1_ovf=0;
#elif	TM00_Pulse_TI00nFreeRunning==1
static unsigned long tm00_pulse0_old0=0;
unsigned long tm00_pulse0_pos=0;
unsigned long tm00_pulse0_neg=0;
#elif	TM00_Pulse_TI00nRestart==1
unsigned long tm00_pulse0_pos=0;
unsigned long tm00_pulse0_neg=0;
#endif
#endif

#if TM01_NotUse==0 && TM01_PulseMeasurement==1
#if	TM01_Pulse_TI00nAndTI01nFreeRunning==1
static unsigned long tm01_pulse0_old0=0;
static unsigned long tm01_pulse0_old1=0;
unsigned long tm01_pulse0_pos=0;
unsigned long tm01_pulse0_neg=0;
unsigned char tm01_pulse0_ovf=0;

static unsigned long tm01_pulse1_old0=0;
static unsigned long tm01_pulse1_old1=0;
unsigned long tm01_pulse1_pos=0;
unsigned long tm01_pulse1_neg=0;
unsigned char tm01_pulse1_ovf=0;
#elif	TM01_Pulse_TI00nFreeRunning==1
static unsigned long tm01_pulse0_old0=0;
unsigned long tm01_pulse0_pos=0;
unsigned long tm01_pulse0_neg=0;
#elif	TM01_Pulse_TI00nRestart==1
unsigned long tm01_pulse0_pos=0;
unsigned long tm01_pulse0_neg=0;
#endif
#endif

#if TM00_NotUse==0 && TM00_INTTM000==1
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	TM00 INTTM000 interrupt service routine
**	
**  Parameters:
**	None
**
**  Returns:
**	None	
**
**-----------------------------------------------------------------------------
*/
__interrupt void HD_INTTM000( )
{
#if TM00_PulseMeasurement==1
#if	TM00_Pulse_TI00nAndTI01nFreeRunning==1
	/* Measurement of two pulse widths with free-running counter */
	unsigned long tm00_pulse1_cur0=0;
	unsigned long tm00_pulse1_cur1=0;
	unsigned char tm00_pulse1_out = P0 & 0x2;	/* pin state */
	unsigned char tm00_pulse_ovf = TMC00 & TM0n_TMC0n_OverflowFlag;	/* overflow state */
	OVF00 = 0;			/* OVF00 clear */
	
	tm00_pulse0_ovf = tm00_pulse_ovf;
	if(tm00_pulse1_out){				/* input high level */
		if((tm00_pulse0_ovf == 1)||( tm00_pulse1_ovf == 1)){/*overflow generated */
			tm00_pulse1_cur0 = (unsigned long)CR000;
			tm00_pulse1_neg = tm00_pulse1_cur0 + 0x10000 - tm00_pulse1_old0;
		}
		else{
			tm00_pulse1_cur0 = (unsigned long)CR000;
			tm00_pulse1_neg = tm00_pulse1_cur0 - tm00_pulse1_old0;
		}
		tm00_pulse1_old1 = tm00_pulse1_cur0;
	}
	else{						/* input low level */
		if((tm00_pulse0_ovf == 1)||( tm00_pulse1_ovf == 1)){/*overflow generated */
			tm00_pulse1_cur1 = (unsigned long)CR000;
			tm00_pulse1_pos = tm00_pulse1_cur1 + 0x10000 - tm00_pulse1_old1;
		}
		else{
			tm00_pulse1_cur1 = (unsigned long)CR000;
			tm00_pulse1_pos = tm00_pulse1_cur1 - tm00_pulse1_old1;
		}
		tm00_pulse1_old0 = tm00_pulse1_cur1;
	}
	tm00_pulse1_ovf = 0;
#elif	TM00_Pulse_TI00nFreeRunning==1
#elif	TM00_Pulse_TI00nRestart==1
#endif
#endif
	/*TODO*/
}
#endif

#if TM00_NotUse==0 && TM00_INTTM010==1
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	TM00 INTTM010 interrupt service routine.
**
**  Parameters:
**	None
**
**  Returns:
**	None
**
**-----------------------------------------------------------------------------
*/
__interrupt void HD_INTTM010( )
{
#if TM00_PulseMeasurement==1
	unsigned long tm00_pulse0_cur0=0;
	unsigned long tm00_pulse0_cur1=0;
	unsigned char tm00_pulse0_out = P0 & 0x1;	/* pin state */
	unsigned char tm00_pulse_ovf = TMC00 & TM0n_TMC0n_OverflowFlag;	/* overflow state */
	OVF00 = 0;			/* OVF00 clear */
		
#if	TM00_Pulse_TI00nAndTI01nFreeRunning==1
	/* Measurement of two pulse widths with free-running counter */
	tm00_pulse1_ovf = tm00_pulse_ovf;
	if(tm00_pulse0_out){				/* input high level */
		if((tm00_pulse0_ovf == 1)||( tm00_pulse1_ovf == 1)){/*overflow generated */
			tm00_pulse0_cur0 = (unsigned long)CR010;
			tm00_pulse0_neg = tm00_pulse0_cur0 + 0x10000 - tm00_pulse0_old0;
		}
		else{
			tm00_pulse0_cur0 = (unsigned long)CR010;
			tm00_pulse0_neg = tm00_pulse0_cur0 - tm00_pulse0_old0;
		}
		tm00_pulse0_old1 = tm00_pulse0_cur0;
	}
	else{						/* input low level */
		if((tm00_pulse0_ovf == 1)||( tm00_pulse1_ovf == 1)){/*overflow generated */
			tm00_pulse0_cur1 = (unsigned long)CR010;
			tm00_pulse0_pos = tm00_pulse0_cur1 + 0x10000 - tm00_pulse0_old1;
		}
		else{
			tm00_pulse0_cur1 = (unsigned long)CR010;
			tm00_pulse0_pos = tm00_pulse0_cur1 - tm00_pulse0_old1;
		}
		tm00_pulse0_old0 = tm00_pulse0_cur1;
	}
	tm00_pulse0_ovf = 0;
#elif	TM00_Pulse_TI00nFreeRunning==1
	/* Free-running counter and two capture registers */
	tm00_pulse0_cur0 = (unsigned long)CR010;
	tm00_pulse0_cur1 = (unsigned long)CR000;

	if(tm00_pulse_ovf){			/*overflow generated */
		if(tm00_pulse0_cur0 < tm00_pulse0_cur1){
			tm00_pulse0_pos = tm00_pulse0_cur1 - tm00_pulse0_old0;
			tm00_pulse0_neg = (0x10000 + tm00_pulse0_cur0) - tm00_pulse0_cur1;
		}
		else{
			tm00_pulse0_pos = (0x10000 + tm00_pulse0_cur1) - tm00_pulse0_old0;
			tm00_pulse0_neg = tm00_pulse0_cur0 - tm00_pulse0_cur1;
		}
	}
	else{
		tm00_pulse0_pos = tm00_pulse0_cur1 - tm00_pulse0_old0;
		tm00_pulse0_neg = tm00_pulse0_cur0 - tm00_pulse0_cur1;
	}
	tm00_pulse0_old0 = tm00_pulse0_cur0;
#elif	TM00_Pulse_TI00nRestart==1
	/* Pulse width measurement by means of restart */
	tm00_pulse0_cur0 = (unsigned long)CR010;
	tm00_pulse0_cur1 = (unsigned long)CR000;
	if(tm00_pulse_ovf){
		if(tm00_pulse0_cur0 > tm00_pulse0_cur1){
			tm00_pulse0_pos = tm00_pulse0_cur1;
			tm00_pulse0_neg = tm00_pulse0_cur0 + 0x10000 - tm00_pulse0_cur1;
		}
		else{
			tm00_pulse0_pos = tm00_pulse0_cur1;
			tm00_pulse0_neg = tm00_pulse0_cur0 + 0x10000 - tm00_pulse0_cur1;
		}
	}
	else{
		tm00_pulse0_pos = tm00_pulse0_cur1;
		tm00_pulse0_neg = tm00_pulse0_cur0 - tm00_pulse0_cur1;
	}
#endif
#endif
	/*TODO*/
}
#endif

#if TM01_NotUse==0 && TM01_INTTM001==1
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	TM01 INTTM001 interrupt service routine.
**
**  Parameters:
**	None
**
**  Returns:
**	None
**
**-----------------------------------------------------------------------------
*/
__interrupt void HD_INTTM001( )
{
#if TM01_PulseMeasurement==1
#if	TM01_Pulse_TI00nAndTI01nFreeRunning==1
	/* Measurement of two pulse widths with free-running counter */
	unsigned long tm01_pulse1_cur0=0;
	unsigned long tm01_pulse1_cur1=0;
	unsigned char tm01_pulse1_out = P0 & 0x40;	/* pin state */
	unsigned char tm01_pulse_ovf = TMC01 & TM0n_TMC0n_OverflowFlag;	/* overflow state */
	OVF01 = 0;			/* OVF01 clear */
	
	tm01_pulse0_ovf = tm01_pulse_ovf;
	if(tm01_pulse1_out){				/* input high level */
		if((tm01_pulse0_ovf == 1)||( tm01_pulse1_ovf == 1)){/*overflow generated */
			tm01_pulse1_cur0 = (unsigned long)CR010;
			tm01_pulse1_neg = tm01_pulse1_cur0 + 0x10000 - tm01_pulse1_old0;
		}
		else{
			tm01_pulse1_cur0 = (unsigned long)CR010;
			tm01_pulse1_neg = tm01_pulse1_cur0 - tm01_pulse1_old0;
		}
		tm01_pulse1_old1 = tm01_pulse1_cur0;
	}
	else{						/* input low level */
		if((tm01_pulse0_ovf == 1)||( tm01_pulse1_ovf == 1)){/*overflow generated */
			tm01_pulse1_cur1 = (unsigned long)CR000;
			tm01_pulse1_pos = tm01_pulse1_cur1 + 0x10000 - tm01_pulse1_old1;
		}
		else{
			tm01_pulse1_cur1 = (unsigned long)CR000;
			tm01_pulse1_pos = tm01_pulse1_cur1 - tm01_pulse1_old1;
		}
		tm01_pulse1_old0 = tm01_pulse1_cur1;
	}
	tm01_pulse1_ovf = 0;
#elif	TM01_Pulse_TI00nFreeRunning==1
#elif	TM01_Pulse_TI00nRestart==1
#endif
#endif
	/*TODO*/
}
#endif

#if TM01_NotUse==0 && TM01_INTTM011==1
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	TM01 INTTM011 interrupt service routine.
**
**  Parameters:
**	None
**
**  Returns:
**	None
**
**-----------------------------------------------------------------------------
*/
__interrupt void HD_INTTM011( )
{
#if TM01_PulseMeasurement==1
	unsigned long tm01_pulse0_cur0=0;
	unsigned long tm01_pulse0_cur1=0;
	unsigned char tm01_pulse0_out = P0 & 0x20;	/* pin state */
	unsigned char tm01_pulse_ovf = TMC01 & TM0n_TMC0n_OverflowFlag;	/* overflow state */
	OVF00 = 0;			/* OVF00 clear */
		
#if	TM01_Pulse_TI00nAndTI01nFreeRunning==1
	/* Measurement of two pulse widths with free-running counter */
	tm01_pulse1_ovf = tm01_pulse_ovf
	if(tm01_pulse0_out){				/* input high level */
		if((tm01_pulse0_ovf == 1)||( tm01_pulse1_ovf == 1)){/*overflow generated */
			tm01_pulse0_cur0 = (unsigned long)CR011;
			tm01_pulse0_neg = tm01_pulse0_cur0 + 0x10000 - tm01_pulse0_old0;
		}
		else{
			tm01_pulse0_cur0 = (unsigned long)CR011;
			tm01_pulse0_neg = tm01_pulse0_cur0 - tm01_pulse0_old0;
		}
		tm01_pulse0_old1 = tm01_pulse0_cur0;
	}
	else{						/* input low level */
		if((tm01_pulse0_ovf == 1)||( tm01_pulse1_ovf == 1)){/*overflow generated */
			tm01_pulse0_cur1 = (unsigned long)CR011;
			tm01_pulse0_pos = tm01_pulse0_cur1 + 0x10000 - tm01_pulse0_old1;
		}
		else{
			tm01_pulse0_cur1 = (unsigned long)CR011;
			tm01_pulse0_pos = tm01_pulse0_cur1 - tm01_pulse0_old1;
		}
		tm01_pulse0_old0 = tm01_pulse0_cur1;
	}
	tm01_pulse0_ovf = 0;
#elif	TM01_Pulse_TI00nFreeRunning==1
	/* Free-running counter and two capture registers */
	tm01_pulse0_cur0 = (unsigned long)CR011;
	tm01_pulse0_cur1 = (unsigned long)CR001;

	if(tm01_pulse_ovf){			/*overflow generated */
		if(tm01_pulse0_cur0 < tm01_pulse0_cur1){
			tm01_pulse0_pos = tm01_pulse0_cur1 - tm01_pulse0_old0;
			tm01_pulse0_neg = (0x10000 + tm01_pulse0_cur0) - tm01_pulse0_cur1;
		}
		else{
			tm01_pulse0_pos = (0x10000 + tm01_pulse0_cur1) - tm01_pulse0_old0;
			tm01_pulse0_neg = tm01_pulse0_cur0 - tm01_pulse0_cur1;
		}
	}
	else{
		tm01_pulse0_pos = tm01_pulse0_cur1 - tm01_pulse0_old0;
		tm01_pulse0_neg = tm01_pulse0_cur0 - tm01_pulse0_cur1;
	}
	tm01_pulse0_old0 = tm01_pulse0_cur0;
#elif	TM01_Pulse_TI00nRestart==1
	/* Pulse width measurement by means of restart */
	tm01_pulse0_cur0 = (unsigned long)CR011;
	tm01_pulse0_cur1 = (unsigned long)CR001;
	if(tm01_pulse_ovf){
		if(tm01_pul_cur_0 > tm01_pul_cur_1){
			tm01_pulse0_pos = tm01_pulse0_cur1;
			tm01_pulse0_neg = tm01_pulse0_cur0 + 0x10000 - tm01_pulse0_cur1;
		}
		else{
			tm01_pulse0_pos = tm01_pulse0_cur1;
			tm01_pulse0_neg = tm01_pulse0_cur0 + 0x10000 - tm01_pulse0_cur1;
		}
	}
	else{
		tm01_pulse0_pos = tm01_pulse0_cur1;
		tm01_pulse0_neg = tm01_pulse0_cur0 - tm01_pulse0_cur1;
	}
#endif
#endif
	/* TODO */
}
#endif

#if TM50_NotUse==0 && TM50_INTTM50==1
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	TM50 INTTM50 interrupt service routine
**	
**  Parameters:
**	None
**
**  Returns:
**	None	
**
**-----------------------------------------------------------------------------
*/
__interrupt void HD_INTTM50( )
{
	/* TODO */
}

#endif

#if TM51_NotUse==0 && TM51_INTTM51==1
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	TM51 INTTM51 interrupt service routine
**	
**  Parameters:
**	None
**
**  Returns:
**	None	
**
**-----------------------------------------------------------------------------
*/
__interrupt void HD_INTTM51( )
{
	/* TODO */
}

#endif

#if TMH0_NotUse==0 && TMH0_INTTMH0==1
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	TMH0 INTTMH0 interrupt service routine
**	
**  Parameters:
**	None
**
**  Returns:
**	None	
**
**-----------------------------------------------------------------------------
*/
__interrupt void HD_INTTMH0( )
{
	/* TODO */
}
#endif

#if TMH1_NotUse==0 && TMH1_INTTMH1==1
/*
**-----------------------------------------------------------------------------
**
**  Abstract:
**	TMH1 INTTMH1 interrupt service routine
**	
**  Parameters:
**	None
**
**  Returns:
**	None	
**
**-----------------------------------------------------------------------------
*/
__interrupt void HD_INTTMH1(void)
{
	/* TODO */
}

#endif

⌨️ 快捷键说明

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