📄 timer_user.bak
字号:
/*
*******************************************************************************
**
** 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
#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
*******************************************************************************
*/
#include "timer.h"
#include "timer_config.h"
/*
*******************************************************************************
** 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 + -