diff options
author | alexander <alexander.efremov@arm.com> | 2021-03-26 21:42:19 +0000 |
---|---|---|
committer | Kshitij Sisodia <kshitij.sisodia@arm.com> | 2021-03-29 16:29:55 +0100 |
commit | 3c79893217bc632c9b0efa815091bef3c779490c (patch) | |
tree | ad06b444557eb8124652b45621d736fa1b92f65d /source/application/hal/platforms/bare-metal/bsp/bsp-core | |
parent | 6ad6d55715928de72979b04194da1bdf04a4c51b (diff) | |
download | ml-embedded-evaluation-kit-3c79893217bc632c9b0efa815091bef3c779490c.tar.gz |
Opensource ML embedded evaluation kit21.03
Change-Id: I12e807f19f5cacad7cef82572b6dd48252fd61fd
Diffstat (limited to 'source/application/hal/platforms/bare-metal/bsp/bsp-core')
3 files changed, 358 insertions, 0 deletions
diff --git a/source/application/hal/platforms/bare-metal/bsp/bsp-core/include/bsp_core_log.h b/source/application/hal/platforms/bare-metal/bsp/bsp-core/include/bsp_core_log.h new file mode 100644 index 0000000..f049209 --- /dev/null +++ b/source/application/hal/platforms/bare-metal/bsp/bsp-core/include/bsp_core_log.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Arm Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef BSP_CORE_LOG_H +#define BSP_CORE_LOG_H + +#include "uart_stdout.h" /* UART for logging */ + +#include <stdio.h> + +#define LOG_LEVEL_TRACE 0 +#define LOG_LEVEL_DEBUG 1 +#define LOG_LEVEL_INFO 2 +#define LOG_LEVEL_WARN 3 +#define LOG_LEVEL_ERROR 4 + +#ifndef LOG_LEVEL +#define LOG_LEVEL LOG_LEVEL_INFO +#endif /*LOG_LEVEL*/ + +#if (LOG_LEVEL == LOG_LEVEL_TRACE) + #define trace(...) printf("[TRACE] "); printf(__VA_ARGS__) +#else + #define trace(...) +#endif /* LOG_LEVEL == LOG_LEVEL_TRACE */ + +#if (LOG_LEVEL <= LOG_LEVEL_DEBUG) + #define debug(...) printf("[DEBUG] "); printf(__VA_ARGS__) +#else + #define debug(...) +#endif /* LOG_LEVEL > LOG_LEVEL_TRACE */ + +#if (LOG_LEVEL <= LOG_LEVEL_INFO) + #define info(...) printf("[INFO] "); printf(__VA_ARGS__) +#else + #define info(...) +#endif /* LOG_LEVEL > LOG_LEVEL_DEBUG */ + +#if (LOG_LEVEL <= LOG_LEVEL_WARN) + #define warn(...) printf("[WARN] "); printf(__VA_ARGS__) +#else + #define warn(...) +#endif /* LOG_LEVEL > LOG_LEVEL_INFO */ + +#if (LOG_LEVEL <= LOG_LEVEL_ERROR) + #define printf_err(...) printf("[ERROR] "); printf(__VA_ARGS__) +#else + #define printf_err(...) +#endif /* LOG_LEVEL > LOG_LEVEL_INFO */ + +#define UNUSED(x) ((void)(x)) + +#endif /* BSP_CORE_LOG_H */ diff --git a/source/application/hal/platforms/bare-metal/bsp/bsp-core/include/uart_stdout.h b/source/application/hal/platforms/bare-metal/bsp/bsp-core/include/uart_stdout.h new file mode 100644 index 0000000..9c5fbcf --- /dev/null +++ b/source/application/hal/platforms/bare-metal/bsp/bsp-core/include/uart_stdout.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Arm Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef UART_STDOUT_H +#define UART_STDOUT_H + +#include <stdbool.h> + +/** + * @brief Initialised the UART block. + **/ +extern void UartStdOutInit(void); + +/** + * @brief Transmits a character over UART (blocking call). + * @param[in] my_ch Character to be transmitted. + * @return Character transmitted. + **/ +extern unsigned char UartPutc(unsigned char my_ch); + +/** + * @brief Receives a character from the UART block (blocking call). + * @return Character received. + **/ +extern unsigned char UartGetc(void); + +/** + * @brief Reads characters from the UART block until a line feed or + * carriage return terminates the function. NULL character + * also terminates the function, error is returned. + * @param[out] lp Characters read from the UART block. + * @param[in] len Character to be transmitted. + * @return true if successful, false otherwise. + **/ +extern bool GetLine(char *lp, unsigned int len); + +/** + * @brief Terminates UART simulation. This is useful when a Fixed + * Virtual Platform's session needs to be gracefully terminated. + * @param[in] code Terminating code displayed on the UART before the end of the simulation. + **/ +extern void UartEndSimulation(int code); + +#endif /* UART_STDOUT_H */ diff --git a/source/application/hal/platforms/bare-metal/bsp/bsp-core/retarget.c b/source/application/hal/platforms/bare-metal/bsp/bsp-core/retarget.c new file mode 100644 index 0000000..cf31a53 --- /dev/null +++ b/source/application/hal/platforms/bare-metal/bsp/bsp-core/retarget.c @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2021 Arm Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + +#include "uart_stdout.h" +#include "bsp_core_log.h" + +#if defined (MPS3_PLATFORM) +#include "smm_mps3.h" +#endif /* MPS3_PLATFORM */ + +#include <stdio.h> +#include <string.h> +#include <time.h> +#include <rt_misc.h> +#include <rt_sys.h> + + +/* Standard IO device handles. */ +#define STDIN 0x8001 +#define STDOUT 0x8002 +#define STDERR 0x8003 + +/* Standard IO device name defines. */ +const char __stdin_name[] = "STDIN"; +const char __stdout_name[] = "STDOUT"; +const char __stderr_name[] = "STDERR"; + +int fputc(int ch, FILE *f) +{ + UNUSED(f); + return (UartPutc(ch)); +} + +int fgetc(FILE *f) +{ + UNUSED(f); + return (UartPutc(UartGetc())); +} + +int ferror(FILE *f) +{ + UNUSED(f); + /* Your implementation of ferror */ + return EOF; +} + +void _ttywrch(int ch) +{ + UartPutc(ch); +} + +FILEHANDLE _sys_open(const char *name, int openmode) +{ + UNUSED(openmode); + + /* Register standard Input Output devices. */ + if (strcmp(name, "STDIN") == 0) + { + return (STDIN); + } + if (strcmp(name, "STDOUT") == 0) + { + return (STDOUT); + } + if (strcmp(name, "STDERR") == 0) + { + return (STDERR); + } + return (-1); +} + +int _sys_close(FILEHANDLE fh) +{ + if (fh > 0x8000) + { + return (0); + } + return (-1); +} + +int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned int len, int mode) +{ + UNUSED(mode); + if (fh == STDOUT || fh == STDERR ) + { + /* Standard Output device. */ + for (; len; len--) + { + UartPutc(*buf++); + } + return (0); + } + + if (fh > 0x8000) + { + return (-1); + } + return (-1); +} + +int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned int len, int mode) +{ + UNUSED(mode); + if (fh == STDIN) + { + /* Standard Input device. */ + for (; len; len--) + { + *buf++ = UartGetc(); + } + return (0); + } + + if (fh > 0x8000) + { + return (-1); + } + return (-1); +} + +int _sys_istty(FILEHANDLE fh) +{ + if (fh > 0x8000) + { + return (1); + } + return (0); +} + +int _sys_seek(FILEHANDLE fh, long pos) +{ + UNUSED(pos); + if (fh > 0x8000) + { + return (-1); + } + return (-1); +} + +int _sys_ensure(FILEHANDLE fh) +{ + if (fh > 0x8000) + { + return (-1); + } + return (-1); +} + +long _sys_flen(FILEHANDLE fh) +{ + if (fh > 0x8000) + { + return (0); + } + return (-1); +} + +int _sys_tmpnam(char *name, int sig, unsigned maxlen) +{ + UNUSED(name); + UNUSED(sig); + UNUSED(maxlen); + return (1); +} + +char *_sys_command_string(char *cmd, int len) +{ + UNUSED(len); + return (cmd); +} + +void _sys_exit(int return_code) +{ + UartEndSimulation(return_code); +} + +int system(const char *cmd) +{ + UNUSED(cmd); + return (0); +} + +time_t time(time_t *timer) +{ + time_t current; + +#if defined (MPS3_PLATFORM) + current = MPS3_FPGAIO->COUNTER; +#else /* MPS3_PLATFORM */ + current = 0; /* No RTC implementation available. */ +#endif /* MPS3_PLATFORM */ + + if (timer != NULL) { + *timer = current; + } + + return (current); +} + +#else /* #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) */ + +/******************************************************************************/ +/* Retarget functions for GNU Tools for ARM Embedded Processors */ +/******************************************************************************/ +#include <stdio.h> +#include <sys/stat.h> + +extern unsigned char UartPutc(unsigned char my_ch); + +__attribute__((used)) int _write(int fd, char *ptr, int len) +{ + size_t i; + for (i = 0; i < len; i++) + { + UartPutc(ptr[i]); /* call character output function. */ + } + return len; +} + +#endif /* #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) */ |