diff options
author | Christian Mauderer <Christian.Mauderer@embedded-brains.de> | 2017-01-30 11:33:31 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-01-30 11:35:31 +0100 |
commit | 180107e971e1cc83570c38fe73d7077bd570ab21 (patch) | |
tree | eae69c1b5e17134f04b6d93e02bddd5cf0216c78 /c/src/lib/libbsp/arm/shared/armv7m/startup/armv7m-cpucounter.c | |
parent | rtems: Fix _Rate_monotonic_Renew_deadline() (diff) | |
download | rtems-180107e971e1cc83570c38fe73d7077bd570ab21.tar.bz2 |
bsps/arm: Fix Cortex-M DWT CPU counter.
It is necessary to enable the DWT using a special initialization
sequence before the CYCCNT can be enabled. See for example the
RESET_CYCLE_COUNTER in libbsp/arm/atsam/utils/utility.h.
Note that this problem only occurs if no debugger is connected. A
debugger most likely already enables the necessary module.
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/arm/shared/armv7m/startup/armv7m-cpucounter.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/c/src/lib/libbsp/arm/shared/armv7m/startup/armv7m-cpucounter.c b/c/src/lib/libbsp/arm/shared/armv7m/startup/armv7m-cpucounter.c index 16e971f85a..7d2581879f 100644 --- a/c/src/lib/libbsp/arm/shared/armv7m/startup/armv7m-cpucounter.c +++ b/c/src/lib/libbsp/arm/shared/armv7m/startup/armv7m-cpucounter.c @@ -28,12 +28,11 @@ CPU_Counter_ticks _CPU_Counter_read(void) static void armv7m_cpu_counter_initialize(void) { - volatile ARMV7M_DWT *dwt = _ARMV7M_DWT; - uint32_t dwt_ctrl; + bool cyccnt_enabled; - dwt_ctrl = dwt->ctrl; + cyccnt_enabled = _ARMV7M_DWT_Enable_CYCCNT(); - if ((dwt_ctrl & ARMV7M_DWT_CTRL_NOCYCCNT) == 0) { + if (cyccnt_enabled) { #ifdef BSP_ARMV7M_SYSTICK_FREQUENCY uint64_t freq = BSP_ARMV7M_SYSTICK_FREQUENCY; #else @@ -41,7 +40,6 @@ static void armv7m_cpu_counter_initialize(void) uint64_t freq = ARMV7M_SYSTICK_CALIB_TENMS_GET(systick->calib) * 100ULL; #endif - dwt->ctrl = dwt_ctrl | ARMV7M_DWT_CTRL_CYCCNTENA; rtems_counter_initialize_converter(freq); } else { bsp_fatal(BSP_ARM_ARMV7M_CPU_COUNTER_INIT); |