summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/atsam/libraries/libboard/source/dbg_console.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/atsam/libraries/libboard/source/dbg_console.c')
-rw-r--r--c/src/lib/libbsp/arm/atsam/libraries/libboard/source/dbg_console.c564
1 files changed, 0 insertions, 564 deletions
diff --git a/c/src/lib/libbsp/arm/atsam/libraries/libboard/source/dbg_console.c b/c/src/lib/libbsp/arm/atsam/libraries/libboard/source/dbg_console.c
deleted file mode 100644
index 852cd4f90d..0000000000
--- a/c/src/lib/libbsp/arm/atsam/libraries/libboard/source/dbg_console.c
+++ /dev/null
@@ -1,564 +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
- *
- * Implements UART console.
- *
- */
-
-/*----------------------------------------------------------------------------
- * Headers
- *----------------------------------------------------------------------------*/
-
-#ifndef __rtems__
-#include "board.h"
-#else /* __rtems__ */
-#include <chip.h>
-#include <include/dbg_console.h>
-#endif /* __rtems__ */
-
-#include <stdio.h>
-#include <stdint.h>
-
-/*----------------------------------------------------------------------------
- * Definitions
- *----------------------------------------------------------------------------*/
-
-/** Console baud rate always using 115200. */
-
-
-#ifndef __rtems__
-#define CONSOLE_BAUDRATE 115200
-
-/** EDBG used USART1 as the console, but LON support on USART1 only */
-#ifndef USART_LON
- #define CONSOLE_EDBG
-#endif
-
-#if defined CONSOLE_EDBG
- #define CONSOLE_ON_USART
-#else
- #define CONSOLE_ON_UART
-#endif
-
-#if defined CONSOLE_ON_UART
- #if defined SSC_AUDIO || defined USART_LON
- /** Usart Hw interface used by the console (UART4). */
- #define CONSOLE_UART UART4
-
- /** Pins description corresponding to Rxd,Txd, (UART pins) */
- #define CONSOLE_PINS {PINS_UART4}
-
- #define CONSOLE_ID ID_UART4
- #else
- /** Usart Hw interface used by the console (UART0). */
- #define CONSOLE_UART UART0
-
- /** Pins description corresponding to Rxd,Txd, (UART pins) */
- #define CONSOLE_PINS {PINS_UART0}
-
- #define CONSOLE_ID ID_UART0
-
- #endif
-#endif
-
-#if defined CONSOLE_ON_USART
-
-/** USART1 pin RX */
-#define PIN_USART1_RXD_DBG \
- {PIO_PA21A_RXD1, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
-/** USART1 pin TX */
-#define PIN_USART1_TXD_DBG \
- {PIO_PB4D_TXD1, PIOB, ID_PIOB, PIO_PERIPH_D, PIO_DEFAULT}
-#define PINS_USART1 PIN_USART1_TXD_DBG, PIN_USART1_RXD_DBG
-
-/** Usart Hw interface used by the console (Usart0). */
-#define CONSOLE_Usart USART1
-
-/** Pins description corresponding to Rxd,Txd, (Usart pins) */
-#define CONSOLE_PINS {PINS_USART1}
-
-#define CONSOLE_ID ID_USART1
-#endif
-#else /* __rtems__ */
-#define CONSOLE_BAUDRATE ATSAM_CONSOLE_BAUD
-#if ATSAM_CONSOLE_DEVICE_TYPE == 1
- #define CONSOLE_ON_UART
- #if ATSAM_CONSOLE_DEVICE_INDEX == 4
- #define CONSOLE_UART UART4
- #define CONSOLE_ID ID_UART4
- #elif ATSAM_CONSOLE_DEVICE_INDEX == 3
- #define CONSOLE_UART UART3
- #define CONSOLE_ID ID_UART3
- #elif ATSAM_CONSOLE_DEVICE_INDEX == 2
- #define CONSOLE_UART UART2
- #define CONSOLE_ID ID_UART2
- #elif ATSAM_CONSOLE_DEVICE_INDEX == 1
- #define CONSOLE_UART UART1
- #define CONSOLE_ID ID_UART1
- #else
- #define CONSOLE_UART UART0
- #define CONSOLE_ID ID_UART0
- #endif
-#else
- #define CONSOLE_ON_USART
- #if ATSAM_CONSOLE_DEVICE_INDEX == 4
- #define CONSOLE_Usart USART4
- #define CONSOLE_ID ID_USART4
- #elif ATSAM_CONSOLE_DEVICE_INDEX == 3
- #define CONSOLE_Usart USART3
- #define CONSOLE_ID ID_USART3
- #elif ATSAM_CONSOLE_DEVICE_INDEX == 2
- #define CONSOLE_Usart USART2
- #define CONSOLE_ID ID_USART2
- #elif ATSAM_CONSOLE_DEVICE_INDEX == 1
- #define CONSOLE_Usart USART1
- #define CONSOLE_ID ID_USART1
- #else
- #define CONSOLE_Usart USART0
- #define CONSOLE_ID ID_USART0
- #endif
-#endif
-#endif /* __rtems__ */
-
-
-/*----------------------------------------------------------------------------
- * Variables
- *----------------------------------------------------------------------------*/
-
-#ifndef __rtems__
-/** Is Console Initialized. */
-static uint8_t _ucIsConsoleInitialized = 0;
-#else /* __rtems__ */
-#define _ucIsConsoleInitialized 1
-#endif /* __rtems__ */
-
-/**
- * \brief Configures an USART peripheral with the specified parameters.
- *
- * \param baudrate Baudrate at which the USART should operate (in Hz).
- * \param masterClock Frequency of the system master clock (in Hz).
- */
-extern void DBG_Configure(uint32_t baudrate, uint32_t masterClock)
-{
-
-#ifndef __rtems__
- const Pin pPins[] = CONSOLE_PINS;
-#endif /* __rtems__ */
-#if defined CONSOLE_ON_UART
- Uart *pUart = CONSOLE_UART;
- /* Configure PIO */
-#ifndef __rtems__
- PIO_Configure(pPins, PIO_LISTSIZE(pPins));
-#endif /* __rtems__ */
-
- // Reset & disable receiver and transmitter, disable interrupts
- pUart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RSTSTA;
- pUart->UART_IDR = 0xFFFFFFFF;
- PMC_EnablePeripheral(CONSOLE_ID);
- pUart->UART_BRGR = (masterClock / baudrate) / 16;
- // Configure mode register
- pUart->UART_MR
- = (UART_MR_CHMODE_NORMAL | UART_MR_PAR_NO
- | UART_MR_BRSRCCK_PERIPH_CLK);
- // Enable receiver and transmitter
- pUart->UART_CR = UART_CR_RXEN | UART_CR_TXEN;
-#endif
-
-#if defined CONSOLE_ON_USART
- Usart *pUsart = CONSOLE_Usart;
- // Disable the MATRIX registers write protection
-#ifndef __rtems__
- MATRIX->MATRIX_WPMR = MATRIX_WPMR_WPKEY_PASSWD;
- MATRIX->CCFG_SYSIO |= CCFG_SYSIO_SYSIO4;
-
- PIO_Configure(pPins, PIO_LISTSIZE(pPins));
-#endif /* __rtems__ */
-
- // Reset & disable receiver and transmitter, disable interrupts
- pUsart->US_CR = US_CR_RSTRX | US_CR_RSTTX | US_CR_RSTSTA;
- pUsart->US_IDR = 0xFFFFFFFF;
- PMC_EnablePeripheral(CONSOLE_ID);
- pUsart->US_BRGR = (masterClock / baudrate) / 16;
-
- // Configure mode register
- pUsart->US_MR
- = (US_MR_USART_MODE_NORMAL | US_MR_PAR_NO | US_MR_USCLKS_MCK
- | US_MR_CHRL_8_BIT);
-
- // Enable receiver and transmitter
- pUsart->US_CR = US_CR_RXEN | US_CR_TXEN;
-#endif
-#ifndef __rtems__
- _ucIsConsoleInitialized = 1;
-
- /* Disable buffering for printf(). */
-#if (defined (__GNUC__) && !defined (__SAMBA__))
- setvbuf(stdout, (char *)NULL, _IONBF, 0);
-#endif
-#endif /* __rtems__ */
-}
-
-/**
- * \brief Outputs a character on the UART line.
- *
- * \note This function is synchronous (i.e. uses polling).
- * \param c Character to send.
- */
-extern void DBG_PutChar(uint8_t c)
-{
-#if defined CONSOLE_ON_UART
- Uart *pUart = CONSOLE_UART;
-
- if (!_ucIsConsoleInitialized)
- DBG_Configure(CONSOLE_BAUDRATE, BOARD_MCK);
-
- // Wait for the transmitter to be ready
- while ((pUart->UART_SR & UART_SR_TXEMPTY) == 0);
-
- // Send character
- pUart->UART_THR = c;
-
- // Wait for the transfer to complete
- while ((pUart->UART_SR & UART_SR_TXEMPTY) == 0);
-
-#endif
-
-#if defined CONSOLE_ON_USART
- Usart *pUsart = CONSOLE_Usart;
-
- if (!_ucIsConsoleInitialized)
- DBG_Configure(CONSOLE_BAUDRATE, BOARD_MCK);
-
- // 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);
-
-#endif
-}
-
-/**
- * \brief Input a character from the UART line.
- *
- * \note This function is synchronous
- * \return character received.
- */
-extern uint32_t DBG_GetChar(void)
-{
-#if defined CONSOLE_ON_UART
- Uart *pUart = CONSOLE_UART;
-
- if (!_ucIsConsoleInitialized)
- DBG_Configure(CONSOLE_BAUDRATE, BOARD_MCK);
-
- while ((pUart->UART_SR & UART_SR_RXRDY) == 0);
-
- return pUart->UART_RHR;
-#endif
-
-#if defined CONSOLE_ON_USART
- Usart *pUsart = CONSOLE_Usart;
-
- if (!_ucIsConsoleInitialized)
- DBG_Configure(CONSOLE_BAUDRATE, BOARD_MCK);
-
- while ((pUsart->US_CSR & US_CSR_RXRDY) == 0);
-
- return pUsart->US_RHR;
-#endif
-}
-
-/**
- * \brief Check if there is Input from UART line.
- *
- * \return true if there is Input.
- */
-extern uint32_t DBG_IsRxReady(void)
-{
-#if defined CONSOLE_ON_UART
- Uart *pUart = CONSOLE_UART;
-
- if (!_ucIsConsoleInitialized)
- DBG_Configure(CONSOLE_BAUDRATE, BOARD_MCK);
-
- return (pUart->UART_SR & UART_SR_RXRDY);
-#endif
-
-#if defined CONSOLE_ON_USART
- Usart *pUsart = CONSOLE_Usart;
-
- if (!_ucIsConsoleInitialized)
- DBG_Configure(CONSOLE_BAUDRATE, BOARD_MCK);
-
- return (pUsart->US_CSR & US_CSR_RXRDY);
-#endif
-}
-
-#ifndef __rtems__
-/**
- * Displays the content of the given frame on the UART0.
- *
- * \param pucFrame Pointer to the frame to dump.
- * \param dwSize Buffer size in bytes.
- */
-extern void DBG_DumpFrame(uint8_t *pucFrame, uint32_t dwSize)
-{
- uint32_t dw;
-
- for (dw = 0; dw < dwSize; dw++)
- printf("%02X ", pucFrame[dw]);
-
- printf("\n\r");
-}
-
-/**
- * Displays the content of the given buffer on the UART0.
- *
- * \param pucBuffer Pointer to the buffer to dump.
- * \param dwSize Buffer size in bytes.
- * \param dwAddress Start address to display
- */
-extern void DBG_DumpMemory(uint8_t *pucBuffer, uint32_t dwSize,
- uint32_t dwAddress)
-{
- uint32_t i;
- uint32_t j;
- uint32_t dwLastLineStart;
- uint8_t *pucTmp;
-
- for (i = 0; i < (dwSize / 16); i++) {
- printf("0x%08X: ", (unsigned int)(dwAddress + (i * 16)));
- pucTmp = (uint8_t *)&pucBuffer[i * 16];
-
- for (j = 0; j < 4; j++) {
- printf("%02X%02X%02X%02X ",
- pucTmp[0], pucTmp[1], pucTmp[2], pucTmp[3]);
- pucTmp += 4;
- }
-
- pucTmp = (uint8_t *)&pucBuffer[i * 16];
-
- for (j = 0; j < 16; j++)
- DBG_PutChar(*pucTmp++);
-
- printf("\n\r");
- }
-
- if ((dwSize % 16) != 0) {
- dwLastLineStart = dwSize - (dwSize % 16);
-
- printf("0x%08X: ", (unsigned int)(dwAddress + dwLastLineStart));
-
- for (j = dwLastLineStart; j < dwLastLineStart + 16; j++) {
- if ((j != dwLastLineStart) && (j % 4 == 0))
- printf(" ");
-
- if (j < dwSize)
- printf("%02X", pucBuffer[j]);
- else
- printf(" ");
- }
-
- printf(" ");
-
- for (j = dwLastLineStart; j < dwSize; j++)
- DBG_PutChar(pucBuffer[j]);
-
- printf("\n\r");
- }
-}
-
-/**
- * Reads an integer
- *
- * \param pdwValue Pointer to a integer variable to contain the input value.
- *
- * \return success(1) or failure(0)
- */
-extern uint32_t DBG_GetInteger(int32_t *pdwValue)
-{
- uint8_t ucKey;
- uint8_t ucNum = 0;
- int32_t dwValue = 0;
- int32_t sign = 1;
-
- while (1) {
- ucKey = DBG_GetChar();
- DBG_PutChar(ucKey);
-
- if (((ucKey == '-') || (ucKey == '+')) && (ucNum == 0)) {
- if (ucKey == '-')
- sign = -1;
- else
- sign = 1;
-
- ucNum++;
- } else {
- if (ucKey >= '0' && ucKey <= '9') {
- dwValue = (dwValue * 10) + (ucKey - '0');
- ucNum++;
- } else {
- if (ucKey == 0x0D || ucKey == ' ') {
- if (ucNum == 0) {
- printf("\n\rWrite a number and press ENTER or SPACE!\n\r");
- return 0;
- } else {
- printf("\n\r");
- *pdwValue = dwValue * sign;
-
- return 1;
- }
- } else {
- printf("\n\r'%c' not a number or sign(+/-)!\n\r", ucKey);
- return 0;
- }
- }
- }
- }
-}
-
-/**
- * Reads an integer and check the value
- *
- * \param pdwValue Pointer to a integer variable to contain the input value.
- * \param dwMin Minimum value
- * \param dwMax Maximum value
- *
- * \return success(1) or failure(0)
- */
-extern uint32_t DBG_GetIntegerMinMax(int32_t *pdwValue, int32_t dwMin,
- int32_t dwMax)
-{
- int32_t dwValue = 0;
-
- if (DBG_GetInteger(&dwValue) == 0)
- return 0;
-
- if (dwValue < dwMin || dwValue > dwMax) {
- printf("\n\rThe number have to be between %d and %d\n\r",
- (int)dwMin, (int)dwMax);
-
- return 0;
- }
-
- printf("\n\r");
-
- *pdwValue = dwValue;
-
- return 1;
-}
-
-/**
- * Reads an hexadecimal number
- *
- * \param pdwValue Pointer to the uint32_t variable to contain the input value.
- */
-extern uint32_t DBG_GetHexa32(uint32_t *pdwValue)
-{
- uint8_t ucKey;
- uint32_t dw = 0;
- uint32_t dwValue = 0;
-
- for (dw = 0; dw < 8; dw++) {
- ucKey = DBG_GetChar();
- DBG_PutChar(ucKey);
-
- if (ucKey >= '0' && ucKey <= '9')
- dwValue = (dwValue * 16) + (ucKey - '0');
- else {
- if (ucKey >= 'A' && ucKey <= 'F')
- dwValue = (dwValue * 16) + (ucKey - 'A' + 10);
- else {
- if (ucKey >= 'a' && ucKey <= 'f')
- dwValue = (dwValue * 16) + (ucKey - 'a' + 10);
- else {
- printf("\n\rIt is not a hexadecimal character!\n\r");
-
- return 0;
- }
- }
- }
- }
-
- printf("\n\r");
- *pdwValue = dwValue;
-
- return 1;
-}
-
-#if defined __ICCARM__ /* IAR Ewarm 5.41+ */
-/**
- * \brief Outputs a character on the UART.
- *
- * \param c Character to output.
- *
- * \return The character that was output.
- */
-extern WEAK signed int putchar(signed int c)
-{
- DBG_PutChar(c);
-
- return c;
-}
-
-#endif // defined __ICCARM__
-extern WEAK int puts(const char *ptr)
-{
-
- for (; *ptr != 0; ptr++)
- DBG_PutChar(*ptr);
-
- return 0;
-
-}
-
-extern WEAK char *gets(char *ptr)
-{
- uint8_t ch = 0;
-
- while (ch != '\r') {
- ch = DBG_GetChar();
- DBG_PutChar(ch);
- *(ptr++) = ch;
- }
-
- *ptr = '\0';
- return 0;
-
-}
-
-
-#endif /* __rtems__ */