aboutsummaryrefslogtreecommitdiff
path: root/embassy-mspm0
diff options
context:
space:
mode:
authorGordon Tyler <[email protected]>2025-10-27 10:41:33 -0400
committerGordon Tyler <[email protected]>2025-10-27 10:41:33 -0400
commite86c2b3b1c41c710acd34f6c85243c8bd5b5150d (patch)
tree83a97b099c7b3a8e9f943b741c6496d08e651075 /embassy-mspm0
parent4c9efcd785eed99c3581373b77b4d3a1f559530c (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.rs11
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;