URL
https://opencores.org/ocsvn/neorv32/neorv32/trunk
[/] [neorv32/] [trunk/] [sw/] [lib/] [source/] [neorv32_xirq.c] - Diff between revs 66 and 69
Go to most recent revision |
Show entire file |
Details |
Blame |
View Log
Rev 66 |
Rev 69 |
Line 235... |
Line 235... |
|
|
register uint32_t src = NEORV32_XIRQ.SCR; // get IRQ source (with highest priority)
|
register uint32_t src = NEORV32_XIRQ.SCR; // get IRQ source (with highest priority)
|
|
|
uint32_t mask = 1 << src;
|
uint32_t mask = 1 << src;
|
NEORV32_XIRQ.IPR = ~mask; // clear current pending interrupt
|
NEORV32_XIRQ.IPR = ~mask; // clear current pending interrupt
|
NEORV32_XIRQ.SCR = 0; // acknowledge current interrupt (CPU FIRQ)
|
|
|
neorv32_cpu_csr_write(CSR_MIP, 1 << XIRQ_FIRQ_PENDING); // acknowledge XIRQ FIRQ
|
|
|
|
NEORV32_XIRQ.SCR = 0; // acknowledge current XIRQ interrupt source
|
|
|
// execute handler
|
// execute handler
|
register uint32_t xirq_handler = __neorv32_xirq_vector_lut[src];
|
register uint32_t xirq_handler = __neorv32_xirq_vector_lut[src];
|
void (*handler_pnt)(void);
|
void (*handler_pnt)(void);
|
handler_pnt = (void*)xirq_handler;
|
handler_pnt = (void*)xirq_handler;
|
© copyright 1999-2025
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.