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

📄 csio.c

📁 瑞萨CAN通讯单片机程序
💻 C
字号:
/*""FILE COMMENT""*****************************************************
 *	M32R C Programming		Rev. 1.00
 *		< Sample Program for Serial I/O (CSIO) >
 *
 *	Copyright (c) 2003 Renesas Technology Corporation
 *			   And Renesas Solutions Corporation
 *			   All Rights Reserved
 *********************************************************************/

/************************************************************************/
/*		Include file						*/
/************************************************************************/

#include		"..\inc\sfr32170_pragma.h"

/************************************************************************/
/*		Function prototype declaration				*/
/************************************************************************/

	void		SIO0_CLKTinit(void);			/* Initialize SIO0 */
	void		SIO1_CLKRinit(void);			/* Initialize SIO1 */
	void		SIO0_Tr( unsigned char *, unsigned int);/* Send data from SIO0 */
	void		SIO1_RcvInt(void);			/* SIO1 receive interrupt */

/************************************************************************/
/*		Externally referenced variable				*/
/************************************************************************/

extern	unsigned char	RcvBuf1[];				/* Receive buffer */
extern	unsigned char	rx_cnt1;				/* Pointer to receive buffer */

/************************************************************************/
/*		Define macro						*/
/************************************************************************/

/* Setting port operation mode */
							/* 0123 4567	*/
#define	P8MOD_SCI0ClkTr	(unsigned char)0x28		/* 0010 1000B	P8 operation mode register	*/
							/* |||| |||+--- P87				*/
							/* |||| ||+---- P86				*/
							/* |||| |+----- P85				*/
							/* |||| +------ SCLKI0/SCLKO0			*/
							/* |||+-------- P83				*/
							/* ||+--------- TXD0				*/
							/* ++---------- don't care			*/

							/* 0123 4567	*/
#define	P8MOD_SCI1ClkRcv	(unsigned char)0x03	/* 0000 0011B	P8 operation mode register	*/
							/* |||| |||+--- SCLKI1/SCLKO1			*/
							/* |||| ||+---- RXD1				*/
							/* |||| |+----- P85				*/
							/* |||| +------ P84				*/
							/* |||+-------- P83				*/
							/* ||+--------- P82				*/
							/* ++---------- don't care			*/

/* Setting serial I/O */

							/* 0123 4567	*/
#define	SnTCNT_INI	(unsigned char)0x00		/* 0000 0000B	SIOn transmit control register	*/
							/* |||| |||+--- Disable transmission		*/
							/* |||| +++---- don't care			*/
							/* ||++-------- f(BCLK)				*/
							/* ++---------- don't care			*/

							/* 0123 4567	*/
#define	SnMOD_CLK_INI	(unsigned char)0x80		/* 1000 0000B	SIOn mode register		*/
							/* |||| ++++--- don't care			*/
							/* |||+-------- Select clock(specified separately) */
							/* +++--------- 8-bit CSIO			*/

/* Setting interrupt priority level */

#define	SioILEVEL	(unsigned char)1		/* Serial IO transmit/receive interrupt priority level */

/* Setting baud rate (Be sure to check actually set value when using) */

#define	XIN		10				/* 10MHz */
#define	ClkBAUD_500	(unsigned char)(XIN * 2000000 / 2 / 500000 - 1)	/* 500Kbps */

/*""FUNC COMMENT""*******************************************************
 * Function name: SIO0_CLKTinit()
 *-----------------------------------------------------------------------
 * Description	: Sets SIO0 for synchronous serial I/O transmission
 *		: - Program transmission
 *		: - Internal clock selected (clock output)
 *-----------------------------------------------------------------------
 * Argument	: -
 *-----------------------------------------------------------------------
 * Returns	: -
 *-----------------------------------------------------------------------
 * Notes	: Must be executed while interrupts are disabled
 *""FUNC COMMENT END""***************************************************/
void	SIO0_CLKTinit( void)
{

/*** Setting transfer mode ***/

	S0RCNT = 0x00;						/* Disable reception */
	S0TCNT = SnTCNT_INI;					/* f(BCLK), disable transmission */
	P8MOD |= P8MOD_SCI0ClkTr;				/* Set P8 for CSIO mode */
	S0MOD = SnMOD_CLK_INI;					/* Set data format */
	S0BAUR = ClkBAUD_500;					/* Set baud rate */

/*** Interrupt related settings ***/

	ISIO0TXCR = (unsigned char)7;				/* Set SIO0 transmit interrupt priority level */
	ISIO0RXCR = (unsigned char)7;				/* Set SIO0 receive interrupt priority level */
	SI03MASK &= ~T0MASK;					/* Disable SIO0 transmit interrupt request */
	SI03MASK &= ~R0MASK;					/* Disable SIO0 receive interrupt request */

/*** Starting transmission/reception ***/

	S0TCNT |= TEN;						/* Enable transmission */
}

/*""FUNC COMMENT""*******************************************************
 * Function name: SIO1_CLKRinit()
 *-----------------------------------------------------------------------
 * Description	: Enable transmissionSets SIO1 for synchronous serial I/O reception
 *		: - Reception by interrupt
 *		: - External clock selected (clock input)
 *-----------------------------------------------------------------------
 * Argument	: -
 *-----------------------------------------------------------------------
 * Returns	: -
 *-----------------------------------------------------------------------
 * Notes	: Port input function must be enabled
 *		: To receive, it is necessary to enable transmission and write dummy data to transmit buffer register
 *		: Must be executed while interrupts are disabled
 *""FUNC COMMENT END""***************************************************/
void	SIO1_CLKRinit( void)
{

/*** Setting transfer mode */

	S1RCNT = 0x00;						/* Disable reception */
	S1TCNT = SnTCNT_INI;					/* f(BCLK), disable transmission */
	P8MOD |= P8MOD_SCI1ClkRcv;				/* Set P8 for CSI1 mode */
	S1MOD = SnMOD_CLK_INI | CKS;				/* Set data format */

/*** Interrupt related settings ***/

	ISIO1TXCR = (unsigned char)7;				/* Set SIO1 transmit interrupt priority level */
	ISIO1RXCR = SioILEVEL;					/* Set SIO1 receive interrupt priority level */
	SI03SEL &= ~ISR1;					/* Select reception-finished interrupt */
	SI03MASK &= ~T1MASK;					/* Disable SIO1 transmit interrupt request */
	SI03MASK |= R1MASK;					/* Disable SIO1 receive interrupt request */

/*** Starting transmission/reception ***/

	S1TCNT |= TEN;						/* Enable transmission */
	S1RCNT |= REN;						/* Enable reception */
}

/*""FUNC COMMENT""*******************************************************
 * Function name: SIO0_Tr()
 *-----------------------------------------------------------------------
 * Description	: Transmits data from SIO0
 *-----------------------------------------------------------------------
 * Argument	: unsigned char *TrBuf	Pointer to transmit data buffer
 *		: unsigned int TrNum	Number of transmit bytes
 *-----------------------------------------------------------------------
 * Returns	: -
 *-----------------------------------------------------------------------
 * Notes	: Do not always need to wait for end of transmission
 *""FUNC COMMENT END""***************************************************/
void  SIO0_Tr( unsigned char *TrBuf, unsigned int TrNum)
{
	unsigned long	i;

	for( i = 0; i < TrNum; i++) {
		while(( S0TCNT & TBE) == 0);			/* Wait until transmit buffer is empty */
		S0TXB_L = *TrBuf++;				/* Transfer return data */
	}
	while(( S0TCNT & TSTAT) != 0);				/* Wait for end of transmission */
}

/*""FUNC COMMENT""*******************************************************
 * Function name: SIO1_RcvInt()
 *-----------------------------------------------------------------------
 * Description	: Reads out received data
 *-----------------------------------------------------------------------
 * Argument	: -
 *-----------------------------------------------------------------------
 * Returns	: -
 *-----------------------------------------------------------------------
 * Notes	:
 *""FUNC COMMENT END""***************************************************/
void	SIO1_RcvInt(void)
{
	unsigned char	data;
	unsigned char	status;

	status = S1RCNT;					/* Read receive status */
	data = S1RXB_L;						/* Read out received data */
	status |= S1RCNT;					/* Handle overrun */

	if(( status & ERS) == 0) {				/* Check receive error sum */
		RcvBuf1[ rx_cnt1++] = data;			/* Store received data */

	} else {						/* Process receive errors */

		/* Error processing by user */

		S1RCNT &= ~REN;					/* Disable reception */
		S1RCNT |= REN;					/* Enable reception */
	}
}

⌨️ 快捷键说明

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