From fb75521c041370e045eb1812aa257d5ebd2ffd32 Mon Sep 17 00:00:00 2001 From: Evan Lojewski Date: Sat, 18 Jul 2020 10:34:49 -0600 Subject: debug: Enable the ape console on Port 0 (needed for SPI prints) and Port 1. (#92) --- libs/Network/include/Network.h | 6 ----- libs/printf/ape_console.h | 52 ++++++++++++++++++++++++++++++++++++++++++ libs/printf/ape_putchar.c | 48 ++++++++++++++++++++++++++++++++------ 3 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 libs/printf/ape_console.h (limited to 'libs') diff --git a/libs/Network/include/Network.h b/libs/Network/include/Network.h index c6aa260..ab621d6 100644 --- a/libs/Network/include/Network.h +++ b/libs/Network/include/Network.h @@ -54,12 +54,6 @@ #include #include -#ifdef CXX_SIMULATOR -#define VOLATILE -#else -#define VOLATILE volatile -#endif - typedef struct { /* Port Registers */ diff --git a/libs/printf/ape_console.h b/libs/printf/ape_console.h new file mode 100644 index 0000000..d2d80fd --- /dev/null +++ b/libs/printf/ape_console.h @@ -0,0 +1,52 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// @file ape_console.h +/// +/// @project +/// +/// @brief APE printf support Routines +/// +//////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// @copyright Copyright (c) 2020, Evan Lojewski +/// @cond +/// +/// All rights reserved. +/// +/// Redistribution and use in source and binary forms, with or without +/// modification, are permitted provided that the following conditions are met: +/// 1. Redistributions of source code must retain the above copyright notice, +/// this list of conditions and the following disclaimer. +/// 2. Redistributions in binary form must reproduce the above copyright notice, +/// this list of conditions and the following disclaimer in the documentation +/// and/or other materials provided with the distribution. +/// 3. Neither the name of the copyright holder nor the +/// names of its contributors may be used to endorse or promote products +/// derived from this software without specific prior written permission. +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +/// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +/// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +/// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. +/// @endcond +//////////////////////////////////////////////////////////////////////////////// + +#ifndef APE_CONSOLE_H +#define APE_CONSOLE_H + +#include + +bool reset_ape_console(void); + +#endif /* APE_CONSOLE_H */ diff --git a/libs/printf/ape_putchar.c b/libs/printf/ape_putchar.c index ea96a89..50fd5df 100644 --- a/libs/printf/ape_putchar.c +++ b/libs/printf/ape_putchar.c @@ -43,25 +43,59 @@ //////////////////////////////////////////////////////////////////////////////// #include -#include +#include #include +#include -void _putchar(char character) +static bool reset_ape_console_internal(VOLATILE SHM_t *port) +{ + if (port->RcpuWritePointer.r32 > sizeof(port->RcpuPrintfBuffer) || + port->RcpuReadPointer.r32 > sizeof(port->RcpuPrintfBuffer) || + port->RcpuHostReadPointer.r32 > sizeof(port->RcpuPrintfBuffer)) + { + port->RcpuWritePointer.r32 = 0; + port->RcpuReadPointer.r32 = 0; + port->RcpuHostReadPointer.r32 = 0; + + return true; + } + + return false; +} + +bool reset_ape_console(void) +{ + bool was_reset = false; + was_reset = was_reset || reset_ape_console_internal(&SHM); + was_reset = was_reset || reset_ape_console_internal(&SHM1); + + return was_reset; +} + + +static void ape_putchar(char character, VOLATILE SHM_t *port) { - uint32_t write_pointer = SHM.RcpuWritePointer.r32; + uint32_t write_pointer = port->RcpuWritePointer.r32; uint32_t word_pointer = write_pointer / 4; uint32_t byte_index = write_pointer % 4; uint32_t byte_mask = 0xFF << (byte_index * 8); - uint32_t new_word = SHM.RcpuPrintfBuffer[word_pointer].r32 & ~byte_mask; + uint32_t new_word = port->RcpuPrintfBuffer[word_pointer].r32 & ~byte_mask; new_word |= character << (byte_index * 8); - SHM.RcpuPrintfBuffer[word_pointer].r32 = new_word; + port->RcpuPrintfBuffer[word_pointer].r32 = new_word; write_pointer++; - if(write_pointer >= sizeof(SHM.RcpuPrintfBuffer)) + if(write_pointer >= sizeof(port->RcpuPrintfBuffer)) { write_pointer = 0; } - SHM.RcpuWritePointer.r32 = write_pointer; + port->RcpuWritePointer.r32 = write_pointer; +} + + +void _putchar(char character) +{ + ape_putchar(character, &SHM); + ape_putchar(character, &SHM1); } -- cgit v1.2.1