This repository was archived by the owner on Nov 28, 2023. It is now read-only.
Macro for implementing vectored interrupts #113
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I developed a macro by example to ease the definition of vectored interrupt handlers (see rust-embedded/riscv#158). The macro accepts one pattern with four parameters:
INTERRUPT: interrupt callback function to be defined. Usually, it is set toMachineExternal. However, I left this parameter open so you can easily implement vector callbacks for other interrupt types.CLAIM: function to claim/deduce the interrupt source number. Its signature must befn() -> u16.EXTI_TABLE: path to the table of external interrupt callbacks. This must be a static array of callbacks for the different interrupt sources. Its signature must bestatic [unsafe extern "C" fn(); N_EXTIS], whereN_EXTIScorresponds to the number of different interrupt sources of the target. Note that interrupt number 0 is reserved for "no interrupt". Thus, the callback for interrupt numberimust be in thei - 1index of the array.COMPLETE: function to mark a pending interrupt as complete. Its signature must befn(u16).As a simple example, you could do something like this:
PACs can provide a feature for implementing this automatically for the users.