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

📄 tio4_mes.c

📁 瑞萨CAN通讯单片机程序
💻 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 + -