1 #define PERIPH_BASE 0x40000000
2 #define APB1PERIPH_BASE PERIPH_BASE
3 #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
4 #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
8 volatile uint32_t CFGR;
10 volatile uint32_t APB2RSTR;
11 volatile uint32_t APB1RSTR;
12 volatile uint32_t AHBENR;
13 volatile uint32_t APB2ENR;
14 volatile uint32_t APB1ENR;
15 volatile uint32_t BDCR;
16 volatile uint32_t CSR;
19 #define RCC_BASE (AHBPERIPH_BASE + 0x1000)
20 static struct RCC *const RCC = ((struct RCC *const)RCC_BASE);
22 #define RCC_AHBENR_DMA1EN 0x00000001
23 #define RCC_AHBENR_CRCEN 0x00000040
25 #define RCC_APB2ENR_ADC1EN 0x00000200
26 #define RCC_APB2ENR_ADC2EN 0x00000400
27 #define RCC_APB2ENR_TIM1EN 0x00000800
28 #define RCC_APB1ENR_TIM2EN 0x00000001
29 #define RCC_APB1ENR_TIM3EN 0x00000002
30 #define RCC_APB1ENR_TIM4EN 0x00000004
32 #define RCC_APB2RSTR_ADC1RST 0x00000200
33 #define RCC_APB2RSTR_ADC2RST 0x00000400
34 #define RCC_APB2RSTR_TIM1RST 0x00000800
35 #define RCC_APB1RSTR_TIM2RST 0x00000001
36 #define RCC_APB1RSTR_TIM3RST 0x00000002
37 #define RCC_APB1RSTR_TIM4RST 0x00000004
39 #define CRC_CR_RESET 0x00000001
49 #define CRC_BASE (AHBPERIPH_BASE + 0x3000)
50 static struct CRC *const CRC = ((struct CRC *const)CRC_BASE);
55 volatile uint32_t CR1;
56 volatile uint32_t CR2;
57 volatile uint32_t SMPR1;
58 volatile uint32_t SMPR2;
59 volatile uint32_t JOFR1;
60 volatile uint32_t JOFR2;
61 volatile uint32_t JOFR3;
62 volatile uint32_t JOFR4;
63 volatile uint32_t HTR;
64 volatile uint32_t LTR;
65 volatile uint32_t SQR1;
66 volatile uint32_t SQR2;
67 volatile uint32_t SQR3;
68 volatile uint32_t JSQR;
69 volatile uint32_t JDR1;
70 volatile uint32_t JDR2;
71 volatile uint32_t JDR3;
72 volatile uint32_t JDR4;
76 #define ADC1_BASE (APB2PERIPH_BASE + 0x2400)
77 #define ADC2_BASE (APB2PERIPH_BASE + 0x2800)
79 static struct ADC *const ADC1 = (struct ADC *const)ADC1_BASE;
80 static struct ADC *const ADC2 = (struct ADC *const)ADC2_BASE;
82 #define ADC_CR1_DUALMOD_0 0x00010000
83 #define ADC_CR1_DUALMOD_1 0x00020000
84 #define ADC_CR1_DUALMOD_2 0x00040000
85 #define ADC_CR1_DUALMOD_3 0x00080000
87 #define ADC_CR1_SCAN 0x00000100
89 #define ADC_CR2_ADON 0x00000001
90 #define ADC_CR2_CONT 0x00000002
91 #define ADC_CR2_CAL 0x00000004
92 #define ADC_CR2_RSTCAL 0x00000008
93 #define ADC_CR2_DMA 0x00000100
94 #define ADC_CR2_ALIGN 0x00000800
95 #define ADC_CR2_EXTSEL 0x000E0000
96 #define ADC_CR2_EXTSEL_0 0x00020000
97 #define ADC_CR2_EXTSEL_1 0x00040000
98 #define ADC_CR2_EXTSEL_2 0x00080000
99 #define ADC_CR2_EXTTRIG 0x00100000
100 #define ADC_CR2_SWSTART 0x00400000
101 #define ADC_CR2_TSVREFE 0x00800000
104 volatile uint32_t CCR;
105 volatile uint32_t CNDTR;
106 volatile uint32_t CPAR;
107 volatile uint32_t CMAR;
111 volatile uint32_t ISR;
112 volatile uint32_t IFCR;
115 #define STM32_DMA_CR_MINC DMA_CCR1_MINC
116 #define STM32_DMA_CR_MSIZE_WORD DMA_CCR1_MSIZE_1
117 #define STM32_DMA_CR_PSIZE_WORD DMA_CCR1_PSIZE_1
118 #define STM32_DMA_CR_TCIE DMA_CCR1_TCIE
119 #define STM32_DMA_CR_TEIE DMA_CCR1_TEIE
120 #define STM32_DMA_CR_HTIE DMA_CCR1_HTIE
121 #define STM32_DMA_ISR_TEIF DMA_ISR_TEIF1
122 #define STM32_DMA_ISR_HTIF DMA_ISR_HTIF1
123 #define STM32_DMA_ISR_TCIF DMA_ISR_TCIF1
125 #define STM32_DMA_ISR_MASK 0x0F
126 #define STM32_DMA_CCR_RESET_VALUE 0x00000000
127 #define STM32_DMA_CR_PL_MASK DMA_CCR1_PL
128 #define STM32_DMA_CR_PL(n) ((n) << 12)
130 #define DMA_CCR1_EN 0x00000001
131 #define DMA_CCR1_TCIE 0x00000002
132 #define DMA_CCR1_HTIE 0x00000004
133 #define DMA_CCR1_TEIE 0x00000008
134 #define DMA_CCR1_DIR 0x00000010
135 #define DMA_CCR1_CIRC 0x00000020
136 #define DMA_CCR1_PINC 0x00000040
137 #define DMA_CCR1_MINC 0x00000080
138 #define DMA_CCR1_PSIZE 0x00000300
139 #define DMA_CCR1_PSIZE_0 0x00000100
140 #define DMA_CCR1_PSIZE_1 0x00000200
141 #define DMA_CCR1_MSIZE 0x00000C00
142 #define DMA_CCR1_MSIZE_0 0x00000400
143 #define DMA_CCR1_MSIZE_1 0x00000800
144 #define DMA_CCR1_PL 0x00003000
145 #define DMA_CCR1_PL_0 0x00001000
146 #define DMA_CCR1_PL_1 0x00002000
147 #define DMA_CCR1_MEM2MEM 0x00004000
149 #define DMA_ISR_GIF1 0x00000001
150 #define DMA_ISR_TCIF1 0x00000002
151 #define DMA_ISR_HTIF1 0x00000004
152 #define DMA_ISR_TEIF1 0x00000008
153 #define DMA_ISR_GIF2 0x00000010
154 #define DMA_ISR_TCIF2 0x00000020
155 #define DMA_ISR_HTIF2 0x00000040
156 #define DMA_ISR_TEIF2 0x00000080
157 #define DMA_ISR_GIF3 0x00000100
158 #define DMA_ISR_TCIF3 0x00000200
159 #define DMA_ISR_HTIF3 0x00000400
160 #define DMA_ISR_TEIF3 0x00000800
161 #define DMA_ISR_GIF4 0x00001000
162 #define DMA_ISR_TCIF4 0x00002000
163 #define DMA_ISR_HTIF4 0x00004000
164 #define DMA_ISR_TEIF4 0x00008000
165 #define DMA_ISR_GIF5 0x00010000
166 #define DMA_ISR_TCIF5 0x00020000
167 #define DMA_ISR_HTIF5 0x00040000
168 #define DMA_ISR_TEIF5 0x00080000
169 #define DMA_ISR_GIF6 0x00100000
170 #define DMA_ISR_TCIF6 0x00200000
171 #define DMA_ISR_HTIF6 0x00400000
172 #define DMA_ISR_TEIF6 0x00800000
173 #define DMA_ISR_GIF7 0x01000000
174 #define DMA_ISR_TCIF7 0x02000000
175 #define DMA_ISR_HTIF7 0x04000000
176 #define DMA_ISR_TEIF7 0x08000000
178 #define DMA1_BASE (AHBPERIPH_BASE + 0x0000)
179 static struct DMA *const DMA1 = (struct DMA *const)DMA1_BASE;
181 #define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008)
182 static struct DMA_Channel *const DMA1_Channel1 =
183 (struct DMA_Channel *const)DMA1_Channel1_BASE;
185 /* System Control Block */
188 volatile uint32_t CPUID;
189 volatile uint32_t ICSR;
190 volatile uint32_t VTOR;
191 volatile uint32_t AIRCR;
192 volatile uint32_t SCR;
193 volatile uint32_t CCR;
194 volatile uint8_t SHP[12];
195 volatile uint32_t SHCSR;
196 volatile uint32_t CFSR;
197 volatile uint32_t HFSR;
198 volatile uint32_t DFSR;
199 volatile uint32_t MMFAR;
200 volatile uint32_t BFAR;
201 volatile uint32_t AFSR;
202 volatile uint32_t PFR[2];
203 volatile uint32_t DFR;
204 volatile uint32_t ADR;
205 volatile uint32_t MMFR[4];
206 volatile uint32_t ISAR[5];
207 uint32_t RESERVED0[5];
208 volatile uint32_t CPACR;
211 #define SCS_BASE 0xE000E000
212 #define SCB_BASE (SCS_BASE + 0x0D00)
213 static struct SCB *const SCB = (struct SCB *const)SCB_BASE;
218 volatile uint16_t CR1; uint16_t RESERVED0;
219 volatile uint16_t CR2; uint16_t RESERVED1;
220 volatile uint16_t SMCR; uint16_t RESERVED2;
221 volatile uint16_t DIER; uint16_t RESERVED3;
222 volatile uint16_t SR; uint16_t RESERVED4;
223 volatile uint16_t EGR; uint16_t RESERVED5;
224 volatile uint16_t CCMR1; uint16_t RESERVED6;
225 volatile uint16_t CCMR2; uint16_t RESERVED7;
226 volatile uint16_t CCER; uint16_t RESERVED8;
227 volatile uint16_t CNT; uint16_t RESERVED9;
228 volatile uint16_t PSC; uint16_t RESERVED10;
229 volatile uint16_t ARR; uint16_t RESERVED11;
230 volatile uint16_t RCR; uint16_t RESERVED12;
231 volatile uint16_t CCR1; uint16_t RESERVED13;
232 volatile uint16_t CCR2; uint16_t RESERVED14;
233 volatile uint16_t CCR3; uint16_t RESERVED15;
234 volatile uint16_t CCR4; uint16_t RESERVED16;
235 volatile uint16_t BDTR; uint16_t RESERVED17;
236 volatile uint16_t DCR; uint16_t RESERVED18;
237 volatile uint16_t DMAR; uint16_t RESERVED19;
240 #define TIM2_BASE 0x40000000
241 #define TIM3_BASE 0x40000400
242 #define TIM4_BASE 0x40000800
243 static struct TIM *const TIM2 = (struct TIM *const)TIM2_BASE;
244 static struct TIM *const TIM3 = (struct TIM *const)TIM3_BASE;
245 static struct TIM *const TIM4 = (struct TIM *const)TIM4_BASE;
247 #define TIM_CR1_CEN 0x0001
248 #define TIM_CR1_UDIS 0x0002
249 #define TIM_CR1_URS 0x0004
250 #define TIM_CR1_OPM 0x0008
251 #define TIM_CR1_DIR 0x0010
252 #define TIM_CR1_CMS 0x0060
253 #define TIM_CR1_CMS_0 0x0020
254 #define TIM_CR1_CMS_1 0x0040
255 #define TIM_CR1_ARPE 0x0080
256 #define TIM_CR1_CKD 0x0300
257 #define TIM_CR1_CKD_0 0x0100
258 #define TIM_CR1_CKD_1 0x0200
260 #define TIM_CR2_CCPC 0x0001
261 #define TIM_CR2_CCUS 0x0004
262 #define TIM_CR2_CCDS 0x0008
263 #define TIM_CR2_MMS 0x0070
264 #define TIM_CR2_MMS_0 0x0010
265 #define TIM_CR2_MMS_1 0x0020
266 #define TIM_CR2_MMS_2 0x0040
267 #define TIM_CR2_TI1S 0x0080
268 #define TIM_CR2_OIS1 0x0100
269 #define TIM_CR2_OIS1N 0x0200
270 #define TIM_CR2_OIS2 0x0400
271 #define TIM_CR2_OIS2N 0x0800
272 #define TIM_CR2_OIS3 0x1000
273 #define TIM_CR2_OIS3N 0x2000
274 #define TIM_CR2_OIS4 0x4000
276 #define TIM_SMCR_SMS 0x0007
277 #define TIM_SMCR_SMS_0 0x0001
278 #define TIM_SMCR_SMS_1 0x0002
279 #define TIM_SMCR_SMS_2 0x0004
280 #define TIM_SMCR_TS 0x0070
281 #define TIM_SMCR_TS_0 0x0010
282 #define TIM_SMCR_TS_1 0x0020
283 #define TIM_SMCR_TS_2 0x0040
284 #define TIM_SMCR_MSM 0x0080
286 #define TIM_SMCR_ETF 0x0F00
287 #define TIM_SMCR_ETF_0 0x0100
288 #define TIM_SMCR_ETF_1 0x0200
289 #define TIM_SMCR_ETF_2 0x0400
290 #define TIM_SMCR_ETF_3 0x0800
292 #define TIM_SMCR_ETPS 0x3000
293 #define TIM_SMCR_ETPS_0 0x1000
294 #define TIM_SMCR_ETPS_1 0x2000
296 #define TIM_SMCR_ECE 0x4000
297 #define TIM_SMCR_ETP 0x8000
299 #define TIM_DIER_UIE 0x0001
300 #define TIM_DIER_CC1IE 0x0002
301 #define TIM_DIER_CC2IE 0x0004
302 #define TIM_DIER_CC3IE 0x0008
303 #define TIM_DIER_CC4IE 0x0010
304 #define TIM_DIER_COMIE 0x0020
305 #define TIM_DIER_TIE 0x0040
306 #define TIM_DIER_BIE 0x0080
307 #define TIM_DIER_UDE 0x0100
308 #define TIM_DIER_CC1DE 0x0200
309 #define TIM_DIER_CC2DE 0x0400
310 #define TIM_DIER_CC3DE 0x0800
311 #define TIM_DIER_CC4DE 0x1000
312 #define TIM_DIER_COMDE 0x2000
313 #define TIM_DIER_TDE 0x4000
315 #define TIM_SR_UIF 0x0001
316 #define TIM_SR_CC1IF 0x0002
317 #define TIM_SR_CC2IF 0x0004
318 #define TIM_SR_CC3IF 0x0008
319 #define TIM_SR_CC4IF 0x0010
320 #define TIM_SR_COMIF 0x0020
321 #define TIM_SR_TIF 0x0040
322 #define TIM_SR_BIF 0x0080
323 #define TIM_SR_CC1OF 0x0200
324 #define TIM_SR_CC2OF 0x0400
325 #define TIM_SR_CC3OF 0x0800
326 #define TIM_SR_CC4OF 0x1000
328 #define TIM_EGR_UG 0x01
329 #define TIM_EGR_CC1G 0x02
330 #define TIM_EGR_CC2G 0x04
331 #define TIM_EGR_CC3G 0x08
332 #define TIM_EGR_CC4G 0x10
333 #define TIM_EGR_COMG 0x20
334 #define TIM_EGR_TG 0x40
335 #define TIM_EGR_BG 0x80
337 #define TIM_CCMR1_CC1S 0x0003
338 #define TIM_CCMR1_CC1S_0 0x0001
339 #define TIM_CCMR1_CC1S_1 0x0002
341 #define TIM_CCMR1_OC1FE 0x0004
342 #define TIM_CCMR1_OC1PE 0x0008
344 #define TIM_CCMR1_OC1M 0x0070
345 #define TIM_CCMR1_OC1M_0 0x0010
346 #define TIM_CCMR1_OC1M_1 0x0020
347 #define TIM_CCMR1_OC1M_2 0x0040
349 #define TIM_CCMR1_OC1CE 0x0080
351 #define TIM_CCMR1_CC2S 0x0300
352 #define TIM_CCMR1_CC2S_0 0x0100
353 #define TIM_CCMR1_CC2S_1 0x0200
355 #define TIM_CCMR1_OC2FE 0x0400
356 #define TIM_CCMR1_OC2PE 0x0800
358 #define TIM_CCMR1_OC2M 0x7000
359 #define TIM_CCMR1_OC2M_0 0x1000
360 #define TIM_CCMR1_OC2M_1 0x2000
361 #define TIM_CCMR1_OC2M_2 0x4000
363 #define TIM_CCMR1_OC2CE 0x8000
366 #define TIM_CCMR1_IC1PSC 0x000C
367 #define TIM_CCMR1_IC1PSC_0 0x0004
368 #define TIM_CCMR1_IC1PSC_1 0x0008
370 #define TIM_CCMR1_IC1F 0x00F0
371 #define TIM_CCMR1_IC1F_0 0x0010
372 #define TIM_CCMR1_IC1F_1 0x0020
373 #define TIM_CCMR1_IC1F_2 0x0040
374 #define TIM_CCMR1_IC1F_3 0x0080
376 #define TIM_CCMR1_IC2PSC 0x0C00
377 #define TIM_CCMR1_IC2PSC_0 0x0400
378 #define TIM_CCMR1_IC2PSC_1 0x0800
380 #define TIM_CCMR1_IC2F 0xF000
381 #define TIM_CCMR1_IC2F_0 0x1000
382 #define TIM_CCMR1_IC2F_1 0x2000
383 #define TIM_CCMR1_IC2F_2 0x4000
384 #define TIM_CCMR1_IC2F_3 0x8000
386 #define TIM_CCMR2_CC3S 0x0003
387 #define TIM_CCMR2_CC3S_0 0x0001
388 #define TIM_CCMR2_CC3S_1 0x0002
390 #define TIM_CCMR2_OC3FE 0x0004
391 #define TIM_CCMR2_OC3PE 0x0008
393 #define TIM_CCMR2_OC3M 0x0070
394 #define TIM_CCMR2_OC3M_0 0x0010
395 #define TIM_CCMR2_OC3M_1 0x0020
396 #define TIM_CCMR2_OC3M_2 0x0040
398 #define TIM_CCMR2_OC3CE 0x0080
400 #define TIM_CCMR2_CC4S 0x0300
401 #define TIM_CCMR2_CC4S_0 0x0100
402 #define TIM_CCMR2_CC4S_1 0x0200
404 #define TIM_CCMR2_OC4FE 0x0400
405 #define TIM_CCMR2_OC4PE 0x0800
407 #define TIM_CCMR2_OC4M 0x7000
408 #define TIM_CCMR2_OC4M_0 0x1000
409 #define TIM_CCMR2_OC4M_1 0x2000
410 #define TIM_CCMR2_OC4M_2 0x4000
412 #define TIM_CCMR2_OC4CE 0x8000
415 #define TIM_CCMR2_IC3PSC 0x000C
416 #define TIM_CCMR2_IC3PSC_0 0x0004
417 #define TIM_CCMR2_IC3PSC_1 0x0008
419 #define TIM_CCMR2_IC3F 0x00F0
420 #define TIM_CCMR2_IC3F_0 0x0010
421 #define TIM_CCMR2_IC3F_1 0x0020
422 #define TIM_CCMR2_IC3F_2 0x0040
423 #define TIM_CCMR2_IC3F_3 0x0080
425 #define TIM_CCMR2_IC4PSC 0x0C00
426 #define TIM_CCMR2_IC4PSC_0 0x0400
427 #define TIM_CCMR2_IC4PSC_1 0x0800
429 #define TIM_CCMR2_IC4F 0xF000
430 #define TIM_CCMR2_IC4F_0 0x1000
431 #define TIM_CCMR2_IC4F_1 0x2000
432 #define TIM_CCMR2_IC4F_2 0x4000
433 #define TIM_CCMR2_IC4F_3 0x8000
435 #define TIM_CCER_CC1E 0x0001
436 #define TIM_CCER_CC1P 0x0002
437 #define TIM_CCER_CC1NE 0x0004
438 #define TIM_CCER_CC1NP 0x0008
439 #define TIM_CCER_CC2E 0x0010
440 #define TIM_CCER_CC2P 0x0020
441 #define TIM_CCER_CC2NE 0x0040
442 #define TIM_CCER_CC2NP 0x0080
443 #define TIM_CCER_CC3E 0x0100
444 #define TIM_CCER_CC3P 0x0200
445 #define TIM_CCER_CC3NE 0x0400
446 #define TIM_CCER_CC3NP 0x0800
447 #define TIM_CCER_CC4E 0x1000
448 #define TIM_CCER_CC4P 0x2000
450 #define TIM_CNT_CNT 0xFFFF
452 #define TIM_PSC_PSC 0xFFFF
454 #define TIM_ARR_ARR 0xFFFF
456 #define TIM_RCR_REP 0xFF
458 #define TIM_CCR1_CCR1 0xFFFF
459 #define TIM_CCR2_CCR2 0xFFFF
460 #define TIM_CCR3_CCR3 0xFFFF
461 #define TIM_CCR4_CCR4 0xFFFF
463 #define TIM_BDTR_DTG 0x00FF
464 #define TIM_BDTR_DTG_0 0x0001
465 #define TIM_BDTR_DTG_1 0x0002
466 #define TIM_BDTR_DTG_2 0x0004
467 #define TIM_BDTR_DTG_3 0x0008
468 #define TIM_BDTR_DTG_4 0x0010
469 #define TIM_BDTR_DTG_5 0x0020
470 #define TIM_BDTR_DTG_6 0x0040
471 #define TIM_BDTR_DTG_7 0x0080
473 #define TIM_BDTR_LOCK 0x0300
474 #define TIM_BDTR_LOCK_0 0x0100
475 #define TIM_BDTR_LOCK_1 0x0200
477 #define TIM_BDTR_OSSI 0x0400
478 #define TIM_BDTR_OSSR 0x0800
479 #define TIM_BDTR_BKE 0x1000
480 #define TIM_BDTR_BKP 0x2000
481 #define TIM_BDTR_AOE 0x4000
482 #define TIM_BDTR_MOE 0x8000
484 #define TIM_DCR_DBA 0x001F
485 #define TIM_DCR_DBA_0 0x0001
486 #define TIM_DCR_DBA_1 0x0002
487 #define TIM_DCR_DBA_2 0x0004
488 #define TIM_DCR_DBA_3 0x0008
489 #define TIM_DCR_DBA_4 0x0010
491 #define TIM_DCR_DBL 0x1F00
492 #define TIM_DCR_DBL_0 0x0100
493 #define TIM_DCR_DBL_1 0x0200
494 #define TIM_DCR_DBL_2 0x0400
495 #define TIM_DCR_DBL_3 0x0800
496 #define TIM_DCR_DBL_4 0x1000
498 #define TIM_DMAR_DMAB 0xFFFF
502 volatile uint32_t IMR;
503 volatile uint32_t EMR;
504 volatile uint32_t RTSR;
505 volatile uint32_t FTSR;
506 volatile uint32_t SWIER;
507 volatile uint32_t PR;
510 #define EXTI_BASE 0x40010400
511 static struct EXTI *const EXTI = (struct EXTI *const)EXTI_BASE;
513 #define EXTI_IMR_MR0 0x00000001
514 #define EXTI_IMR_MR1 0x00000002
515 #define EXTI_IMR_MR2 0x00000004
516 #define EXTI_IMR_MR3 0x00000008
517 #define EXTI_IMR_MR4 0x00000010
518 #define EXTI_IMR_MR5 0x00000020
519 #define EXTI_IMR_MR6 0x00000040
520 #define EXTI_IMR_MR7 0x00000080
521 #define EXTI_IMR_MR8 0x00000100
522 #define EXTI_IMR_MR9 0x00000200
523 #define EXTI_IMR_MR10 0x00000400
524 #define EXTI_IMR_MR11 0x00000800
525 #define EXTI_IMR_MR12 0x00001000
526 #define EXTI_IMR_MR13 0x00002000
527 #define EXTI_IMR_MR14 0x00004000
528 #define EXTI_IMR_MR15 0x00008000
529 #define EXTI_IMR_MR16 0x00010000
530 #define EXTI_IMR_MR17 0x00020000
531 #define EXTI_IMR_MR18 0x00040000
532 #define EXTI_IMR_MR19 0x00080000
534 #define EXTI_EMR_MR0 0x00000001
535 #define EXTI_EMR_MR1 0x00000002
536 #define EXTI_EMR_MR2 0x00000004
537 #define EXTI_EMR_MR3 0x00000008
538 #define EXTI_EMR_MR4 0x00000010
539 #define EXTI_EMR_MR5 0x00000020
540 #define EXTI_EMR_MR6 0x00000040
541 #define EXTI_EMR_MR7 0x00000080
542 #define EXTI_EMR_MR8 0x00000100
543 #define EXTI_EMR_MR9 0x00000200
544 #define EXTI_EMR_MR10 0x00000400
545 #define EXTI_EMR_MR11 0x00000800
546 #define EXTI_EMR_MR12 0x00001000
547 #define EXTI_EMR_MR13 0x00002000
548 #define EXTI_EMR_MR14 0x00004000
549 #define EXTI_EMR_MR15 0x00008000
550 #define EXTI_EMR_MR16 0x00010000
551 #define EXTI_EMR_MR17 0x00020000
552 #define EXTI_EMR_MR18 0x00040000
553 #define EXTI_EMR_MR19 0x00080000
555 #define EXTI_RTSR_TR0 0x00000001
556 #define EXTI_RTSR_TR1 0x00000002
557 #define EXTI_RTSR_TR2 0x00000004
558 #define EXTI_RTSR_TR3 0x00000008
559 #define EXTI_RTSR_TR4 0x00000010
560 #define EXTI_RTSR_TR5 0x00000020
561 #define EXTI_RTSR_TR6 0x00000040
562 #define EXTI_RTSR_TR7 0x00000080
563 #define EXTI_RTSR_TR8 0x00000100
564 #define EXTI_RTSR_TR9 0x00000200
565 #define EXTI_RTSR_TR10 0x00000400
566 #define EXTI_RTSR_TR11 0x00000800
567 #define EXTI_RTSR_TR12 0x00001000
568 #define EXTI_RTSR_TR13 0x00002000
569 #define EXTI_RTSR_TR14 0x00004000
570 #define EXTI_RTSR_TR15 0x00008000
571 #define EXTI_RTSR_TR16 0x00010000
572 #define EXTI_RTSR_TR17 0x00020000
573 #define EXTI_RTSR_TR18 0x00040000
574 #define EXTI_RTSR_TR19 0x00080000
576 #define EXTI_FTSR_TR0 0x00000001
577 #define EXTI_FTSR_TR1 0x00000002
578 #define EXTI_FTSR_TR2 0x00000004
579 #define EXTI_FTSR_TR3 0x00000008
580 #define EXTI_FTSR_TR4 0x00000010
581 #define EXTI_FTSR_TR5 0x00000020
582 #define EXTI_FTSR_TR6 0x00000040
583 #define EXTI_FTSR_TR7 0x00000080
584 #define EXTI_FTSR_TR8 0x00000100
585 #define EXTI_FTSR_TR9 0x00000200
586 #define EXTI_FTSR_TR10 0x00000400
587 #define EXTI_FTSR_TR11 0x00000800
588 #define EXTI_FTSR_TR12 0x00001000
589 #define EXTI_FTSR_TR13 0x00002000
590 #define EXTI_FTSR_TR14 0x00004000
591 #define EXTI_FTSR_TR15 0x00008000
592 #define EXTI_FTSR_TR16 0x00010000
593 #define EXTI_FTSR_TR17 0x00020000
594 #define EXTI_FTSR_TR18 0x00040000
595 #define EXTI_FTSR_TR19 0x00080000
597 #define EXTI_SWIER_SWIER0 0x00000001
598 #define EXTI_SWIER_SWIER1 0x00000002
599 #define EXTI_SWIER_SWIER2 0x00000004
600 #define EXTI_SWIER_SWIER3 0x00000008
601 #define EXTI_SWIER_SWIER4 0x00000010
602 #define EXTI_SWIER_SWIER5 0x00000020
603 #define EXTI_SWIER_SWIER6 0x00000040
604 #define EXTI_SWIER_SWIER7 0x00000080
605 #define EXTI_SWIER_SWIER8 0x00000100
606 #define EXTI_SWIER_SWIER9 0x00000200
607 #define EXTI_SWIER_SWIER10 0x00000400
608 #define EXTI_SWIER_SWIER11 0x00000800
609 #define EXTI_SWIER_SWIER12 0x00001000
610 #define EXTI_SWIER_SWIER13 0x00002000
611 #define EXTI_SWIER_SWIER14 0x00004000
612 #define EXTI_SWIER_SWIER15 0x00008000
613 #define EXTI_SWIER_SWIER16 0x00010000
614 #define EXTI_SWIER_SWIER17 0x00020000
615 #define EXTI_SWIER_SWIER18 0x00040000
616 #define EXTI_SWIER_SWIER19 0x00080000
618 #define EXTI_PR_PR0 0x00000001
619 #define EXTI_PR_PR1 0x00000002
620 #define EXTI_PR_PR2 0x00000004
621 #define EXTI_PR_PR3 0x00000008
622 #define EXTI_PR_PR4 0x00000010
623 #define EXTI_PR_PR5 0x00000020
624 #define EXTI_PR_PR6 0x00000040
625 #define EXTI_PR_PR7 0x00000080
626 #define EXTI_PR_PR8 0x00000100
627 #define EXTI_PR_PR9 0x00000200
628 #define EXTI_PR_PR10 0x00000400
629 #define EXTI_PR_PR11 0x00000800
630 #define EXTI_PR_PR12 0x00001000
631 #define EXTI_PR_PR13 0x00002000
632 #define EXTI_PR_PR14 0x00004000
633 #define EXTI_PR_PR15 0x00008000
634 #define EXTI_PR_PR16 0x00010000
635 #define EXTI_PR_PR17 0x00020000
636 #define EXTI_PR_PR18 0x00040000
637 #define EXTI_PR_PR19 0x00080000
642 #define EXTI9_5_IRQ 23
649 volatile uint32_t EVCR;
650 volatile uint32_t MAPR;
651 volatile uint32_t EXTICR[4];
653 volatile uint32_t MAPR2;
656 #define AFIO_BASE 0x40010000
657 static struct AFIO *const AFIO = (struct AFIO *const)AFIO_BASE;
659 #define AFIO_EXTICR1_EXTI0_PA 0x0000
660 #define AFIO_EXTICR1_EXTI0_PB 0x0001
661 #define AFIO_EXTICR1_EXTI0_PC 0x0002
662 #define AFIO_EXTICR1_EXTI0_PD 0x0003
664 #define AFIO_EXTICR1_EXTI1_PA 0x0000
665 #define AFIO_EXTICR1_EXTI1_PB 0x0010
666 #define AFIO_EXTICR1_EXTI1_PC 0x0020
667 #define AFIO_EXTICR1_EXTI1_PD 0x0030
669 #define AFIO_EXTICR1_EXTI2_PA 0x0000
670 #define AFIO_EXTICR1_EXTI2_PB 0x0100
671 #define AFIO_EXTICR1_EXTI2_PC 0x0200
672 #define AFIO_EXTICR1_EXTI2_PD 0x0300
674 #define AFIO_EXTICR1_EXTI3_PA 0x0000
675 #define AFIO_EXTICR1_EXTI3_PB 0x1000
676 #define AFIO_EXTICR1_EXTI3_PC 0x2000
677 #define AFIO_EXTICR1_EXTI3_PD 0x3000
679 #define AFIO_EXTICR2_EXTI4_PA 0x0000
680 #define AFIO_EXTICR2_EXTI4_PB 0x0001
681 #define AFIO_EXTICR2_EXTI4_PC 0x0002
682 #define AFIO_EXTICR2_EXTI4_PD 0x0003
684 #define AFIO_EXTICR2_EXTI5_PA 0x0000
685 #define AFIO_EXTICR2_EXTI5_PB 0x0010
686 #define AFIO_EXTICR2_EXTI5_PC 0x0020
687 #define AFIO_EXTICR2_EXTI5_PD 0x0030
689 #define AFIO_EXTICR2_EXTI6_PA 0x0000
690 #define AFIO_EXTICR2_EXTI6_PB 0x0100
691 #define AFIO_EXTICR2_EXTI6_PC 0x0200
692 #define AFIO_EXTICR2_EXTI6_PD 0x0300
694 #define AFIO_EXTICR2_EXTI7_PA 0x0000
695 #define AFIO_EXTICR2_EXTI7_PB 0x1000
696 #define AFIO_EXTICR2_EXTI7_PC 0x2000
697 #define AFIO_EXTICR2_EXTI7_PD 0x3000
699 #define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP 0x00000800
700 #define AFIO_MAPR_SWJ_CFG_DISABLE 0x04000000