Skip to content

Commit

Permalink
Cortex M3-M7 can use DWT->CYCCNT (MarlinFirmware#15762)
Browse files Browse the repository at this point in the history
Suggested by Alex Kenis at https://youtu.be/ZfyPcdhQnAA?t=502
  • Loading branch information
thinkyhead authored Nov 2, 2019
1 parent ad28da7 commit f0d952d
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
2 changes: 1 addition & 1 deletion Marlin/src/HAL/HAL_STM32/HAL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ uint16_t HAL_adc_result;
// ------------------------

// Needed for DELAY_NS() / DELAY_US() on CORTEX-M7
#if (defined(__arm__) || defined(__thumb__)) && __CORTEX_M == 7
#if (defined(__arm__) || defined(__thumb__)) && WITHIN(__CORTEX_M, 3, 7)
// HAL pre-initialization task
// Force the preinit function to run between the premain() and main() function
// of the STM32 arduino core
Expand Down
9 changes: 5 additions & 4 deletions Marlin/src/HAL/shared/Delay.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,17 @@

#if defined(__arm__) || defined(__thumb__)

#if __CORTEX_M == 7
#if WITHIN(__CORTEX_M, 3, 7)

// Cortex-M7 can use the cycle counter of the DWT unit
// Cortex-M3 through M7 can use the cycle counter of the DWT unit
// http://www.anthonyvh.com/2017/05/18/cortex_m-cycle_counter/

FORCE_INLINE static void enableCycleCounter() {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

// Unlock DWT.
DWT->LAR = 0xC5ACCE55;
#if __CORTEX_M == 7
DWT->LAR = 0xC5ACCE55; // Unlock DWT on the M7
#endif

DWT->CYCCNT = 0;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
Expand Down

0 comments on commit f0d952d

Please sign in to comment.