Разобрался. PSVPAG устанавливается компилятором правильно (сразу не заметил, что PSVPAG - это адрес 0x0034). Просто надо было включать режим PSV в регистре CORCON при входе в прерывание.
листинг прерывания:
// Прерывание по завершению приема кадра
void __attribute__((interrupt, auto_psv)) _T5Interrupt(void)
{
push.w 0x0036
mov.d 0x0000,[0x001e++]
mov.d 0x0004,[0x001e++]
mov.d 0x0008,[0x001e++]
mov.d 0x000c,[0x001e++]
push.w 0x0034
mov.b #0x2,0x0000
mov.w 0x0000,0x0034
lnk #0x0
uart_set_off_mode();
rcall 0x001592
stop_timer();
rcall 0x0016b2
exchangeCompleted = True;
mov.w #0x477d,0x0002
mov.b #0x1,0x0000
mov.b 0x0000,[0x0002]
exchange_complete_event();
rcall 0x0015a0
IFS1bits.T5IF = 0;
bclr.b 0x0087,#4
}
ulnk
pop.w 0x0034
mov.d [--0x001e],0x000c
mov.d [--0x001e],0x0008
mov.d [--0x001e],0x0004
mov.d [--0x001e],0x0000
pop.w 0x0036
retfie
//----------------------------------------------------