diff --git a/os/common/ports/ARMCAx-TZ/chcore.h b/os/common/ports/ARMCAx-TZ/chcore.h index ca23c296f..e639ae9f4 100644 --- a/os/common/ports/ARMCAx-TZ/chcore.h +++ b/os/common/ports/ARMCAx-TZ/chcore.h @@ -39,7 +39,7 @@ /** * @brief This port supports a realtime counter. */ -#define PORT_SUPPORTS_RT FALSE +#define PORT_SUPPORTS_RT TRUE /** * @brief Natural alignment constant. @@ -508,6 +508,29 @@ static inline void port_wait_for_interrupt(void) { asm volatile ("wfi" : : : "memory"); } +/** + * @brief Returns the current value of the realtime counter. + * + * @return The realtime counter value. + */ +static inline rtcnt_t port_rt_get_counter_value(void) { + +#if ((ARM_CORE == ARM_CORE_CORTEX_A5) || (ARM_CORE == ARM_CORE_CORTEX_A9) || defined(__DOXYGEN__)) + + rtcnt_t cyc; + + __asm volatile("mrc p15, 0, %[p0], c9, c13, 0" : [p0] "=r" (cyc) :); + + return cyc; +#else +/* + * TODO develop same function for ARM_CORE_CORTEX_A8 + */ + return 0; + +#endif +} + #if CH_CFG_ST_TIMEDELTA > 0 #if PORT_USE_ALT_TIMER == FALSE #include "chcore_timer.h"