ARM processors have a running counter of clock cycles. For T4.x, all you have to do is read ARM_DWT_CYCCNT. Here is an example program that shows how to use it. Cycles are converted to nanoseconds using macro F_CPU, which is nominally 600M for T4.x, but changes when you modify clock frequency via the Arduino IDE.
Code:
#define CYCLES_TO_NS(cycles) ((cycles)*(1E9/F_CPU))
uint32_t ms;
uint32_t cycles;
void setup() {
Serial.begin( 115200 );
while (!Serial) {}
ms = millis();
cycles = ARM_DWT_CYCCNT; // ARM cycles at F_CPU
}
// every 1000 ms, read cycle counter and compute delta cycles and ns
void loop() {
uint32_t new_ms = millis();
if ((new_ms - ms) >= 1000) {
uint32_t new_cycles = ARM_DWT_CYCCNT;
uint32_t delta_cycles = new_cycles - cycles;
uint32_t delta_ns = CYCLES_TO_NS(delta_cycles);
Serial.printf( "cycles = %1lu ns = %1lu\n", delta_cycles, delta_ns );
ms = new_ms;
cycles = new_cycles;
}
}