summaryrefslogtreecommitdiff
path: root/source/hal/platform/simple
diff options
context:
space:
mode:
Diffstat (limited to 'source/hal/platform/simple')
-rw-r--r--source/hal/platform/simple/CMakeLists.txt3
-rw-r--r--source/hal/platform/simple/include/platform_drivers.h36
-rw-r--r--source/hal/platform/simple/include/stubs/glcd.h12
-rw-r--r--source/hal/platform/simple/include/timer_simple_platform.h7
-rw-r--r--source/hal/platform/simple/source/platform_drivers.c45
-rw-r--r--source/hal/platform/simple/source/stubs_glcd.c9
-rw-r--r--source/hal/platform/simple/source/timer_simple_platform.c71
7 files changed, 160 insertions, 23 deletions
diff --git a/source/hal/platform/simple/CMakeLists.txt b/source/hal/platform/simple/CMakeLists.txt
index cd3a2bc..44c4089 100644
--- a/source/hal/platform/simple/CMakeLists.txt
+++ b/source/hal/platform/simple/CMakeLists.txt
@@ -72,7 +72,8 @@ target_include_directories(${PLATFORM_DRIVERS_TARGET}
target_sources(${PLATFORM_DRIVERS_TARGET}
PRIVATE
source/stubs_glcd.c
- source/timer_simple_platform.c)
+ source/timer_simple_platform.c
+ source/platform_drivers.c)
## Platform component: uart
target_sources(${PLATFORM_DRIVERS_TARGET}
diff --git a/source/hal/platform/simple/include/platform_drivers.h b/source/hal/platform/simple/include/platform_drivers.h
index 0fb092e..c9928c0 100644
--- a/source/hal/platform/simple/include/platform_drivers.h
+++ b/source/hal/platform/simple/include/platform_drivers.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,18 +15,36 @@
* limitations under the License.
*/
-#ifndef PLATFORM_DRIVER_H
-#define PLATFORM_DRIVER_H
+#ifndef PLATFORM_DRIVERS_H
+#define PLATFORM_DRIVERS_H
#include "log_macros.h" /* Logging related helpers. */
/* Platform components */
-#include "uart_stdout.h" /* stdout over UART. */
-#include "stubs/glcd.h" /* LCD stubs to support use cases that use LCD */
+#include "stubs/glcd.h" /* LCD stubs to support use cases that use LCD */
#include "timer_simple_platform.h" /* timer implementation */
+#include "cmsis.h" /* For CPU related defintiions */
-#include "cmsis.h" /* CPU device specific header file */
-#include "peripheral_memmap.h" /* peripheral memory map definitions */
-#include "peripheral_irqs.h" /* IRQ numbers for the platform */
+/** Platform definitions. TODO: These should be removed. */
+#include "peripheral_memmap.h" /* Peripheral memory map definitions. */
+#include "peripheral_irqs.h" /* IRQ numbers for this platform. */
-#endif /* PLATFORM_DRIVER_H */
+/**
+ * @brief Initialises the platform components.
+ * @return 0 if successful, error code otherwise.
+ */
+int platform_init(void);
+
+/**
+ * @brief Teardown for platform components.
+ */
+void platform_release(void);
+
+/**
+ * @brief Sets the platform name.
+ * @param[out] name Name of the platform to be set
+ * @param[in] size Size of the input buffer
+ */
+void platform_name(char* name, size_t size);
+
+#endif /* PLATFORM_DRIVERS_H */
diff --git a/source/hal/platform/simple/include/stubs/glcd.h b/source/hal/platform/simple/include/stubs/glcd.h
index 5915f7d..b31938f 100644
--- a/source/hal/platform/simple/include/stubs/glcd.h
+++ b/source/hal/platform/simple/include/stubs/glcd.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,6 +17,8 @@
#ifndef STUBS_SIMPLE_PLATFORM_H
#define STUBS_SIMPLE_PLATFORM_H
+#include <stdint.h>
+
/****************************************************************************/
/* Definitions and stub functions for modules currently */
/* unavailable on this target platform */
@@ -58,10 +60,10 @@ void GLCD_Bitmap(unsigned int x, unsigned int y,
* @param[in] downsample_factor factor by which the image
* is downsampled by.
*/
-void GLCD_Image(void *data, const unsigned int width,
- const unsigned int height, const unsigned int channels,
- const unsigned int pos_x, const unsigned int pos_y,
- const unsigned int downsample_factor);
+void GLCD_Image(const void *data, const uint32_t width,
+ const uint32_t height, const uint32_t channels,
+ const uint32_t pos_x, const uint32_t pos_y,
+ const uint32_t downsample_factor);
/**
* @brief Clear display
diff --git a/source/hal/platform/simple/include/timer_simple_platform.h b/source/hal/platform/simple/include/timer_simple_platform.h
index 03d8245..4df22da 100644
--- a/source/hal/platform/simple/include/timer_simple_platform.h
+++ b/source/hal/platform/simple/include/timer_simple_platform.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -51,4 +51,9 @@ void start_cycle_counter(void);
*/
void stop_cycle_counter(void);
+/**
+ * @brief System tick interrupt handler.
+ **/
+void SysTick_Handler(void);
+
#endif /* TIMER_SIMPLE_PLATFORM_H */
diff --git a/source/hal/platform/simple/source/platform_drivers.c b/source/hal/platform/simple/source/platform_drivers.c
new file mode 100644
index 0000000..c92a964
--- /dev/null
+++ b/source/hal/platform/simple/source/platform_drivers.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2022 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.
+ */
+
+#include "platform_drivers.h"
+
+#include "uart_stdout.h"
+#include <string.h>
+
+int platform_init(void)
+{
+ SystemCoreClockUpdate(); /* From start up code */
+
+ /* UART init - will enable valid use of printf (stdout
+ * re-directed at this UART (UART0) */
+ UartStdOutInit();
+
+ info("%s: complete\n", __FUNCTION__);
+
+ /** TODO: Add ARM NPU and TA init here */
+ return 0;
+}
+
+void platform_release(void)
+{
+ __disable_irq();
+}
+
+void platform_name(char* name, size_t size)
+{
+ strncpy(name, DESIGN_NAME, size);
+}
diff --git a/source/hal/platform/simple/source/stubs_glcd.c b/source/hal/platform/simple/source/stubs_glcd.c
index 6b60dcd..d843cf4 100644
--- a/source/hal/platform/simple/source/stubs_glcd.c
+++ b/source/hal/platform/simple/source/stubs_glcd.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,9 +31,10 @@ void GLCD_Bitmap(unsigned int x, unsigned int y,
UNUSED(bitmap);
}
-void GLCD_Image(void *data, const unsigned int width, const unsigned int height,
- const unsigned int channels, const unsigned int pos_x,
- const unsigned int pos_y, const unsigned int downsample_factor)
+void GLCD_Image(const void *data, const uint32_t width,
+ const uint32_t height, const uint32_t channels,
+ const uint32_t pos_x, const uint32_t pos_y,
+ const uint32_t downsample_factor)
{
UNUSED(data);
UNUSED(pos_x);
diff --git a/source/hal/platform/simple/source/timer_simple_platform.c b/source/hal/platform/simple/source/timer_simple_platform.c
index 4bcd07b..3d28261 100644
--- a/source/hal/platform/simple/source/timer_simple_platform.c
+++ b/source/hal/platform/simple/source/timer_simple_platform.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,11 +16,26 @@
*/
#include "timer_simple_platform.h"
-#include "irqs.h"
-#include "log_macros.h"
+#include "log_macros.h" /* Logging macros */
+#include "cmsis.h" /* For CPU related defintiions */
#include <inttypes.h>
+static uint64_t cpu_cycle_count = 0; /* 64-bit cpu cycle counter */
+extern uint32_t SystemCoreClock; /* Expected to come from the cmsis-device lib */
+
+/**
+ * @brief Gets the system tick triggered cycle counter for the CPU.
+ * @return 64-bit counter value.
+ **/
+static uint64_t Get_SysTick_Cycle_Count(void);
+
+/**
+ * SysTick initialisation
+ */
+static int Init_SysTick(void);
+
+
base_time_counter get_time_counter(void)
{
base_time_counter t = {
@@ -56,3 +71,53 @@ void stop_cycle_counter(void)
{
/* Add any custom requirement for this platform here */
}
+
+
+void SysTick_Handler(void)
+{
+ /* Increment the cycle counter based on load value. */
+ cpu_cycle_count += SysTick->LOAD + 1;
+}
+
+/**
+ * Gets the current SysTick derived counter value
+ */
+static uint64_t Get_SysTick_Cycle_Count(void)
+{
+ uint32_t systick_val;
+
+ NVIC_DisableIRQ(SysTick_IRQn);
+ systick_val = SysTick->VAL & SysTick_VAL_CURRENT_Msk;
+ NVIC_EnableIRQ(SysTick_IRQn);
+
+ return cpu_cycle_count + (SysTick->LOAD - systick_val);
+}
+
+/**
+ * SysTick initialisation
+ */
+static int Init_SysTick(void)
+{
+ const uint32_t ticks_10ms = SystemCoreClock/100 + 1;
+ int err = 0;
+
+ /* Reset CPU cycle count value. */
+ cpu_cycle_count = 0;
+
+ /* Changing configuration for sys tick => guard from being
+ * interrupted. */
+ NVIC_DisableIRQ(SysTick_IRQn);
+
+ /* SysTick init - this will enable interrupt too. */
+ err = SysTick_Config(ticks_10ms);
+
+ /* Enable interrupt again. */
+ NVIC_EnableIRQ(SysTick_IRQn);
+
+ /* Wait for SysTick to kick off */
+ while (!err && !SysTick->VAL) {
+ __NOP();
+ }
+
+ return err;
+} \ No newline at end of file