Это вообще работоспособно? Разве что при отключенной оптимизации.
Почитайте про квалификатор volatile - переменные flag0 и dac нужно объявлять с его использованием.
Зачем Вам аккумулятор фазы в 64 бита? Хочется иметь нижний предел установки частоты в микрогерцы? 32 бит ИМХО достаточно.
Непонятно какой частотой тактируется таймер (PCLK = ?), но у Вас минимум 1200 тактов CPU между прерываниями. Прерывания у АРМ7 может и не особо быстрые, но не 1200 же тактов. Раз в 10 можно и поднять. И перенесите всю обработку прямо в прерывание.
Вместо:
Код
tmp2=sinus[phase>>58];
dac=(tmp2*amplituda)/1024;
dac=dac<<6;
Будет
Код
DACR = ((sinus[phaze>>26]*amplituda)>>4) & 0x0000FFFC; // аккумулятор фазы в 32 бита
phaze += delta; // delta - приращение фазы, глобальная переменная
// phaze, amplituda, delta неплохо в структуру собрать.
// ну и дальше как было, только flag0 уже не нужен.
Еще можно прерывание как FIQ сконфигурировать - еще несколько тактов отыграете.
Но вообще с DMA может поинтереснее получиться.