/* From: https://stackoverflow.com/questions/32610019/arm-m4-instructions-per-cycle-ipc-counters */ /* minor formating + type fixes */ volatile unsigned int *DWT_CYCCNT ; volatile unsigned int *DWT_CONTROL ; volatile unsigned int *SCB_DEMCR ; static void reset_timer() { DWT_CYCCNT = (unsigned int *)0xE0001004; //address of the register DWT_CONTROL = (unsigned int *)0xE0001000; //address of the register SCB_DEMCR = (unsigned int *)0xE000EDFC; //address of the register *SCB_DEMCR = *SCB_DEMCR | 0x01000000; *DWT_CYCCNT = 0; // reset the counter *DWT_CONTROL = 0; } static void start_timer() { *DWT_CONTROL = *DWT_CONTROL | 1 ; // enable the counter } static void stop_timer() { *DWT_CONTROL = *DWT_CONTROL | 0 ; // disable the counter } static unsigned int getCycles() { return *DWT_CYCCNT; }