fix a problem where enabling the spurious interrupt handler screwed up

interrupt controller registers
This commit is contained in:
Markus Fröschle
2015-10-11 05:54:45 +00:00
parent ea0e9c1ec0
commit 5d75d8ccc7

View File

@@ -137,9 +137,9 @@ bool isr_register_handler(int vector, int level, int priority, bool (*handler)(v
int index; int index;
int int_source; int int_source;
if ((vector == 0) || (handler == NULL)) if ((vector <= 0) || (handler == NULL))
{ {
dbg("illegal vector or handler!\r\n"); dbg("illegal vector or handler (vector=%x, handler=%p)!\r\n", vector, handler);
return false; return false;
} }
@@ -163,18 +163,20 @@ bool isr_register_handler(int vector, int level, int priority, bool (*handler)(v
int_source = vector - 64; int_source = vector - 64;
if (!isr_enable_int_source(int_source)) if (int_source >= 0)
{ {
dbg("failed to enable internal interrupt souce %d in IMRL/IMRH\r\n", int_source); if (!isr_enable_int_source(int_source))
return false; {
} dbg("failed to enable internal interrupt souce %d in IMRL/IMRH\r\n", int_source);
return false;
}
if (!isr_set_prio_and_level(int_source, priority, level)) if (!isr_set_prio_and_level(int_source, priority, level))
{ {
dbg("failed to set priority and level for interrupt source %d\r\n", int_source); dbg("failed to set priority and level for interrupt source %d\r\n", int_source);
return false; return false;
}
} }
return true; return true;
} }
} }
@@ -243,6 +245,8 @@ bool pic_interrupt_handler(void *arg1, void *arg2)
{ {
uint8_t rcv_byte; uint8_t rcv_byte;
dbg("PIC interrupt\r\n");
rcv_byte = MCF_PSC3_PSCRB_8BIT; rcv_byte = MCF_PSC3_PSCRB_8BIT;
if (rcv_byte == 2) /* PIC requests RTC data */ if (rcv_byte == 2) /* PIC requests RTC data */
{ {