This repository has been 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_EXTIS
corresponds 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 numberi
must be in thei - 1
index 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.