/*********************************************************************************************************************** | |
* DISCLAIMER | |
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products. | |
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all | |
* applicable laws, including copyright laws. | |
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIESREGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED | |
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
* NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY | |
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT, | |
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR | |
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. | |
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability | |
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the | |
* following link: | |
* http://www.renesas.com/disclaimer | |
* | |
* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved. | |
***********************************************************************************************************************/ | |
/*********************************************************************************************************************** | |
* File Name : r_cg_scifa.c | |
* Version : Code Generator for RZ/T1 V1.00.00.09 [02 Mar 2015] | |
* Device(s) : R7S910018CBG | |
* Tool-Chain : GCCARM | |
* Description : This file implements device driver for SCIF module. | |
* Creation Date: 19/04/2015 | |
***********************************************************************************************************************/ | |
/*********************************************************************************************************************** | |
Pragma directive | |
***********************************************************************************************************************/ | |
/* Start user code for pragma. Do not edit comment generated here */ | |
/* End user code. Do not edit comment generated here */ | |
/*********************************************************************************************************************** | |
Includes | |
***********************************************************************************************************************/ | |
#include "r_cg_macrodriver.h" | |
#include "r_cg_scifa.h" | |
/* Start user code for include. Do not edit comment generated here */ | |
/* End user code. Do not edit comment generated here */ | |
#include "r_cg_userdefine.h" | |
/*********************************************************************************************************************** | |
Global variables and functions | |
***********************************************************************************************************************/ | |
const uint8_t * gp_scifa2_tx_address; /* SCIFA2 transmit buffer address */ | |
uint16_t g_scifa2_tx_count; /* SCIFA2 transmit data number */ | |
uint8_t * gp_scifa2_rx_address; /* SCIFA2 receive buffer address */ | |
uint16_t g_scifa2_rx_count; /* SCIFA2 receive data number */ | |
uint16_t g_scifa2_rx_length; /* SCIFA2 receive data length */ | |
/* Start user code for global. Do not edit comment generated here */ | |
/* End user code. Do not edit comment generated here */ | |
/*********************************************************************************************************************** | |
* Function Name: R_SCIFA2_Create | |
* Description : This function initializes SCIFA2. | |
* Arguments : None | |
* Return Value : None | |
***********************************************************************************************************************/ | |
void R_SCIFA2_Create(void) | |
{ | |
volatile uint16_t dummy; | |
uint16_t w_count; | |
/* Cancel SCIFA2 module stop state */ | |
MSTP(SCIFA2) = 0U; | |
/* Disable TXIF2 interrupt */ | |
VIC.IEC3.LONG = 0x00008000UL; | |
/* Disable RXIF2 interrupt */ | |
VIC.IEC3.LONG = 0x00004000UL; | |
/* Disable BRIF2 interrupt */ | |
VIC.IEC3.LONG = 0x00002000UL; | |
/* Disable DRIF2 interrupt */ | |
VIC.IEC3.LONG = 0x00010000UL; | |
/* Clear transmit/receive enable bits */ | |
SCIFA2.SCR.BIT.TE = 0U; | |
SCIFA2.SCR.BIT.RE = 0U; | |
/* Reset transmit/receive FIFO data register operation */ | |
SCIFA2.FCR.BIT.TFRST = 1U; | |
SCIFA2.FCR.BIT.RFRST = 1U; | |
/* Read and clear status flags */ | |
dummy = SCIFA2.FSR.WORD; | |
/* Remove compiler warnings. */ | |
( void ) dummy; | |
SCIFA2.FSR.WORD = 0x00U; | |
dummy = (uint16_t) SCIFA2.LSR.BIT.ORER; | |
/* Remove compiler warnings. */ | |
( void ) dummy; | |
SCIFA2.LSR.BIT.ORER = 0U; | |
/* Set clock enable bits */ | |
SCIFA2.SCR.WORD = _SCIF_INTERNAL_SCK_UNUSED; | |
/* Set transmission/reception format */ | |
SCIFA2.SMR.WORD = _SCIF_CLOCK_SERICLK_4 | _SCIF_STOP_1 | _SCIF_PARITY_DISABLE | _SCIF_DATA_LENGTH_8 | | |
_SCIF_ASYNCHRONOUS_MODE; | |
SCIFA2.SEMR.BYTE = _SCIF_16_BASE_CLOCK | _SCIF_NOISE_FILTER_ENABLE | _SCIF_DATA_TRANSFER_LSB_FIRST | | |
_SCIF_BAUDRATE_SINGLE; | |
/* Clear modulation duty register select */ | |
SCIFA2.SEMR.BIT.MDDRS = 0U; | |
/* Set bit rate */ | |
SCIFA2.BRR_MDDR.BRR = 0x3CU; | |
/* Wait for at least 1-bit interval */ | |
for (w_count = 0U; w_count < _SCIF_1BIT_INTERVAL_2; w_count++) | |
{ | |
nop(); | |
} | |
/* Set FIFO trigger conditions */ | |
SCIFA2.FTCR.WORD = _SCIF_TX_FIFO_TRIGGER_NUM_0 | _SCIF_TX_TRIGGER_TFTC_VALID | _SCIF_RX_FIFO_TRIGGER_NUM_1 | | |
_SCIF_RX_TRIGGER_RFTC_VALID; | |
SCIFA2.FCR.WORD = _SCIF_LOOPBACK_DISABLE | _SCIF_MODEM_CONTROL_DISABLE; | |
/* Disable transmit/receive FIFO data register reset operation */ | |
SCIFA2.FCR.BIT.TFRST = 0U; | |
SCIFA2.FCR.BIT.RFRST = 0U; | |
/* Set TXIF2 interrupt priority */ | |
VIC.PRL111.LONG = _SCIF_PRIORITY_LEVEL2; | |
/* Set TXIF2 interrupt address */ | |
VIC.VAD111.LONG = (uint32_t)r_scifa2_txif2_interrupt_entry; | |
/* Set RXIF2 interrupt priority */ | |
VIC.PRL110.LONG = _SCIF_PRIORITY_LEVEL3; | |
/* Set RXIF2 interrupt address */ | |
VIC.VAD110.LONG = (uint32_t)r_scifa2_rxif2_interrupt_entry; | |
/* Set BRIF2 interrupt priority */ | |
VIC.PRL109.LONG = _SCIF_PRIORITY_LEVEL5; | |
/* Set BRIF2 interrupt address */ | |
VIC.VAD109.LONG = (uint32_t)r_scifa2_brif2_interrupt_entry; | |
/* Set DRIF2 interrupt priority */ | |
VIC.PRL112.LONG = _SCIF_PRIORITY_LEVEL4; | |
/* Set DRIF2 interrupt address */ | |
VIC.VAD112.LONG = (uint32_t)r_scifa2_drif2_interrupt_entry; | |
} | |
/*********************************************************************************************************************** | |
* Function Name: R_SCIFA2_Start | |
* Description : This function starts SCIFA2. | |
* Arguments : None | |
* Return Value : None | |
***********************************************************************************************************************/ | |
void R_SCIFA2_Start(void) | |
{ | |
/* Enable TXIF2 interrupt */ | |
VIC.IEN3.LONG |= 0x00008000UL; | |
/* Enable RXIF2 interrupt */ | |
VIC.IEN3.LONG |= 0x00004000UL; | |
/* Enable BRIF2 interrupt */ | |
VIC.IEN3.LONG |= 0x00002000UL; | |
/* Enable DRIF2 interrupt */ | |
VIC.IEN3.LONG |= 0x00010000UL; | |
} | |
/*********************************************************************************************************************** | |
* Function Name: R_SCIFA2_Stop | |
* Description : This function stops SCIFA2. | |
* Arguments : None | |
* Return Value : None | |
***********************************************************************************************************************/ | |
void R_SCIFA2_Stop(void) | |
{ | |
/* Disable serial transmit */ | |
SCIFA2.SCR.BIT.TE = 0U; | |
/* Disable serial receive */ | |
SCIFA2.SCR.BIT.RE = 0U; | |
/* Disable TXI interrupt */ | |
SCIFA2.SCR.BIT.TIE = 0U; | |
/* Disable RXI and ERI interrupt */ | |
SCIFA2.SCR.BIT.RIE = 0U; | |
/* Disable TXIF2 interrupt */ | |
VIC.IEC3.LONG = 0x00008000UL; | |
/* Disable RXIF2 interrupt */ | |
VIC.IEC3.LONG = 0x00004000UL; | |
/* Disable BRIF2 interrupt */ | |
VIC.IEC3.LONG = 0x00002000UL; | |
/* Disable DRIF2 interrupt */ | |
VIC.IEC3.LONG = 0x00010000UL; | |
} | |
/*********************************************************************************************************************** | |
* Function Name: R_SCIFA2_Serial_Receive | |
* Description : This function receives SCIFA2 data. | |
* Arguments : rx_buf - | |
* receive buffer pointer (Not used when receive data handled by DMAC) | |
* rx_num - | |
* buffer size (Not used when receive data handled by DMAC) | |
* Return Value : status - | |
* MD_OK or MD_ARGERROR | |
***********************************************************************************************************************/ | |
MD_STATUS R_SCIFA2_Serial_Receive(uint8_t * rx_buf, uint16_t rx_num) | |
{ | |
MD_STATUS status = MD_OK; | |
if (rx_num < 1U) | |
{ | |
status = MD_ARGERROR; | |
} | |
else | |
{ | |
g_scifa2_rx_count = 0U; | |
g_scifa2_rx_length = rx_num; | |
gp_scifa2_rx_address = rx_buf; | |
SCIFA2.FTCR.BIT.RFTC = _SCIF_RX_TRIG_NUM_2; | |
SCIFA2.SCR.BIT.RE = 1U; | |
SCIFA2.SCR.BIT.RIE = 1U; | |
SCIFA2.SCR.BIT.REIE = 1U; | |
} | |
return (status); | |
} | |
/*********************************************************************************************************************** | |
* Function Name: R_SCIFA2_Serial_Send | |
* Description : This function transmits SCIFA2 data. | |
* Arguments : tx_buf - | |
* transfer buffer pointer (Not used when transmit data handled by DMAC) | |
* tx_num - | |
* buffer size (Not used when transmit data handled by DMAC) | |
* Return Value : status - | |
* MD_OK or MD_ARGERROR | |
***********************************************************************************************************************/ | |
MD_STATUS R_SCIFA2_Serial_Send(const uint8_t * tx_buf, uint16_t tx_num) | |
{ | |
MD_STATUS status = MD_OK; | |
if (tx_num < 1U) | |
{ | |
status = MD_ARGERROR; | |
} | |
else | |
{ | |
gp_scifa2_tx_address = tx_buf; | |
g_scifa2_tx_count = tx_num; | |
SCIFA2.SCR.BIT.TE = 1U; | |
SCIFA2.SCR.BIT.TIE = 1U; | |
} | |
return (status); | |
} | |
/* Start user code for adding. Do not edit comment generated here */ | |
/* End user code. Do not edit comment generated here */ |