Решение найдено методом научного тыка и копания startup-кода
Код
#pragma handler = AVR32_TC_IRQ_GROUP,0
__interrupt void AVR32_TC_IRQ_GROUP_ISR(void)
{
}
И его эквивалент на ассемблере:
//обработчик группы прерываний таймеров
name EXT_AVR32_TC_IRQ_GROUP
#include <avr32\iouc3b0256.h>
extern AVR32_TC_IRQ_GROUP_ISR
rseg HTAB:ROOT(2)
// LVL[1:0] | Index[5:0] | Offset[23:0]
DC32 (AVR32_INTC_IPR_INTLEVEL_INT0 << AVR32_INTC_IPR_INTLEVEL_OFFSET) | (AVR32_TC_IRQ_GROUP << 24) | ((AVR32_TC_IRQ_GROUP_ISR-0x80004000) & 0x00FFFFFF)
endmod
name AVR32_TC_IRQ_GROUP_ISR
#include <avr32\uc3b0256.h>
public AVR32_TC_IRQ_GROUP_ISR
rseg EVSEG:ROOT(2)
//процедура обработки прерываний
AVR32_TC_IRQ_GROUP_ISR:
//код сюда...
rete
end
Недочёт: AVR32_TC_IRQ_GROUP_ISR-0x80004000 - не получилось подставить начальный адрес сектора EVSEG, 0x80004000 - его абсолютный адрес, полученный при отладке
Скорость вызова прерывания, по-моему, на С и асме одинаковая. Но на асме в некоторых случаях можно выиграть в скорости обработки самой процедуры прерывания.