@@ -35,8 +35,7 @@ pub fn line_is_triggered(reg: u32, line: u8) -> bool {
35
35
36
36
impl ExtiExt for EXTI {
37
37
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) ;
40
39
41
40
// translate port into bit values for EXTIn registers
42
41
let port_bm = match port {
@@ -116,17 +115,15 @@ impl ExtiExt for EXTI {
116
115
}
117
116
118
117
fn unlisten ( & self , line : u8 ) {
119
- assert ! ( line <= 22 ) ;
120
- assert_ne ! ( line, 18 ) ;
118
+ assert_line_valid ( line) ;
121
119
122
120
bb:: clear ( & self . rtsr , line) ;
123
121
bb:: clear ( & self . ftsr , line) ;
124
122
bb:: clear ( & self . imr , line) ;
125
123
}
126
124
127
125
fn pend_interrupt ( & self , line : u8 ) {
128
- assert ! ( line <= 22 ) ;
129
- assert_ne ! ( line, 18 ) ;
126
+ assert_line_valid ( line) ;
130
127
131
128
bb:: set ( & self . swier , line) ;
132
129
}
@@ -136,8 +133,7 @@ impl ExtiExt for EXTI {
136
133
}
137
134
138
135
fn clear_irq ( & self , line : u8 ) {
139
- assert ! ( line <= 22 ) ;
140
- assert_ne ! ( line, 18 ) ;
136
+ assert_line_valid ( line) ;
141
137
142
138
self . pr . modify ( |_, w| unsafe { w. bits ( 0b1 << line) } ) ;
143
139
}
@@ -157,7 +153,14 @@ impl ExtiExt for EXTI {
157
153
0 ..=1 => pac:: Interrupt :: EXTI0_1 ,
158
154
2 ..=3 => pac:: Interrupt :: EXTI2_3 ,
159
155
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 ,
161
164
line => panic ! ( "Line {} not supported" , line) ,
162
165
} ;
163
166
@@ -174,3 +177,12 @@ impl ExtiExt for EXTI {
174
177
} ) ;
175
178
}
176
179
}
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