Помогите организовать прерывание NMI в компиляторе VDSP 4.5 для BF537. Имеется такой упрощенный исходник с Сишными файлами: //в файле "main.c" #include "ccblkfn.h" #include "sysreg.h" #include "BF537 Flags.h"
void main(void) { *pEVT2=NMI_ISR; //привязка адреса вектора прерывания NMI while(1){} //ожидание прерывания NMI }
//в файле "BF537 Flags.h" EX_INTERRUPT_HANDLER(NMI_ISR);
//в файле ISR.c EX_INTERRUPT_HANDLER(NMI_ISR) { nop;
} вопросы такие: 1. Почему компилятор не ругается на (NMI_ISR) во всех файлах? Где он определен? 2. После компиляции получается такой результат обработки прерывания в дизассемблере: @@Assembly [FFA0044C] [ -- SP ] = ASTAT ; [FFA0044E] [ -- SP ] = FP ; [FFA00450] [ -- SP ] = ( R7:0 , P5:0 ) ; [FFA00452] [ -- SP ] = LC0 ; [FFA00454] [ -- SP ] = LC1 ; [FFA00456] SP += -64 ; [FFA00458] SP += -52 ; [FFA0045A] NOP ; [FFA0045C] SP += 60 ; [FFA0045E] SP += 56 ; [FFA00460] LC1 = [ SP ++ ] ; [FFA00462] LC0 = [ SP ++ ] ; [FFA00464] ( R7:0 , P5:0 ) = [ SP ++ ] ; [FFA00466] FP = [ SP ++ ] ; [FFA00468] ASTAT = [ SP ++ ] ; [FFA0046A] RTI ;
то, что он избыточно длинен - ладно. Однако концовка должна быть RTN, а здесь RTI. Подскажите, как правильно сделать,плз.
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|