спасибо за совет, обязательно прийму к сведению. вобщем прерывание у меня заработало - я просто забыл включить его в CPSR. теперь другая проблема. по таймеру прерывание срабатывает, но обработчик ведет себя очень странно. есть следующий код:
#pragma vector=0x1C __fiq __arm void Timer0Int (void) { volatile int r,g;
for (g=0;g<100000;g++) { IO0SET=(1<<31); for (r=0;r<1000;r++); IO0CLR=(1<<31); for (r=0;r<1000;r++); }
при прерывании от таймера пару раз дергается нога р0.31, после чего все безвозвратно виснет. что за чудеса? Может в настройках иара надо что-то сделать? я там ничего не менял, кроме формата выходного файла. Работаю все время в режиме администратора. Может в линкере проблема? Вот кусок скрипта линкера:
-D_CSTACK_SIZE=1000 -D_IRQ_STACK_SIZE=400 -D_FIQ_STACK_SIZE=200 -D_SVC_STACK_SIZE=200 -D_ABT_STACK_SIZE=0 -D_UND_STACK_SIZE=0 -D_HEAP_SIZE=2000
-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)FIQ_STACK+_FIQ_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)ABT_STACK+_ABT_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)UND_STACK+_UND_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND
и еще вот что. если из обработчика все убрать, т.е. в нем только сброс флага, то все работает нормально. такое впечатление, что что-то не то с регистрами.
|