fix reset handling
[gnuk/neug.git] / src / stm32f103.h
1 #define PERIPH_BASE     0x40000000
2 #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
3 #define AHBPERIPH_BASE  (PERIPH_BASE + 0x20000)
4
5 #define RCC_APB2RSTR_ADC1RST 0x00000200
6 #define RCC_APB2RSTR_ADC2RST 0x00000400
7
8 struct RCC {
9   volatile uint32_t CR;
10   volatile uint32_t CFGR;
11   volatile uint32_t CIR;
12   volatile uint32_t APB2RSTR;
13   volatile uint32_t APB1RSTR;
14   volatile uint32_t AHBENR;
15   volatile uint32_t APB2ENR;
16   volatile uint32_t APB1ENR;
17   volatile uint32_t BDCR;
18   volatile uint32_t CSR;
19 };
20
21 #define RCC_BASE                (AHBPERIPH_BASE + 0x1000)
22 static struct RCC *const RCC = ((struct RCC *const)RCC_BASE);
23
24 #define RCC_AHBENR_DMA1EN       0x00000001
25 #define RCC_AHBENR_CRCEN        0x00000040
26
27 #define RCC_APB2ENR_ADC1EN      0x00000200
28 #define RCC_APB2ENR_ADC2EN      0x00000400
29
30 #define  CRC_CR_RESET                        0x00000001
31
32 struct CRC {
33   volatile uint32_t DR;
34   volatile uint8_t  IDR;
35   uint8_t   RESERVED0;
36   uint16_t  RESERVED1;
37   volatile uint32_t CR;
38 };
39
40 #define CRC_BASE              (AHBPERIPH_BASE + 0x3000)
41 static struct CRC *const CRC = ((struct CRC *const)CRC_BASE);
42
43
44 struct ADC {
45   volatile uint32_t SR;
46   volatile uint32_t CR1;
47   volatile uint32_t CR2;
48   volatile uint32_t SMPR1;
49   volatile uint32_t SMPR2;
50   volatile uint32_t JOFR1;
51   volatile uint32_t JOFR2;
52   volatile uint32_t JOFR3;
53   volatile uint32_t JOFR4;
54   volatile uint32_t HTR;
55   volatile uint32_t LTR;
56   volatile uint32_t SQR1;
57   volatile uint32_t SQR2;
58   volatile uint32_t SQR3;
59   volatile uint32_t JSQR;
60   volatile uint32_t JDR1;
61   volatile uint32_t JDR2;
62   volatile uint32_t JDR3;
63   volatile uint32_t JDR4;
64   volatile uint32_t DR;
65 };
66
67 #define ADC1_BASE             (APB2PERIPH_BASE + 0x2400)
68 #define ADC2_BASE             (APB2PERIPH_BASE + 0x2800)
69
70 static struct ADC *const ADC1 = (struct ADC *const)ADC1_BASE;
71 static struct ADC *const ADC2 = (struct ADC *const)ADC2_BASE;
72
73 #define  ADC_CR1_DUALMOD_0       0x00010000
74 #define  ADC_CR1_DUALMOD_1       0x00020000
75 #define  ADC_CR1_DUALMOD_2       0x00040000
76 #define  ADC_CR1_DUALMOD_3       0x00080000
77
78 #define  ADC_CR1_SCAN            0x00000100
79
80 #define  ADC_CR2_ADON            0x00000001
81 #define  ADC_CR2_CONT            0x00000002
82 #define  ADC_CR2_CAL             0x00000004
83 #define  ADC_CR2_RSTCAL          0x00000008
84 #define  ADC_CR2_DMA             0x00000100
85 #define  ADC_CR2_ALIGN           0x00000800
86 #define  ADC_CR2_EXTSEL          0x000E0000
87 #define  ADC_CR2_EXTSEL_0        0x00020000
88 #define  ADC_CR2_EXTSEL_1        0x00040000
89 #define  ADC_CR2_EXTSEL_2        0x00080000
90 #define  ADC_CR2_EXTTRIG         0x00100000
91 #define  ADC_CR2_SWSTART         0x00400000
92 #define  ADC_CR2_TSVREFE         0x00800000
93
94 struct DMA_Channel {
95   volatile uint32_t CCR;
96   volatile uint32_t CNDTR;
97   volatile uint32_t CPAR;
98   volatile uint32_t CMAR;
99 };
100
101 struct DMA {
102   volatile uint32_t ISR;
103   volatile uint32_t IFCR;
104 };
105
106 #define STM32_DMA_CR_MINC           DMA_CCR1_MINC
107 #define STM32_DMA_CR_MSIZE_WORD     DMA_CCR1_MSIZE_1
108 #define STM32_DMA_CR_PSIZE_WORD     DMA_CCR1_PSIZE_1
109 #define STM32_DMA_CR_TCIE           DMA_CCR1_TCIE
110 #define STM32_DMA_CR_TEIE           DMA_CCR1_TEIE
111 #define STM32_DMA_CR_HTIE           DMA_CCR1_HTIE
112 #define STM32_DMA_ISR_TEIF          DMA_ISR_TEIF1
113 #define STM32_DMA_ISR_HTIF          DMA_ISR_HTIF1
114 #define STM32_DMA_ISR_TCIF          DMA_ISR_TCIF1
115
116 #define STM32_DMA_ISR_MASK          0x0F
117 #define STM32_DMA_CCR_RESET_VALUE   0x00000000
118 #define STM32_DMA_CR_PL_MASK        DMA_CCR1_PL
119 #define STM32_DMA_CR_PL(n)          ((n) << 12)
120
121 #define  DMA_CCR1_EN                         0x00000001
122 #define  DMA_CCR1_TCIE                       0x00000002
123 #define  DMA_CCR1_HTIE                       0x00000004
124 #define  DMA_CCR1_TEIE                       0x00000008
125 #define  DMA_CCR1_DIR                        0x00000010
126 #define  DMA_CCR1_CIRC                       0x00000020
127 #define  DMA_CCR1_PINC                       0x00000040
128 #define  DMA_CCR1_MINC                       0x00000080
129 #define  DMA_CCR1_PSIZE                      0x00000300
130 #define  DMA_CCR1_PSIZE_0                    0x00000100
131 #define  DMA_CCR1_PSIZE_1                    0x00000200
132 #define  DMA_CCR1_MSIZE                      0x00000C00
133 #define  DMA_CCR1_MSIZE_0                    0x00000400
134 #define  DMA_CCR1_MSIZE_1                    0x00000800
135 #define  DMA_CCR1_PL                         0x00003000
136 #define  DMA_CCR1_PL_0                       0x00001000
137 #define  DMA_CCR1_PL_1                       0x00002000
138 #define  DMA_CCR1_MEM2MEM                    0x00004000
139
140 #define  DMA_ISR_GIF1                        0x00000001
141 #define  DMA_ISR_TCIF1                       0x00000002
142 #define  DMA_ISR_HTIF1                       0x00000004
143 #define  DMA_ISR_TEIF1                       0x00000008
144 #define  DMA_ISR_GIF2                        0x00000010
145 #define  DMA_ISR_TCIF2                       0x00000020
146 #define  DMA_ISR_HTIF2                       0x00000040
147 #define  DMA_ISR_TEIF2                       0x00000080
148 #define  DMA_ISR_GIF3                        0x00000100
149 #define  DMA_ISR_TCIF3                       0x00000200
150 #define  DMA_ISR_HTIF3                       0x00000400
151 #define  DMA_ISR_TEIF3                       0x00000800
152 #define  DMA_ISR_GIF4                        0x00001000
153 #define  DMA_ISR_TCIF4                       0x00002000
154 #define  DMA_ISR_HTIF4                       0x00004000
155 #define  DMA_ISR_TEIF4                       0x00008000
156 #define  DMA_ISR_GIF5                        0x00010000
157 #define  DMA_ISR_TCIF5                       0x00020000
158 #define  DMA_ISR_HTIF5                       0x00040000
159 #define  DMA_ISR_TEIF5                       0x00080000
160 #define  DMA_ISR_GIF6                        0x00100000
161 #define  DMA_ISR_TCIF6                       0x00200000
162 #define  DMA_ISR_HTIF6                       0x00400000
163 #define  DMA_ISR_TEIF6                       0x00800000
164 #define  DMA_ISR_GIF7                        0x01000000
165 #define  DMA_ISR_TCIF7                       0x02000000
166 #define  DMA_ISR_HTIF7                       0x04000000
167 #define  DMA_ISR_TEIF7                       0x08000000
168
169 #define DMA1_BASE             (AHBPERIPH_BASE + 0x0000)
170 static struct DMA *const DMA1 = (struct DMA *const)DMA1_BASE;
171
172 #define DMA1_Channel1_BASE    (AHBPERIPH_BASE + 0x0008)
173 static struct DMA_Channel *const DMA1_Channel1 =
174   (struct DMA_Channel *const)DMA1_Channel1_BASE;
175
176 /* System Control Block */
177 struct SCB
178 {
179   volatile uint32_t CPUID;
180   volatile uint32_t ICSR;
181   volatile uint32_t VTOR;
182   volatile uint32_t AIRCR;
183   volatile uint32_t SCR;
184   volatile uint32_t CCR;
185   volatile uint8_t  SHP[12];
186   volatile uint32_t SHCSR;
187   volatile uint32_t CFSR;
188   volatile uint32_t HFSR;
189   volatile uint32_t DFSR;
190   volatile uint32_t MMFAR;
191   volatile uint32_t BFAR;
192   volatile uint32_t AFSR;
193   volatile uint32_t PFR[2];
194   volatile uint32_t DFR;
195   volatile uint32_t ADR;
196   volatile uint32_t MMFR[4];
197   volatile uint32_t ISAR[5];
198   uint32_t RESERVED0[5];
199   volatile uint32_t CPACR;
200 };
201
202 #define SCS_BASE 0xE000E000
203 #define SCB_BASE (SCS_BASE + 0x0D00)
204 static struct SCB *const SCB = (struct SCB *const)SCB_BASE;