📄 csio.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 + -