diff options
| author | Gordon Tyler <[email protected]> | 2025-10-27 10:41:33 -0400 |
|---|---|---|
| committer | Gordon Tyler <[email protected]> | 2025-10-27 10:41:33 -0400 |
| commit | e86c2b3b1c41c710acd34f6c85243c8bd5b5150d (patch) | |
| tree | 83a97b099c7b3a8e9f943b741c6496d08e651075 /embassy-mspm0 | |
| parent | 4c9efcd785eed99c3581373b77b4d3a1f559530c (diff) | |
mspm0: group irq handlers must check for NO_INTR (#4785)
In the case of spurious interrupts, the interrupt group's STAT register may be set to NO_INTR, which must be checked before attempting to calculate the interrupt index from the STAT value.
Diffstat (limited to 'embassy-mspm0')
| -rw-r--r-- | embassy-mspm0/build.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/embassy-mspm0/build.rs b/embassy-mspm0/build.rs index 1d118ad66..6264c9177 100644 --- a/embassy-mspm0/build.rs +++ b/embassy-mspm0/build.rs | |||
| @@ -194,8 +194,15 @@ fn generate_groups() -> TokenStream { | |||
| 194 | use crate::pac::#group_enum; | 194 | use crate::pac::#group_enum; |
| 195 | 195 | ||
| 196 | let group = crate::pac::CPUSS.int_group(#group_number); | 196 | let group = crate::pac::CPUSS.int_group(#group_number); |
| 197 | // MUST subtract by 1 since 0 is NO_INTR | 197 | let stat = group.iidx().read().stat(); |
| 198 | let iidx = group.iidx().read().stat().to_bits() - 1; | 198 | |
| 199 | // check for spurious interrupts | ||
| 200 | if stat == crate::pac::cpuss::vals::Iidx::NO_INTR { | ||
| 201 | return; | ||
| 202 | } | ||
| 203 | |||
| 204 | // MUST subtract by 1 because Iidx::INT0=1 | ||
| 205 | let iidx = stat.to_bits() - 1; | ||
| 199 | 206 | ||
| 200 | let Ok(group) = #group_enum::try_from(iidx as u8) else { | 207 | let Ok(group) = #group_enum::try_from(iidx as u8) else { |
| 201 | return; | 208 | return; |
