📄 tio4_mes.c
字号:
/*""FILE COMMENT""*****************************************************
* M32R C Programming Rev. 1.00
* < Sample Program for TIO4 measure clear input mode >
*
* Copyright (c) 2003 Renesas Technology Corporation
* And Renesas Solutions Corporation
* All Rights Reserved
*********************************************************************/
/************************************************************************/
/* Include file */
/************************************************************************/
#include "..\inc\sfr32170_pragma.h"
/************************************************************************/
/* Externally referenced variable */
/************************************************************************/
extern unsigned long MesTime; /* Measurement count value */
/************************************************************************/
/* Definition of external reference */
/************************************************************************/
extern void DisInt( void ); /* Interrupt disable function */
extern void EnInt( void ); /* Interrupt enable function */
/************************************************************************/
/* Function prototype declaration */
/************************************************************************/
void TIO4_MesClr_init( void ); /* Set TIO4 measurement clear input mode */
void TIN0_Int( void ); /* Process TIN0 (TIO4 measurement input) interrupt */
/************************************************************************/
/* Define macro */
/************************************************************************/
/*** Measurement clear input (TIO4) ***/
/* 0123 4567 */
#define IEB2_MASK (unsigned char)0x30 /* 0011 0000B */
#define IEB2_Tin0 (unsigned char)0x00 /* 0000 0000B */
/* ++-------- Input event bus 2 : TIN0 */
/* 0123 4567 */
#define TIO4_MASK (unsigned short)0xff /* 1111 1111B */
#define TIO4_MesClr (unsigned short)0x34 /* 0011 0100B */
/* |||| |+++--- Set TIO4 measurement clear input mode */
/* |||+-+------ Measurement input source : */
/* ||| input event bus 2 selected */
/* ||+--------- Enable external input */
/* ++---------- Select clock bus 0 */
/* 0123 4567 89AB CDEF */
#define TIN0_MASK (unsigned short)0x0003 /* 0000 0000 0000 0011B */
#define TIN0_REdge (unsigned short)0x0001 /* 0000 0000 0000 0001B */
/* ++- Set rise on TIN0 to be the active edge*/
/*""FUNC COMMENT""*******************************************************
* Function name: TIO4_MesClr_init()
*-----------------------------------------------------------------------
* Description : Initial settings for TIO4 measurement clear input mode
* : - While using TIO4 in measurement clear input mode,
* : this function measures the period of a rising edge on TIN0 which is entered via input event bus 2
* : - The count source used for this operation is clock bus 0
*-----------------------------------------------------------------------
* Argument : -
*-----------------------------------------------------------------------
* Returns : -
*-----------------------------------------------------------------------
* Notes : The prescaler, clock bus, etc. are set separately from the above
* : ICU's interrupt control related registers are set separately from the above
* : Port input function must be enabled
* : This function must be executed while interrupts are disabled
*""FUNC COMMENT END""***************************************************/
void TIO4_MesClr_init()
{
unsigned char temp;
/*** Setting input event bus 2 ***/
CKIEBCR = ( CKIEBCR & ~IEB2_MASK) | IEB2_Tin0; /* Select input event bus 2 for input */
/*** Setting measurement clear input (TIO4) ***/
TIO4CR = ( TIO4CR & ~TIO4_MASK) | TIO4_MesClr; /* Set TIO4 measurement clear input mode */
/*** Setting P150 (TIN0) rising edge active ***/
TINCR0 = ( TINCR0 & ~TIN0_MASK) | TIN0_REdge; /* Setting TIN0 rising edge active */
P15MOD |= 0x80; /* Select P150 for TIN0 */
/*** Setting interrupt (TIO4) ***/
temp = TIOIR1;
temp |= ( TIOIS7 | TIOIS6 | TIOIS5) | TIOIM4; /* Disable TIO4 interrup */
temp &= ~TIOIS4; /* Clear TIO4 interrupt request status */
TIOIR1 = temp;
/*** Setting interrupt (TINO) ***/
temp = TINIR0;
temp |= ( TINIS2 | TINIS1);
temp &= ~( TINIS0 | TINIM0); /* Enable TIN0 interrupt */
TINIR0 = temp;
/*** Initializing counter ***/
TIO4CT = 0xffff; /* Set initial value in TIO4 counter */
/*** Starting count ***/
TIOPRO = ~TIO4PRO; /* Enable TIO4 enable protect rewrite */
TIOCEN = 0xffff; /* Starting count TIO4 */
}
/*""FUNC COMMENT""*******************************************************
* Function name: TIN0_Int()
*-----------------------------------------------------------------------
* Description : Read out captured value (TIO4 measured time) in TIN0 interrupt
*-----------------------------------------------------------------------
* Argument : -
*-----------------------------------------------------------------------
* Returns : -
*-----------------------------------------------------------------------
* Notes : TIO4 interrupt processing is needed for judgment of twice or more overflow occurrences
*""FUNC COMMENT END""***************************************************/
void TIN0_Int()
{
unsigned char temp;
DisInt(); /* Interrupt disable */
MesTime = (unsigned long)( 0xffff - TIO4RL0); /* Read out measured time */
if(( TIOIR1 & TIOIS4) != 0) { /* Determine overflow */
temp = TIOIR1;
temp |= ( TIOIS5 | TIOIS6 | TIOIS7);
temp &= ~TIOIS4;
TIOIR1 = temp; /* Clear interrupt request status */
MesTime += (unsigned long)0x10000; /* Add to compensate for overflow */
}
EnInt(); /* Interrupt enable */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -