summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/usart.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/atsam/libraries/libchip/source/usart.c')
-rw-r--r--c/src/lib/libbsp/arm/atsam/libraries/libchip/source/usart.c466
1 files changed, 0 insertions, 466 deletions
diff --git a/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/usart.c b/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/usart.c
deleted file mode 100644
index f438d311b1..0000000000
--- a/c/src/lib/libbsp/arm/atsam/libraries/libchip/source/usart.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/* ---------------------------------------------------------------------------- */
-/* Atmel Microcontroller Software Support */
-/* SAM Software Package License */
-/* ---------------------------------------------------------------------------- */
-/* Copyright (c) 2015, Atmel Corporation */
-/* */
-/* All rights reserved. */
-/* */
-/* Redistribution and use in source and binary forms, with or without */
-/* modification, are permitted provided that the following condition is met: */
-/* */
-/* - Redistributions of source code must retain the above copyright notice, */
-/* this list of conditions and the disclaimer below. */
-/* */
-/* Atmel's name may not be used to endorse or promote products derived from */
-/* this software without specific prior written permission. */
-/* */
-/* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR */
-/* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE */
-/* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, */
-/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
-/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
-/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
-/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
-/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
-/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
-/* ---------------------------------------------------------------------------- */
-
-/**
- * \file
- *
- * Implementation of USART (Universal Synchronous Asynchronous Receiver
- * Transmitter) controller.
- *
- */
-/*------------------------------------------------------------------------------
- * Headers
- *-----------------------------------------------------------------------------*/
-#include "chip.h"
-
-#include <assert.h>
-#include <string.h>
-
-/*----------------------------------------------------------------------------
- * Local definitions
- *----------------------------------------------------------------------------*/
-
-
-/*------------------------------------------------------------------------------
- * Exported functions
- *-----------------------------------------------------------------------------*/
-
-/**
- * \brief Configures an USART baudrate.
- *
- *
- * \param pUsart Pointer to the USART peripheral to configure.
- * \param baudrate Baudrate at which the USART should operate (in Hz).
- * \param masterClock Frequency of the system master clock (in Hz).
- */
-void USART_SetBaudrate(Usart *pUsart,
- uint8_t OverSamp,
- uint32_t baudrate,
- uint32_t masterClock)
-{
- unsigned int CD, FP, BaudError, ActualBaudRate;
- /* Configure baudrate*/
- BaudError = 10;
- OverSamp = 0;
-#ifdef __rtems__
- CD = 0;
- FP = 0;
-#endif /* __rtems__ */
-
- /*Asynchronous*/
- if ((pUsart->US_MR & US_MR_SYNC) == 0) {
- /* 7816 mode */
- if (((pUsart->US_MR & US_MR_USART_MODE_IS07816_T_0)
- == US_MR_USART_MODE_IS07816_T_0)
- || ((pUsart->US_MR & US_MR_USART_MODE_IS07816_T_1)
- == US_MR_USART_MODE_IS07816_T_1)) {
- /* Define the baud rate divisor register */
- /* CD = MCK / SCK */
- /* SCK = FIDI x BAUD = 372 x 9600 */
- /* BOARD_MCK */
- /* CD = MCK/(FIDI x BAUD) = 150000000 / (372x9600) = 42 */
- CD = masterClock / (pUsart->US_FIDI * baudrate);
- FP = 0;
- } else {
- while (BaudError > 5) {
- CD = (masterClock / (baudrate * 8 * (2 - OverSamp)));
- FP = ((masterClock / (baudrate * (2 - OverSamp))) - CD * 8);
- ActualBaudRate = (masterClock / (CD * 8 + FP)) / (2 - OverSamp);
- BaudError = (100 - ((baudrate * 100 / ActualBaudRate)));
-
- if (BaudError > 5) {
- OverSamp++;
-
- if (OverSamp >= 2) {
- TRACE_ERROR("Canont set this baudrate \n\r");
- break;
- }
- }
- }
- }
- }
-
- /*Synchronous SPI */
- if ((pUsart->US_MR & US_MR_USART_MODE_SPI_MASTER)
- == US_MR_USART_MODE_SPI_MASTER
- || ((pUsart->US_MR & US_MR_SYNC) == US_MR_SYNC)) {
- if ((pUsart->US_MR & US_MR_USCLKS_Msk) == US_MR_USCLKS_MCK) {
- CD = masterClock / baudrate;
- FP = ((masterClock / baudrate) - CD);
- }
- }
-
- pUsart->US_BRGR = (US_BRGR_CD(CD) | US_BRGR_FP(FP));
-
- /* Configure OverSamp*/
- pUsart->US_MR |= (OverSamp << 19);
-}
-
-/**
- * \brief Configures an USART peripheral with the specified parameters.
- *
- *
- * \param pUsart Pointer to the USART peripheral to configure.
- * \param mode Desired value for the USART mode register (see the datasheet).
- * \param baudrate Baudrate at which the USART should operate (in Hz).
- * \param masterClock Frequency of the system master clock (in Hz).
- */
-void USART_Configure(Usart *pUsart,
- uint32_t mode,
- uint32_t baudrate,
- uint32_t masterClock)
-{
-
- /* Reset and disable receiver & transmitter*/
- pUsart->US_CR = US_CR_RSTRX | US_CR_RSTTX
- | US_CR_RXDIS | US_CR_TXDIS | US_CR_RSTSTA;
- pUsart->US_IDR = 0xFFFFFFFF;
-
- pUsart->US_MR = mode;
- /* Configure baudrate*/
- USART_SetBaudrate(pUsart, 0, baudrate, masterClock);
-
- /* Enable receiver and transmitter */
- pUsart->US_CR = US_CR_RXEN | US_CR_TXEN;
-
- /* Disable buffering for printf(). */
-#if (defined (__GNUC__) && !defined (__SAMBA__))
- setvbuf(stdout, (char *)NULL, _IONBF, 0);
-#endif
-
-}
-/**
- * \brief Enables or disables the transmitter of an USART peripheral.
- *
- *
- * \param pUsart Pointer to an USART peripheral
- * \param enabled If true, the transmitter is enabled; otherwise it is
- * disabled.
- */
-void USART_SetTransmitterEnabled(Usart *pUsart, uint8_t enabled)
-{
- if (enabled)
- pUsart->US_CR = US_CR_TXEN;
- else
- pUsart->US_CR = US_CR_TXDIS;
-}
-
-/**
- * \brief Disables the Receiver of an USART peripheral.
- *
- * \param pUsart Pointer to an USART peripheral
- */
-void USART_DisableRx(Usart *pUsart)
-{
-
- pUsart->US_CR = US_CR_RXDIS;
-}
-
-/**
- * \brief Disables the transmitter of an USART peripheral.
- *
- * \param pUsart Pointer to an USART peripheral
- */
-void USART_DisableTx(Usart *pUsart)
-{
- pUsart->US_CR = US_CR_TXDIS;
-}
-
-/**
- * \brief Enables the Receiver of an USART peripheral.
- *
- * \param pUsart Pointer to an USART peripheral
- */
-void USART_EnableRx(Usart *pUsart)
-{
-
- pUsart->US_CR = US_CR_RXEN;
-}
-
-/**
- * \brief Enables the transmitter of an USART peripheral
- *
- * \param pUsart Pointer to an USART peripheral
- */
-void USART_EnableTx(Usart *pUsart)
-{
- pUsart->US_CR = US_CR_TXEN;
-}
-/**
- * \brief Resets or disables the Receiver of an USART peripheral.
- *
- *
- * \param pUsart Pointer to an USART peripheral
- */
-void USART_ResetRx(Usart *pUsart)
-{
-
- pUsart->US_CR = US_CR_RSTRX | US_CR_RXDIS;
-}
-
-/**
- * \brief resets and disables the transmitter of an USART peripheral.
- *
- *
- * \param pUsart Pointer to an USART peripheral
- */
-void USART_ResetTx(Usart *pUsart)
-{
- pUsart->US_CR = US_CR_RSTTX | US_CR_TXDIS;
-}
-/**
- * \brief Enables or disables the receiver of an USART peripheral
- *
- *
- * \param pUsart Pointer to an USART peripheral
- * \param enabled If true, the receiver is enabled; otherwise it is disabled.
- */
-void USART_SetReceiverEnabled(Usart *pUsart, uint8_t enabled)
-{
- if (enabled)
- pUsart->US_CR = US_CR_RXEN;
- else
- pUsart->US_CR = US_CR_RXDIS;
-}
-
-/**
- * \brief Enables or disables the Request To Send (RTS) of an USART peripheral
- *
- *
- * \param pUsart Pointer to an USART peripheral
- * \param enabled If true, the RTS is enabled (0); otherwise it is disabled.
- */
-void USART_SetRTSEnabled(Usart *pUsart, uint8_t enabled)
-{
- if (enabled)
- pUsart->US_CR = US_CR_RTSEN;
- else
- pUsart->US_CR = US_CR_RTSDIS;
-}
-
-/**
- * \brief Sends one packet of data through the specified USART peripheral. This
- * function operates synchronously, so it only returns when the data has been
- * actually sent.
- *
- *
- * \param pUsart Pointer to an USART peripheral.
- * \param data Data to send including 9nth bit and sync field if necessary (in
- * the same format as the US_THR register in the datasheet).
- * \param timeOut Time out value (0 = no timeout).
- */
-void USART_Write(Usart *pUsart, uint16_t data, volatile uint32_t timeOut)
-{
- if (timeOut == 0) {
- while ((pUsart->US_CSR & US_CSR_TXEMPTY) == 0);
- } else {
- while ((pUsart->US_CSR & US_CSR_TXEMPTY) == 0) {
- if (timeOut == 0) {
- TRACE_ERROR("USART_Write: Timed out.\n\r");
- return;
- }
-
- timeOut--;
- }
- }
-
- pUsart->US_THR = data;
-}
-
-/**
- * \brief Reads and return a packet of data on the specified USART peripheral.
- * This function operates asynchronously, so it waits until some data has been
- * received.
- *
- * \param pUsart Pointer to an USART peripheral.
- * \param timeOut Time out value (0 -> no timeout).
- */
-uint16_t USART_Read(Usart *pUsart, volatile uint32_t timeOut)
-{
- if (timeOut == 0) {
- while ((pUsart->US_CSR & US_CSR_RXRDY) == 0);
- } else {
- while ((pUsart->US_CSR & US_CSR_RXRDY) == 0) {
- if (timeOut == 0) {
- TRACE_ERROR("USART_Read: Timed out.\n\r");
- return 0;
- }
-
- timeOut--;
- }
- }
-
- return pUsart->US_RHR;
-}
-
-/**
- * \brief Returns 1 if some data has been received and can be read from an
- * USART; otherwise returns 0.
- *
- * \param pUsart Pointer to an USART instance.
- */
-uint8_t USART_IsDataAvailable(Usart *pUsart)
-{
- if ((pUsart->US_CSR & US_CSR_RXRDY) != 0)
- return 1;
- else
- return 0;
-}
-
-/**
- * \brief Sends one packet of data through the specified USART peripheral. This
- * function operates synchronously, so it only returns when the data has been
- * actually sent.
- *
- * \param pUsart Pointer to an USART peripheral.
- * \param c Character to send
- */
-void USART_PutChar(Usart *pUsart, uint8_t c)
-{
- /* Wait for the transmitter to be ready*/
- while ((pUsart->US_CSR & US_CSR_TXEMPTY) == 0);
-
- /* Send character*/
- pUsart->US_THR = c;
-
- /* Wait for the transfer to complete*/
- while ((pUsart->US_CSR & US_CSR_TXEMPTY) == 0);
-}
-
-/**
- * \brief Return 1 if a character can be read in USART
- * \param pUsart Pointer to an USART peripheral.
- */
-uint32_t USART_IsRxReady(Usart *pUsart)
-{
- return (pUsart->US_CSR & US_CSR_RXRDY);
-}
-
-/**
- * \brief Get present status
- * \param pUsart Pointer to an USART peripheral.
- */
-uint32_t USART_GetStatus(Usart *pUsart)
-{
- return pUsart->US_CSR;
-}
-
-/**
- * \brief Enable interrupt
- * \param pUsart Pointer to an USART peripheral.
- * \param mode Interrupt mode.
- */
-void USART_EnableIt(Usart *pUsart, uint32_t mode)
-{
- pUsart->US_IER = mode;
-}
-
-/**
- * \brief Disable interrupt
- * \param pUsart Pointer to an USART peripheral.
- * \param mode Interrupt mode.
- */
-void USART_DisableIt(Usart *pUsart, uint32_t mode)
-{
- pUsart->US_IDR = mode;
-}
-
-/**
- * \brief Return interrupt mask
- * \param pUsart Pointer to an USART peripheral.
- */
-uint32_t USART_GetItMask(Usart *pUsart)
-{
- return pUsart->US_IMR;
-}
-
-/**
- * \brief Reads and returns a character from the USART.
- *
- * \note This function is synchronous (i.e. uses polling).
- * \param pUsart Pointer to an USART peripheral.
- * \return Character received.
- */
-uint8_t USART_GetChar(Usart *pUsart)
-{
- while ((pUsart->US_CSR & US_CSR_RXRDY) == 0);
-
- return pUsart->US_RHR;
-}
-
-/**
- * \brief Enable Rx Timeout for USART.
- *
- * \param pUsart Pointer to an USART peripheral.
- * \param Timeout Timeout value
- * \return None
- */
-void USART_EnableRecvTimeOut(Usart *pUsart, uint32_t Timeout)
-{
- if (Timeout <= MAX_RX_TIMEOUT)
- pUsart->US_RTOR = Timeout;
- else if (Timeout == 0) {
- TRACE_DEBUG("Timeout is disabled\n\r");
- } else {
- TRACE_INFO_WP("\n\r");
- TRACE_FATAL("Timeout value is out of range\n\r");
- }
-}
-
-/**
- * \brief Enable Tx Timeout for USART.
- *
- * \param pUsart Pointer to an USART peripheral.
- * \param TimeGaurd TimeGaurd value
- * \return None
- */
-void USART_EnableTxTimeGaurd(Usart *pUsart, uint32_t TimeGaurd)
-{
- if (((pUsart->US_MR & US_MR_USART_MODE_LON) && TimeGaurd <= 16777215) ||
- ((pUsart->US_MR & US_MR_USART_MODE_LON) && TimeGaurd <= 255))
- pUsart->US_TTGR = TimeGaurd;
- else
- TRACE_ERROR(" TimeGaurd Value is too big for mode");
-}
-/**
- * \brief Acknowledge Rx timeout and sets to Idle or periodic repetitive state.
- *
- * \param pUsart Pointer to an USART peripheral.
- * \param Periodic If timeout is periodic or should wait for new char
- * \return None
- */
-void USART_AcknowledgeRxTimeOut(Usart *pUsart, uint8_t Periodic)
-{
- if (Periodic) {
- pUsart->US_CR = US_CR_RETTO; // Restart timeout timer
- } else {
- // Puts USARt in Idle mode and waits for a char after timeout
- pUsart->US_CR = US_CR_STTTO;
- }
-}