Skip to content

Commit 303e5ef

Browse files
Support more EXTI lines
1 parent e402882 commit 303e5ef

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

src/exti.rs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ pub fn line_is_triggered(reg: u32, line: u8) -> bool {
3535

3636
impl ExtiExt for EXTI {
3737
fn listen(&self, syscfg: &mut SYSCFG, port: gpio::Port, line: u8, edge: TriggerEdge) {
38-
assert!(line <= 22);
39-
assert_ne!(line, 18);
38+
assert_line_valid(line);
4039

4140
// translate port into bit values for EXTIn registers
4241
let port_bm = match port {
@@ -116,17 +115,15 @@ impl ExtiExt for EXTI {
116115
}
117116

118117
fn unlisten(&self, line: u8) {
119-
assert!(line <= 22);
120-
assert_ne!(line, 18);
118+
assert_line_valid(line);
121119

122120
bb::clear(&self.rtsr, line);
123121
bb::clear(&self.ftsr, line);
124122
bb::clear(&self.imr, line);
125123
}
126124

127125
fn pend_interrupt(&self, line: u8) {
128-
assert!(line <= 22);
129-
assert_ne!(line, 18);
126+
assert_line_valid(line);
130127

131128
bb::set(&self.swier, line);
132129
}
@@ -136,8 +133,7 @@ impl ExtiExt for EXTI {
136133
}
137134

138135
fn clear_irq(&self, line: u8) {
139-
assert!(line <= 22);
140-
assert_ne!(line, 18);
136+
assert_line_valid(line);
141137

142138
self.pr.modify(|_, w| unsafe { w.bits(0b1 << line) });
143139
}
@@ -157,7 +153,14 @@ impl ExtiExt for EXTI {
157153
0..=1 => pac::Interrupt::EXTI0_1,
158154
2..=3 => pac::Interrupt::EXTI2_3,
159155
4..=15 => pac::Interrupt::EXTI4_15,
160-
20 => pac::Interrupt::RTC,
156+
16 => pac::Interrupt::PVD,
157+
17 | 19 | 20 => pac::Interrupt::RTC, // also LSE CSS
158+
21 | 22 => pac::Interrupt::ADC_COMP,
159+
23 => pac::Interrupt::I2C1,
160+
25 => pac::Interrupt::USART1,
161+
26 => pac::Interrupt::USART2,
162+
28 => pac::Interrupt::AES_RNG_LPUART1,
163+
29 => pac::Interrupt::LPTIM1,
161164
line => panic!("Line {} not supported", line),
162165
};
163166

@@ -174,3 +177,12 @@ impl ExtiExt for EXTI {
174177
});
175178
}
176179
}
180+
181+
fn assert_line_valid(line: u8) {
182+
assert!(line <= 29);
183+
assert_ne!(line, 27);
184+
185+
// Line 18 is used by the USB peripheral. On the l0x1, it is reserved.
186+
#[cfg(feature = "stm32l0x1")]
187+
assert_ne!(line, 18);
188+
}

0 commit comments

Comments
 (0)