Ну, первое, что бросается в глаза:
Цитата
Причем, если программа не прошита во flash контроллера, а запускается через отладочный кабель (Wiggler), то скороть выполнения возрастает в 10 раз
Т.е. при работе из внутренней СРАМ получаем быстродействие в 4 раза ниже расчетного. При работе с флешки - в 40. Так? Возможно, при чтении памятей контроллер памяти вставляет не предусмотренные при расчете задержки (обычно они настраиваются в startup.s). Хотя в 40 раз???
Нет ли возможности, что контроллер уходит в прерывание с постоянной частотй, которая случайно совпала с частотой записи в порт? Можно ли на время работы функции запрещать прерывания?
Довольно банально, но, может, просто генератор настроен не на ту частоту? (Хотя это не объясняет 1).
Я бы попробовал так:
- запретил бы на время функции все без исключения прерывания (ну или те, которые не жалко);
- слинковать все в ОЗУ (внешнее, внутреннее), загрузить дебагером и посмотреть - может, во внешней раме будет еще одна частота

;
- прошел бы по шагам инициализацию генератора, ручками считая, что получается и сравнивая результат с тем, чего хочу;
- еще вариант - загрузить все в симулятор и посмотреть времена и трассу функций.