blob: 724c3cb40ece5f6cdea32bb885f3d15f2992ed4b [file] [log] [blame]
/******************************************************************************
*
* Copyright (C) 2010 - 2015 Xilinx, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* XILINX BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/****************************************************************************/
/**
*
* @file xuartps_hw.c
* @addtogroup uartps_v3_5
* @{
*
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver Who Date Changes
* ----- ------ -------- ----------------------------------------------
* 1.00 drg/jz 01/12/10 First Release
* 1.05a hk 08/22/13 Added reset function
* 3.00 kvn 02/13/15 Modified code for MISRA-C:2012 compliance.
* </pre>
*
*****************************************************************************/
/***************************** Include Files ********************************/
#include "xuartps_hw.h"
/************************** Constant Definitions ****************************/
/***************** Macros (Inline Functions) Definitions ********************/
/************************** Function Prototypes ******************************/
/************************** Variable Definitions *****************************/
/****************************************************************************/
/**
*
* This function sends one byte using the device. This function operates in
* polled mode and blocks until the data has been put into the TX FIFO register.
*
* @param BaseAddress contains the base address of the device.
* @param Data contains the byte to be sent.
*
* @return None.
*
* @note None.
*
*****************************************************************************/
void XUartPs_SendByte(u32 BaseAddress, u8 Data)
{
/* Wait until there is space in TX FIFO */
while (XUartPs_IsTransmitFull(BaseAddress)) {
;
}
/* Write the byte into the TX FIFO */
XUartPs_WriteReg(BaseAddress, XUARTPS_FIFO_OFFSET, (u32)Data);
}
/****************************************************************************/
/**
*
* This function receives a byte from the device. It operates in polled mode
* and blocks until a byte has received.
*
* @param BaseAddress contains the base address of the device.
*
* @return The data byte received.
*
* @note None.
*
*****************************************************************************/
u8 XUartPs_RecvByte(u32 BaseAddress)
{
u32 RecievedByte;
/* Wait until there is data */
while (!XUartPs_IsReceiveData(BaseAddress)) {
;
}
RecievedByte = XUartPs_ReadReg(BaseAddress, XUARTPS_FIFO_OFFSET);
/* Return the byte received */
return (u8)RecievedByte;
}
/****************************************************************************/
/**
*
* This function resets UART
*
* @param BaseAddress contains the base address of the device.
*
* @return None
*
* @note None.
*
*****************************************************************************/
void XUartPs_ResetHw(u32 BaseAddress)
{
/* Disable interrupts */
XUartPs_WriteReg(BaseAddress, XUARTPS_IDR_OFFSET, XUARTPS_IXR_MASK);
/* Disable receive and transmit */
XUartPs_WriteReg(BaseAddress, XUARTPS_CR_OFFSET,
((u32)XUARTPS_CR_RX_DIS | (u32)XUARTPS_CR_TX_DIS));
/*
* Software reset of receive and transmit
* This clears the FIFO.
*/
XUartPs_WriteReg(BaseAddress, XUARTPS_CR_OFFSET,
((u32)XUARTPS_CR_TXRST | (u32)XUARTPS_CR_RXRST));
/* Clear status flags - SW reset wont clear sticky flags. */
XUartPs_WriteReg(BaseAddress, XUARTPS_ISR_OFFSET, XUARTPS_IXR_MASK);
/*
* Mode register reset value : All zeroes
* Normal mode, even parity, 1 stop bit
*/
XUartPs_WriteReg(BaseAddress, XUARTPS_MR_OFFSET,
XUARTPS_MR_CHMODE_NORM);
/* Rx and TX trigger register reset values */
XUartPs_WriteReg(BaseAddress, XUARTPS_RXWM_OFFSET,
XUARTPS_RXWM_RESET_VAL);
XUartPs_WriteReg(BaseAddress, XUARTPS_TXWM_OFFSET,
XUARTPS_TXWM_RESET_VAL);
/* Rx timeout disabled by default */
XUartPs_WriteReg(BaseAddress, XUARTPS_RXTOUT_OFFSET,
XUARTPS_RXTOUT_DISABLE);
/* Baud rate generator and dividor reset values */
XUartPs_WriteReg(BaseAddress, XUARTPS_BAUDGEN_OFFSET,
XUARTPS_BAUDGEN_RESET_VAL);
XUartPs_WriteReg(BaseAddress, XUARTPS_BAUDDIV_OFFSET,
XUARTPS_BAUDDIV_RESET_VAL);
/*
* Control register reset value -
* RX and TX are disable by default
*/
XUartPs_WriteReg(BaseAddress, XUARTPS_CR_OFFSET,
((u32)XUARTPS_CR_RX_DIS | (u32)XUARTPS_CR_TX_DIS |
(u32)XUARTPS_CR_STOPBRK));
}
/** @} */