📄 uart.c
字号:
/*""FILE COMMENT""*****************************************************
* M32R C Programming Rev. 1.00
* < Sample Program for Serial I/O (UART) >
*
* 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_init( void); /* Initialize SIO0 */
void SIO1_init( void); /* Initialize SIO1 */
void SIO2_init( void); /* Initialize SIO2 */
void SIO3_init( void); /* Initialize SIO3 */
void SIO4_init( void); /* Initialize SIO4 */
void SIO5_init( void); /* Initialize SIO5 */
void SIO0_Tr( unsigned char *, unsigned int); /* Transmit from SIO0 */
void SIO1_Tr( unsigned char *, unsigned int); /* Transmit from SIO1 */
void SIO2_Tr( unsigned char *, unsigned int); /* Transmit from SIO2 */
void SIO3_Tr( unsigned char *, unsigned int); /* Transmit from SIO3 */
void SIO4_Tr( unsigned char *, unsigned int); /* Transmit from SIO4 */
void SIO5_Tr( unsigned char *, unsigned int); /* Transmit from SIO5 */
void SIO0_RcvInt(void); /* SIO0 receive interrupt */
void SIO1_RcvInt(void); /* SIO1 receive interrupt */
void SIO2_RcvInt(void); /* SIO2 receive interrupt */
void SIO3_RcvInt(void); /* SIO3 receive interrupt */
void SIO4_RcvInt(void); /* SIO4 receive interrupt傒 */
void SIO5_RcvInt(void); /* SIO5 receive interrupt */
void IntHand_SIO23(void); /* SIO2,3 transmit/receive interrupt handler */
void IntHand_SIO45(); /* SIO4,5 transmit/receive interrupt handler */
/************************************************************************/
/* Externally referenced variable */
/************************************************************************/
extern unsigned char RcvBuf0[]; /* Receive buffer */
extern unsigned char RcvBuf1[]; /* Receive buffer */
extern unsigned char RcvBuf2[]; /* Receive buffer */
extern unsigned char RcvBuf3[]; /* Receive buffer */
extern unsigned char RcvBuf4[]; /* Receive buffer */
extern unsigned char RcvBuf5[]; /* Receive buffer */
extern unsigned char rx_cnt0; /* Pointer to receive buffer */
extern unsigned char rx_cnt1; /* Pointer to receive buffer */
extern unsigned char rx_cnt2; /* Pointer to receive buffer */
extern unsigned char rx_cnt3; /* Pointer to receive buffer */
extern unsigned char rx_cnt4; /* Pointer to receive buffer */
extern unsigned char rx_cnt5; /* Pointer to receive buffer */
/************************************************************************/
/* Define macro */
/************************************************************************/
/* Setting port operation mode */
/* 0123 4567 */
#define P8MOD_SCI0 (unsigned char)0x30 /* 0011 0000B P8 operation mode register */
/* |||| |||+--- P87 */
/* |||| ||+---- P86 */
/* |||| |+----- P85 */
/* |||| +------ P84 */
/* |||+-------- RXD0 */
/* ||+--------- TXD0 */
/* ++---------- don't care */
/* 0123 4567 */
#define P8MOD_SCI1 (unsigned char)0x06 /* 0000 0110B P8 operation mode register */
/* |||| |||+--- P87 */
/* |||| ||+---- RXD1 */
/* |||| |+----- TXD1 */
/* |||| +------ P84 */
/* |||+-------- P83 */
/* ||+--------- P82 */
/* ++---------- don't care */
/* 0123 4567 */
#define P17MOD_SCI2 (unsigned char)0x0c /* 0000 1100B P17 operation mode register */
/* |||| |||+--- P177 */
/* |||| ||+---- P176 */
/* |||| |+----- RXD2 */
/* |||| +------ TXD2 */
/* |||+-------- P173 */
/* ||+--------- P172 */
/* ++---------- don't care */
/* 0123 4567 */
#define P17MOD_SCI3 (unsigned char)0x03 /* 0000 0011B P17 operation mode register */
/* |||| |||+--- RXD3 */
/* |||| ||+---- TXD3 */
/* |||| |+----- P175 */
/* |||| +------ P174 */
/* |||+-------- P173 */
/* ||+--------- P172 */
/* ++---------- don't care */
/* 0123 4567 */
#define P20MOD_SCI4 (unsigned char)0xc0 /* 1100 0000B P20 operation mode register */
/* |||| ++++--- don't care */
/* |||+-------- P203 */
/* ||+--------- P202 */
/* |+---------- RXD4 */
/* +----------- TXD4 */
/* 0123 4567 */
#define P20MOD_SCI5 (unsigned char)0x30 /* 0011 0000B P20 operation mode register */
/* |||| ++++--- don't care */
/* |||+-------- RXD5 */
/* ||+--------- TXD5 */
/* |+---------- P201 */
/* +----------- P200 */
/* Setting serial IO */
/* 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_INI (unsigned char)0x20 /* 0010 0000B SIOn mode register */
/* |||| |||+--- Sleep function disabled */
/* |||| ||+---- Parity inhibited */
/* |||| |+----- don't care(odd) */
/* |||| +------ 1 stop bit */
/* |||+-------- Internal clock */
/* +++--------- 8-bit UART */
/* 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 BAUD_62_5 (unsigned char)(XIN * 2000000 / 16 / 62500 - 1) /* 62.5Kbps */
#define BAUD_15_6 (unsigned char)(XIN * 2000000 / 16 / 15600 - 1) /* 15.6Kbps */
#define BAUD_9615 (unsigned char)(XIN * 2000000 / 16 / 9615 - 1) /* 9615bps */
/*""FUNC COMMENT""*******************************************************
* Function name: SIO0_init()
*-----------------------------------------------------------------------
* Description : Sets SIO0 for 8-bit UART
* : - Reception by interrupt
* : - Program transmission
*-----------------------------------------------------------------------
* Argument : -
*-----------------------------------------------------------------------
* Returns : -
*-----------------------------------------------------------------------
* Notes : Port input function must be enabled
* : Must be executed while interrupts are disabled
*""FUNC COMMENT END""***************************************************/
void SIO0_init( void)
{
/*** Setting transfer mode */
S0RCNT = 0x00; /* Disable reception */
S0TCNT = SnTCNT_INI; /* f(BCLK) and disable transmission */
P8MOD |= P8MOD_SCI0; /* Set P8 for SCIO mode */
S0MOD = SnMOD_INI; /* Set data format */
S0BAUR = BAUD_62_5; /* Set baud rate */
/*** Interrupt related settings ***/
ISIO0TXCR = (unsigned char)7; /* Set SIO0 transmit interrupt priority level */
ISIO0RXCR = SioILEVEL; /* Set SIO0 receive interrupt priority level */
SI03SEL &= ~ISR0; /* Select receive-finished interrupt */
SI03MASK &= ~T0MASK; /* Disable SIO0 transmit interrupt request */
SI03MASK |= R0MASK; /* Enable SIO0 receive interrupt request */
/*** Starting transmission/reception ***/
S0TCNT |= TEN; /* Enable transmission */
S0RCNT |= REN; /* Enable reception */
}
/*""FUNC COMMENT""*******************************************************
* Function name: SIO1_init()
*-----------------------------------------------------------------------
* Description : Sets SIO1 for 8-bit UART
* : - Reception by interrupt
* : - Program transmission
*-----------------------------------------------------------------------
* Argument : -
*-----------------------------------------------------------------------
* Returns : -
*-----------------------------------------------------------------------
* Notes : Port input function must be enabled
* : Must be executed while interrupts are disabled
*""FUNC COMMENT END""***************************************************/
void SIO1_init( void)
{
/*** Setting transfer mode */
S1RCNT = 0x00; /* Disable reception */
S1TCNT = SnTCNT_INI; /* f(BCLK) and disable transmission */
P8MOD |= P8MOD_SCI1; /* Set P8 for SCI1 mode */
S1MOD = SnMOD_INI; /* Set data format */
S1BAUR = BAUD_62_5; /* Set baud rate */
/*** Interrupt related settings ***/
ISIO1TXCR = (unsigned char)7; /* Set SIO1 transmit interrupt priority level */
ISIO1RXCR = SioILEVEL; /* Set SIO1 receive interrupt priority level */
SI03SEL &= ~ISR1; /* Select receive-finished interrupt */
SI03MASK &= ~T1MASK; /* Disable SIO1 transmit interrupt request */
SI03MASK |= R1MASK; /* Enable SIO1 receive interrupt request */
/*** Starting transmission/reception ***/
S1TCNT |= TEN; /* Enable transmission */
S1RCNT |= REN; /* Enable reception */
}
/*""FUNC COMMENT""*******************************************************
* Function name: SIO2_init()
*-----------------------------------------------------------------------
* Description : Sets SIO2 for 8-bit UART
* : - Reception by interrupt
* : - Program transmission
*-----------------------------------------------------------------------
* Argument : -
*-----------------------------------------------------------------------
* Returns : -
*-----------------------------------------------------------------------
* Notes : Port input function must be enabled
* : Must be executed while interrupts are disabled
* : Interrupt priority levels are common to both SIO2,3 transmission and reception
*""FUNC COMMENT END""***************************************************/
void SIO2_init( void)
{
/*** Setting transfer mode */
S2RCNT = 0x00; /* Disable reception */
S2TCNT = SnTCNT_INI; /* f(BCLK) and disable transmission */
P17MOD |= P17MOD_SCI2; /* Set P17 for SCI2 mode */
S2MOD = SnMOD_INI; /* Set data format */
S2BAUR = BAUD_62_5; /* Set baud rate */
/*** Interrupt related settings ***/
ISIO23CR = SioILEVEL; /* Set SIO2,3 transmission and reception interrupt priority level */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -