Внимание: все номера составлены ...
Предположим, что вышеупомянутый ISR имеет около 200 (вероятно, меньше) инструкций скомпилированного кода, и они включают в себя инструкции по сохранению / восстановлению регистров ЦП до и после ISR, каждый из которых занимает 5 тактов (вероятно, от 1 до 3) и вы вызываете 2 из них по 1000 раз в секунду каждый, в итоге получается 2 *1000* 200 * 5 = 2 миллиона тактовых циклов в секунду или 2 MIPS.
Вы действительно потребляете остальные 38 MIPS в другом месте?
Единственное, что может быть важно здесь, и я не вижу этого, это то, что делается внутри функций SetMotor * Pos * () . Они делают какие-либо сложные вычисления? Они выполняют некоторую медленную связь с двигателями, например ждать, пока они ответят на команды, отправленные им?
В любом случае, сомнительно, что такой простой код будет заметно медленнее при работе с 32-разрядными целыми числами, чем с 16-разрядными.
Если ваш код работает медленно, выясните, где и сколько времени потрачено, профилируйте его. Генерация прямоугольного импульсного сигнала в ISR (значение 1, когда ISR запускается, значение 0, когда ISR собирается вернуться) и измерение его длительности с помощью осциллографа. Или сделайте все, что проще, чтобы выяснить это. Измерьте время, проведенное во всех частях программы, а затем оптимизируйте его там, где это действительно необходимо, а не там, где вы раньше думали, что это будет.