do any mcus (i've only used arm) have builtin hw to throttle interrupts?
They all do in some form because you always have a way to selectively disable an interrupt source, and have timers.
So if you need to wire something to an external interrupt pin, all you need to do is, in the ISR, disable that interrupt source and set a timer to give another interrupt later, where you re-enable the interrupt source. Not difficult, but obviously this should make you think whether you could just periodically read the input to begin with in a timer ISR - of course increasing reaction jitter and latency in the process, but making everything just simpler.
This is the structure of basically all motor controllers I have done:
init:
configure a timer to:
* generate PWM
* generate triggers for ADC
* generate interrupt requests
configure ADC to accept triggers
possibly configure DMA for ADC
configure analog comparator (or just ADC watchdog feature)
enable the timer
timer ISR:
* read out current from ADC (sometimes just from ADC register, sometimes from memory if DMA was used)
* read encoder position (just from IO pins, or possibly from a counter peripheral)
* do all FOC + speed control calculations
* update PWM registers with new values
overcurrent ISR (higher priority):
either
* update PWM registers and set some flag for the timer ISR that this kind of extra current limitation had to happen
or
* turn the thing off and error out
All you really need to do is to verify timer ISR never takes too long not to finish before the next cycle. Thankfully, it is typically easy to write this ISR in quite linear fashion without a lot of branching.