Due SAM3X8E SysTick Problem

By default, the SysTick Timer Counter counts down from 84000 to 0 in 1 ms, then reloads and so on.

I bet that your readings take more than 1 ms and SysTick can't handle more than 1 ms (by default).

Anyway, the right process to read Systick -> VAL should be this one:

volatile uint32_t t0, t1, t3;
void setup() {

  Serial.begin(250000);
  
}
void loop() {
  noInterrupts();

  t0 = SysTick->VAL;

  // Do some stuff during less than 1 ms, e.g. :
  delayMicroseconds(5);

  t1 = SysTick->VAL;
  t3 = ((t0 < t1) ? 84000 + t0 : t0) - t1 - 2 ;

  interrupts();

  Serial.print("number of ticks: ");
  Serial.println(t3  );
  delay(1000);
}