diff options
author | Christian Mauderer <Christian.Mauderer@embedded-brains.de> | 2017-10-17 11:46:15 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-18 09:02:01 +0200 |
commit | 248f8679a7e0f039f66705ba84afac166eb8e23a (patch) | |
tree | cec834585ea3ca89bd0212a1a5620209732b0191 /c/src/lib/libbsp/arm/shared | |
parent | sptests/sptimecounter04: New test (diff) | |
download | rtems-248f8679a7e0f039f66705ba84afac166eb8e23a.tar.bz2 |
bsps/arm: Remove DWT based clock.
It seems that the DWT CYCCNT does not advance when the CPU waits on a
WFI instruction.
That leads to the effect that for example on the atsamv BSP a sleep(1)
needs something in the range of a few minutes (depending on the
configured systick). A debugger might disables some deep sleep modes so
that the problem only appears if the application is executed without a
debugger.
Diffstat (limited to 'c/src/lib/libbsp/arm/shared')
-rw-r--r-- | c/src/lib/libbsp/arm/shared/armv7m/clock/armv7m-clock-config.c | 37 |
1 files changed, 7 insertions, 30 deletions
diff --git a/c/src/lib/libbsp/arm/shared/armv7m/clock/armv7m-clock-config.c b/c/src/lib/libbsp/arm/shared/armv7m/clock/armv7m-clock-config.c index e03ba9d83f..1c17a92cb5 100644 --- a/c/src/lib/libbsp/arm/shared/armv7m/clock/armv7m-clock-config.c +++ b/c/src/lib/libbsp/arm/shared/armv7m/clock/armv7m-clock-config.c @@ -88,18 +88,6 @@ static void _ARMV7M_TC_systick_tick(void) ); } -static uint32_t _ARMV7M_TC_dwt_get_timecount(struct timecounter *tc) -{ - volatile ARMV7M_DWT *dwt = _ARMV7M_DWT; - - return dwt->cyccnt; -} - -static void _ARMV7M_TC_dwt_tick(void) -{ - rtems_timecounter_tick(); -} - static void _ARMV7M_TC_tick(void) { (*_ARMV7M_TC.tick)(); @@ -131,7 +119,6 @@ static void _ARMV7M_Systick_initialize(void) #endif uint64_t us_per_tick = rtems_configuration_get_microseconds_per_tick(); uint64_t interval = (freq * us_per_tick) / 1000000ULL; - bool cyccnt_enabled; systick->rvr = (uint32_t) interval; systick->cvr = 0; @@ -139,23 +126,13 @@ static void _ARMV7M_Systick_initialize(void) | ARMV7M_SYSTICK_CSR_TICKINT | ARMV7M_SYSTICK_CSR_CLKSOURCE; - cyccnt_enabled = _ARMV7M_DWT_Enable_CYCCNT(); - if (cyccnt_enabled) { - _ARMV7M_TC.base.tc.tc_get_timecount = _ARMV7M_TC_dwt_get_timecount; - _ARMV7M_TC.base.tc.tc_counter_mask = 0xffffffff; - _ARMV7M_TC.base.tc.tc_frequency = freq; - _ARMV7M_TC.base.tc.tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER; - _ARMV7M_TC.tick = _ARMV7M_TC_dwt_tick; - rtems_timecounter_install(&_ARMV7M_TC.base.tc); - } else { - _ARMV7M_TC.tick = _ARMV7M_TC_systick_tick; - rtems_timecounter_simple_install( - &_ARMV7M_TC.base, - freq, - interval, - _ARMV7M_TC_systick_get_timecount - ); - } + _ARMV7M_TC.tick = _ARMV7M_TC_systick_tick; + rtems_timecounter_simple_install( + &_ARMV7M_TC.base, + freq, + interval, + _ARMV7M_TC_systick_get_timecount + ); } static void _ARMV7M_Systick_cleanup(void) |