Support VERIFY reset feature
[gnuk/gnuk.git] / src / stm32f103.h
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)
5
6 struct RCC {
7   volatile uint32_t CR;
8   volatile uint32_t CFGR;
9   volatile uint32_t CIR;
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;
17 };
18
19 #define RCC_BASE                (AHBPERIPH_BASE + 0x1000)
20 static struct RCC *const RCC = ((struct RCC *const)RCC_BASE);
21
22 #define RCC_AHBENR_DMA1EN       0x00000001
23 #define RCC_AHBENR_CRCEN        0x00000040
24
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
31
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
38
39 #define  CRC_CR_RESET                        0x00000001
40
41 struct CRC {
42   volatile uint32_t DR;
43   volatile uint8_t  IDR;
44   uint8_t   RESERVED0;
45   uint16_t  RESERVED1;
46   volatile uint32_t CR;
47 };
48
49 #define CRC_BASE              (AHBPERIPH_BASE + 0x3000)
50 static struct CRC *const CRC = ((struct CRC *const)CRC_BASE);
51
52
53 struct ADC {
54   volatile uint32_t SR;
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;
73   volatile uint32_t DR;
74 };
75
76 #define ADC1_BASE             (APB2PERIPH_BASE + 0x2400)
77 #define ADC2_BASE             (APB2PERIPH_BASE + 0x2800)
78
79 static struct ADC *const ADC1 = (struct ADC *const)ADC1_BASE;
80 static struct ADC *const ADC2 = (struct ADC *const)ADC2_BASE;
81
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
86
87 #define  ADC_CR1_SCAN            0x00000100
88
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
102
103 struct DMA_Channel {
104   volatile uint32_t CCR;
105   volatile uint32_t CNDTR;
106   volatile uint32_t CPAR;
107   volatile uint32_t CMAR;
108 };
109
110 struct DMA {
111   volatile uint32_t ISR;
112   volatile uint32_t IFCR;
113 };
114
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
124
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)
129
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
148
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
177
178 #define DMA1_BASE             (AHBPERIPH_BASE + 0x0000)
179 static struct DMA *const DMA1 = (struct DMA *const)DMA1_BASE;
180
181 #define DMA1_Channel1_BASE    (AHBPERIPH_BASE + 0x0008)
182 static struct DMA_Channel *const DMA1_Channel1 =
183   (struct DMA_Channel *const)DMA1_Channel1_BASE;
184
185 /* System Control Block */
186 struct SCB
187 {
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;
209 };
210
211 #define SCS_BASE 0xE000E000
212 #define SCB_BASE (SCS_BASE + 0x0D00)
213 static struct SCB *const SCB = (struct SCB *const)SCB_BASE;
214
215 /* Timer */
216 struct TIM
217 {
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;
238 };
239
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;
246
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
259
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
275
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
285
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
291
292 #define  TIM_SMCR_ETPS   0x3000
293 #define  TIM_SMCR_ETPS_0 0x1000
294 #define  TIM_SMCR_ETPS_1 0x2000
295
296 #define  TIM_SMCR_ECE    0x4000
297 #define  TIM_SMCR_ETP    0x8000
298
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
314
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
327
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
336
337 #define  TIM_CCMR1_CC1S   0x0003
338 #define  TIM_CCMR1_CC1S_0 0x0001
339 #define  TIM_CCMR1_CC1S_1 0x0002
340
341 #define  TIM_CCMR1_OC1FE  0x0004
342 #define  TIM_CCMR1_OC1PE  0x0008
343
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
348
349 #define  TIM_CCMR1_OC1CE  0x0080
350
351 #define  TIM_CCMR1_CC2S   0x0300
352 #define  TIM_CCMR1_CC2S_0 0x0100
353 #define  TIM_CCMR1_CC2S_1 0x0200
354
355 #define  TIM_CCMR1_OC2FE  0x0400
356 #define  TIM_CCMR1_OC2PE  0x0800
357
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
362
363 #define  TIM_CCMR1_OC2CE  0x8000
364
365
366 #define  TIM_CCMR1_IC1PSC   0x000C
367 #define  TIM_CCMR1_IC1PSC_0 0x0004
368 #define  TIM_CCMR1_IC1PSC_1 0x0008
369
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
375
376 #define  TIM_CCMR1_IC2PSC   0x0C00
377 #define  TIM_CCMR1_IC2PSC_0 0x0400
378 #define  TIM_CCMR1_IC2PSC_1 0x0800
379
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
385
386 #define  TIM_CCMR2_CC3S     0x0003
387 #define  TIM_CCMR2_CC3S_0   0x0001
388 #define  TIM_CCMR2_CC3S_1   0x0002
389
390 #define  TIM_CCMR2_OC3FE    0x0004
391 #define  TIM_CCMR2_OC3PE    0x0008
392
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
397
398 #define  TIM_CCMR2_OC3CE    0x0080
399
400 #define  TIM_CCMR2_CC4S     0x0300
401 #define  TIM_CCMR2_CC4S_0   0x0100
402 #define  TIM_CCMR2_CC4S_1   0x0200
403
404 #define  TIM_CCMR2_OC4FE    0x0400
405 #define  TIM_CCMR2_OC4PE    0x0800
406
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
411
412 #define  TIM_CCMR2_OC4CE    0x8000
413
414
415 #define  TIM_CCMR2_IC3PSC   0x000C
416 #define  TIM_CCMR2_IC3PSC_0 0x0004
417 #define  TIM_CCMR2_IC3PSC_1 0x0008
418
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
424
425 #define  TIM_CCMR2_IC4PSC   0x0C00
426 #define  TIM_CCMR2_IC4PSC_0 0x0400
427 #define  TIM_CCMR2_IC4PSC_1 0x0800
428
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
434
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
449
450 #define  TIM_CNT_CNT        0xFFFF
451
452 #define  TIM_PSC_PSC        0xFFFF
453
454 #define  TIM_ARR_ARR        0xFFFF
455
456 #define  TIM_RCR_REP        0xFF
457
458 #define  TIM_CCR1_CCR1      0xFFFF
459 #define  TIM_CCR2_CCR2      0xFFFF
460 #define  TIM_CCR3_CCR3      0xFFFF
461 #define  TIM_CCR4_CCR4      0xFFFF
462
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
472
473 #define  TIM_BDTR_LOCK      0x0300
474 #define  TIM_BDTR_LOCK_0    0x0100
475 #define  TIM_BDTR_LOCK_1    0x0200
476
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
483
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
490
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
497
498 #define  TIM_DMAR_DMAB      0xFFFF
499 \f
500 struct EXTI
501 {
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;
508 };
509
510 #define EXTI_BASE 0x40010400
511 static struct EXTI *const EXTI = (struct EXTI *const)EXTI_BASE;
512
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
533
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
554
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
575
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
596
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
617
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
638 \f
639 #define EXTI0_IRQ    6
640 #define EXTI1_IRQ    7
641 #define EXTI2_IRQ    8
642 #define EXTI9_5_IRQ 23
643 #define TIM2_IRQ    28
644 #define TIM3_IRQ    29
645 #define TIM4_IRQ    30
646 \f
647 struct AFIO
648 {
649   volatile uint32_t EVCR;
650   volatile uint32_t MAPR;
651   volatile uint32_t EXTICR[4];
652   uint32_t RESERVED0;
653   volatile uint32_t MAPR2;
654 };
655
656 #define AFIO_BASE 0x40010000
657 static struct AFIO *const AFIO = (struct AFIO *const)AFIO_BASE;
658
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
663
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
668
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
673
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
678
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
683
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
688
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
693
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
698
699 #define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP 0x00000800
700 #define AFIO_MAPR_SWJ_CFG_DISABLE         0x04000000