Cortex M3-M7 can use DWT->CYCCNT (#15762)

Suggested by Alex Kenis at https://youtu.be/ZfyPcdhQnAA?t=502
This commit is contained in:
Scott Lahteine 2019-11-01 22:07:51 -05:00 committed by GitHub
parent ad28da7eb4
commit f0d952d33a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 5 deletions

View File

@ -49,7 +49,7 @@ uint16_t HAL_adc_result;
// ------------------------ // ------------------------
// Needed for DELAY_NS() / DELAY_US() on CORTEX-M7 // 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 // HAL pre-initialization task
// Force the preinit function to run between the premain() and main() function // Force the preinit function to run between the premain() and main() function
// of the STM32 arduino core // of the STM32 arduino core

View File

@ -34,16 +34,17 @@
#if defined(__arm__) || defined(__thumb__) #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/ // http://www.anthonyvh.com/2017/05/18/cortex_m-cycle_counter/
FORCE_INLINE static void enableCycleCounter() { FORCE_INLINE static void enableCycleCounter() {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
// Unlock DWT. #if __CORTEX_M == 7
DWT->LAR = 0xC5ACCE55; DWT->LAR = 0xC5ACCE55; // Unlock DWT on the M7
#endif
DWT->CYCCNT = 0; DWT->CYCCNT = 0;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;