Ну спасибо! Выполнять основную программу по кусочкам, да еще и с заданным временем выполнения! Это годится лишь тогда, когда кроме генерации ШИМ процессор ничем не занят. А в этом случае лучше Альтеру какую-нибудь поставить.
Насчет уставок я так и говорил - создать в памяти паттерн, который проигрывать в порт. Вот и весь ШИМ.
Глюки при загрузке моего варианта легко устранить, если синхронизировать загрузку со счетчиком pwm. Но в большинстве случаев это не критично, так как чаще всего выход PWM фильтруется, глюк длиной в 1 цикл на выходе ФНЧ виден не будет.
В Вашем случае тоже при перезаписи паттерна в RAM могут быть глюки.
Ваш метод формирования ШИМ хоть и позволяет получить высокую скорость, он очень не удобен в использовании.