Fix definition of bits in Interrupt enum #29
Merged
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.
The problem
When using
Can::enable_interrupt
orCan::disable_interrupt
with theInterrupt
enum (not theInterrupts
flags), the incorrect bits in the interrupt enable register are modified.Example
The code
prints
Why this happens
The
Can::enable_interrupt
andCan::disable_interrupt
functions convert theInterrupt
into a bit flag. However, theInterrupt
discriminant values are not flags, they are bit positions. In the above example,Interrupt::Fifo0MessagePending
(defined as 1) gets converted intoInterrupts::TRANSMIT_MAILBOX_EMPTY
(also defined as 1), and the transmit mailbox empty bit gets set in the interrupt enable register.The fix
This change simply changes the discriminant values of
Interrupt
so that they have the same values as the correspondingInterrupts
flags. The modified code correctly enables interrupts in my tests so far.