In the below timer configuration examples for the Arduino ESP32-C3 core both should start a 1Mhz timer (To multiplex a display) however if the first example is used (prescaler 80, interval 1) the chip does not boot, the 2nd example (prescaler 800, interval 10) however works as expected?
vfdUpdate = timerBegin(1, 80, true);
timerAttachInterrupt(vfdUpdate, &multiplex_ISR, true);
timerAlarmWrite(vfdUpdate, 1, true);
timerAlarmEnable(vfdUpdate);
vfdUpdate = timerBegin(1, 800, true);
timerAttachInterrupt(vfdUpdate, &multiplex_ISR, true);
timerAlarmWrite(vfdUpdate, 10, true);
timerAlarmEnable(vfdUpdate);
What am I missing that is making the chip not boot in the 1st example?
It seems clear from your experimental results that the 160Mhz ESP32-C3 cannot do the work you're asking it to do in 160 clock cycles (1 million times per second). The default CPU clock of the C3 is 160Mhz, but it can be set as high as 240Mhz and as low as 10Mhz.
In other words, the next interrupt is occurring before the first has finished working, this will cause a stack overflow or some similar fault in the CPU and it will stop running.
The job you're trying to do on the C3 doesn't sound like it's suitable for that MCU. If you do succeed in getting a timer interrupt to fire 1 million times a second, there likely will be no spare cycles to do any other work outside of the ISR.