Заметание мусора под коврик. Слишком много программных вмешательств
в процесс, да еще на грани (как ты говоришь - еле успеваешь
выключать таймер в прерывании по ДМА). Варианты (которые реализуемы на STM32, насчет AT32 - скорее всего тоже можно так сделать, т.к. это почти клоны):
1. Использовать Advanced Timer (TIM1, TIM8), у которых есть Repetition Counter. Тогда все будет останавливаться само.
2. Использовать DMA Burst mode - это когда по циклам таймера по ДМА можно загружать новые настройки в регистры таймера. Не знаю, есть ли такое в AT32...