Пытаюсь объявить обработчик FIQ-прерывания, как Си-функцию, Си-компилятор RealView, прерывание не вызывается! Раньше в Кейловском копмиляторе была директива "__FIQ" и всё работало, но в RealView eё нет и для IRQ и FIQ обработчиков используется - "__IRQ".
Вот просой пример кода - он не работает, подскажите в чем проблема!
Код
void Timer(void) __irq
{
if (IOSET0 & LED_1)
IOCLR0 |= LED_1;
else
IOSET0 |= LED_1;
T0IR = 0x01;
}
int main(void)
{
IODIR0 |= LED_1 | LED_2;
IOCLR0 |= LED_2;
IOSET0 |= LED_1;
T0PR = 2999;
T0TCR = 2;
T0MCR = 3;
T0MR0 = 999;
T0TCR = 1;
VICIntSelect = 0x10;
VICIntEnable = 0x10;
while(1);
}
Кусок Startup'a
AREA RESET, CODE, READONLY
ARM
EXTERN Timer
Vectors LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP ; Reserved Vector
LDR PC, [PC, #-0x0FF0]; Vector from VicVectAddr
LDR PC, FIQ_Addr
Reset_Addr DCD Reset_Handler
Undef_Addr DCD Undef_Handler
SWI_Addr DCD SWI_Handler
PAbt_Addr DCD PAbt_Handler
DAbt_Addr DCD DAbt_Handler
DCD 0 ; Reserved Address
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
Undef_Handler B Undef_Handler
SWI_Handler B SWI_Handler
PAbt_Handler B PAbt_Handler
DAbt_Handler B DAbt_Handler
IRQ_Handler B IRQ_Handler
FIQ_Handler B Timer
{
if (IOSET0 & LED_1)
IOCLR0 |= LED_1;
else
IOSET0 |= LED_1;
T0IR = 0x01;
}
int main(void)
{
IODIR0 |= LED_1 | LED_2;
IOCLR0 |= LED_2;
IOSET0 |= LED_1;
T0PR = 2999;
T0TCR = 2;
T0MCR = 3;
T0MR0 = 999;
T0TCR = 1;
VICIntSelect = 0x10;
VICIntEnable = 0x10;
while(1);
}
Кусок Startup'a
AREA RESET, CODE, READONLY
ARM
EXTERN Timer
Vectors LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP ; Reserved Vector
LDR PC, [PC, #-0x0FF0]; Vector from VicVectAddr
LDR PC, FIQ_Addr
Reset_Addr DCD Reset_Handler
Undef_Addr DCD Undef_Handler
SWI_Addr DCD SWI_Handler
PAbt_Addr DCD PAbt_Handler
DAbt_Addr DCD DAbt_Handler
DCD 0 ; Reserved Address
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
Undef_Handler B Undef_Handler
SWI_Handler B SWI_Handler
PAbt_Handler B PAbt_Handler
DAbt_Handler B DAbt_Handler
IRQ_Handler B IRQ_Handler
FIQ_Handler B Timer
Разобрался с проблемой во время написания вопроса, как обычно и бывает)
Представленный код посностью рабочий, может кому-нибудь пригодиться, как пример
Извините за флуд!