stkarm/src/vectab.cpp

38 lines
915 B
C++
Raw Normal View History

2019-01-06 16:33:02 +00:00
#include <dbg.h>
#include <interrupt.h>
2019-01-06 16:33:02 +00:00
#include <stdint.h>
extern "C" uint32_t c_irq_handler(uint32_t iar) {
uint8_t cpuID = (iar >> 10) & 0x7;
uint16_t interruptID = iar & 0x3ff;
printk("Serving IRQ #"); printkl(itoa(interruptID));
void (*handler)(const uint8_t, const uint16_t);
2019-01-06 16:33:02 +00:00
if (cpuID == 0) {
/* for
* SPI - Shared Peripheral Interrupt
* PPI - Private Peripheral Interrupt
*/
switch (interruptID) { /* Choose proper interrupt handler */
case 54: case 55: case 56: case 57: case 99: case 100:
handler = interrupt::handler[interruptID];
2019-01-06 16:33:02 +00:00
break;
}
/* Call interrupt handler */
handler(cpuID, interruptID);
2019-01-06 16:33:02 +00:00
}
else {
/* for
* SGI - Software Generated Interrupts
*/
/* to be done -- multiprocessor systems */
}
return iar;
}