I'm working on a Blackfin (536) based system that runs lwIP and VDK, and thus the Interrupt Manager.
lwIP registers a handler for the MAC Error interrupt; the same pin also handles CAN, PPI, SPORT, UART, and SPI errors. I register a secondary handler for UART errors. I am currently getting instances in which my handler is called (presumably after lwIP failed to handle the interrupt), but there are no errors on either UART0 or UART1, which makes me think that I may be getting errors from some other (unused) peripheral. (I'm not using the CAN, PPI, or SPORT, and the only possible SPI error condition should never happen and should force the SPI into slave mode if it does, which isn't happening.)
Anyway, my handler scratches its head and then returns ADI_INT_RESULT_NOT_PROCESSED. What happens if all the handlers registered on a particular interrupt return 'not processed'? Stepping seems to indicate that the system looks for further handlers, fails to find them, and then just goes on as if it was handled?
If there is no handler registered for an interrupt at all, will you get an exception of some sort if that interrupt occurs?
Challenge round: The interrupt in question appears to be causing a line of my code to fail to be executed, which I would have said was impossible. In particular, I'm initializing UART1. If I run to the line in which I clear DLAB (having set up the baud rate) and step over it: 1) I get the interrupt, and 2) the line executes, clearing DLAB and clearing me for further operation. If, on the other hand, I run to the _next_ line of code the DLAB bit is not cleared and the UART sits there waiting for further baud rate updates. If I protect the UART init function with an unscheduled region, it functions smoothly, but I shouldn't need to protect it, as there are no other threads that use UART1 or its registers. Any ideas?