ARM_minimal.
io.h
Zobrazit dokumentaci tohoto souboru.
1 #include <stdint.h>
2 #include <stddef.h>
6 #ifndef _IO_H
7 #define _IO_H
8 #define __IO volatile
10 
11 #ifdef ARM_CM0
12 // Vyzobano z STM stm32f0xx.h
15 struct RCC_Type {
16  __IO uint32_t CR;
17  __IO uint32_t CFGR;
18  __IO uint32_t CIR;
19  __IO uint32_t APB2RSTR;
20  __IO uint32_t APB1RSTR;
21  __IO uint32_t AHBENR;
22  __IO uint32_t APB2ENR;
23  __IO uint32_t APB1ENR;
24  __IO uint32_t BDCR;
25  __IO uint32_t CSR;
26  __IO uint32_t AHBRSTR;
27  __IO uint32_t CFGR2;
28  __IO uint32_t CFGR3;
29  __IO uint32_t CR2;
30 } ;
33 struct GPIO_Type {
34  __IO uint32_t MODER;
35  __IO uint16_t OTYPER;
36  uint16_t RESERVED0;
37  __IO uint32_t OSPEEDR;
38  __IO uint32_t PUPDR;
39  __IO uint16_t IDR;
40  uint16_t RESERVED1;
41  __IO uint16_t ODR;
42  uint16_t RESERVED2;
43  union { // Kompatibilita s F4 zavede trochu chaos, ale funkční - původně jeden 32.bit registr
44  __IO uint32_t BSRR;
45  struct { // Jde takto rozdělit (jako v F4) na dva 16. bitové registry
46  __IO uint16_t BSRRL;
47  __IO uint16_t BSRRH;
48  };
49  };
50  __IO uint32_t LCKR;
51  __IO uint32_t AFR[2];
52  __IO uint16_t BRR;
53  uint16_t RESERVED3;
54 } ;
55 
56 #define PERIPH_BASE ((uint32_t) 0x40000000)
57 #define AHBPERIPH_BASE (PERIPH_BASE + 0x00020000)
58 #define AHB2PERIPH_BASE (PERIPH_BASE + 0x08000000)
60 #define RCC_BASE (AHBPERIPH_BASE + 0x00001000)
61 #define GPIOC_BASE (AHB2PERIPH_BASE + 0x00000800)
63 #define RCC_AHBENR_GPIOCEN ((uint32_t)0x00080000)
65 // board specific
66 #define LEDPORT_BASE GPIOC_BASE
67 #define LEDCLK_GPIOEN RCC_AHBENR_GPIOCEN
68 #define LEDPIN 8
69 #define DELAY_TIME 0x40000
70 #define DELAY_SYST 4000000
72 typedef enum {
74  /****** Cortex-M0 Processor Exceptions Numbers **************************************************************/
75  NonMaskableInt_IRQn = -14,
77  SVC_IRQn = -5,
78  PendSV_IRQn = -2,
79  SysTick_IRQn = -1,
81  /****** STM32F051x4/STM32F051x6/STM32F051x8 specific Interrupt Numbers **************************************/
82  WWDG_IRQn = 0,
83  PVD_IRQn = 1,
84  RTC_IRQn = 2,
85  FLASH_IRQn = 3,
86  RCC_IRQn = 4,
90  TSC_IRQn = 8,
96  TIM1_CC_IRQn = 14,
97  TIM2_IRQn = 15,
98  TIM3_IRQn = 16,
100  TIM14_IRQn = 19,
101  TIM15_IRQn = 20,
102  TIM16_IRQn = 21,
103  TIM17_IRQn = 22,
104  I2C1_IRQn = 23,
105  I2C2_IRQn = 24,
106  SPI1_IRQn = 25,
107  SPI2_IRQn = 26,
108  USART1_IRQn = 27,
109  USART2_IRQn = 28,
112 
113 #define __CM0_REV 0
114 #define __MPU_PRESENT 0
115 #define __NVIC_PRIO_BITS 2
116 #define __Vendor_SysTickConfig 0
118 #include "core_cm0.h"
119 
120 #endif // ARM_CM0
121 #ifdef ARM_CM4
122 
123 // Vyzobano z STM stm32f4xx.h
124 // RCC
125 struct RCC_Type {
126  __IO uint32_t CR;
127  __IO uint32_t PLLCFGR;
128  __IO uint32_t CFGR;
129  __IO uint32_t CIR;
130  __IO uint32_t AHB1RSTR;
131  __IO uint32_t AHB2RSTR;
132  __IO uint32_t AHB3RSTR;
133  uint32_t RESERVED0;
134  __IO uint32_t APB1RSTR;
135  __IO uint32_t APB2RSTR;
136  uint32_t RESERVED1[2];
137  __IO uint32_t AHBENR;
138  __IO uint32_t AHB2ENR;
139  __IO uint32_t AHB3ENR;
140  uint32_t RESERVED2;
141  __IO uint32_t APB1ENR;
142  __IO uint32_t APB2ENR;
143  uint32_t RESERVED3[2];
144  __IO uint32_t AHB1LPENR;
145  __IO uint32_t AHB2LPENR;
146  __IO uint32_t AHB3LPENR;
147  uint32_t RESERVED4;
148  __IO uint32_t APB1LPENR;
149  __IO uint32_t APB2LPENR;
150  uint32_t RESERVED5[2];
151  __IO uint32_t BDCR;
152  __IO uint32_t CSR;
153  uint32_t RESERVED6[2];
154  __IO uint32_t SSCGR;
155  __IO uint32_t PLLI2SCFGR;
156 } ;
157 // GPIO
158 struct GPIO_Type {
159  __IO uint32_t MODER;
160  __IO uint32_t OTYPER;
161  __IO uint32_t OSPEEDR;
162  __IO uint32_t PUPDR;
163  __IO uint32_t IDR;
164  __IO uint32_t ODR;
165  __IO uint16_t BSRRL;
166  __IO uint16_t BSRRH;
167  __IO uint32_t LCKR;
168  __IO uint32_t AFR[2];
169 } ;
170 
171 #define PERIPH_BASE ((uint32_t)0x40000000)
172 #define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000)
173 #define RCC_BASE (AHB1PERIPH_BASE + 0x3800)
174 #define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00)
175 // board specific
176 #define LEDPORT_BASE GPIOD_BASE
177 #define LEDPIN 15
178 #define LEDCLK_GPIOEN ((uint32_t)0x00000008)
179 #define DELAY_TIME 0x200000
180 #define DELAY_SYST 8000000
183 typedef enum IRQn {
184  /****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/
185  NonMaskableInt_IRQn = -14,
186  MemoryManagement_IRQn = -12,
187  BusFault_IRQn = -11,
188  UsageFault_IRQn = -10,
189  SVCall_IRQn = -5,
190  DebugMonitor_IRQn = -4,
191  PendSV_IRQn = -2,
192  SysTick_IRQn = -1,
193  /****** STM32 specific Interrupt Numbers **********************************************************************/
194  WWDG_IRQn = 0,
195  PVD_IRQn = 1,
196  TAMP_STAMP_IRQn = 2,
197  RTC_WKUP_IRQn = 3,
198  FLASH_IRQn = 4,
199  RCC_IRQn = 5,
200  EXTI0_IRQn = 6,
201  EXTI1_IRQn = 7,
202  EXTI2_IRQn = 8,
203  EXTI3_IRQn = 9,
204  EXTI4_IRQn = 10,
205  DMA1_Stream0_IRQn = 11,
206  DMA1_Stream1_IRQn = 12,
207  DMA1_Stream2_IRQn = 13,
208  DMA1_Stream3_IRQn = 14,
209  DMA1_Stream4_IRQn = 15,
210  DMA1_Stream5_IRQn = 16,
211  DMA1_Stream6_IRQn = 17,
212  ADC_IRQn = 18,
213  CAN1_TX_IRQn = 19,
214  CAN1_RX0_IRQn = 20,
215  CAN1_RX1_IRQn = 21,
216  CAN1_SCE_IRQn = 22,
217  EXTI9_5_IRQn = 23,
218  TIM1_BRK_TIM9_IRQn = 24,
219  TIM1_UP_TIM10_IRQn = 25,
220  TIM1_TRG_COM_TIM11_IRQn = 26,
221  TIM1_CC_IRQn = 27,
222  TIM2_IRQn = 28,
223  TIM3_IRQn = 29,
224  TIM4_IRQn = 30,
225  I2C1_EV_IRQn = 31,
226  I2C1_ER_IRQn = 32,
227  I2C2_EV_IRQn = 33,
228  I2C2_ER_IRQn = 34,
229  SPI1_IRQn = 35,
230  SPI2_IRQn = 36,
231  USART1_IRQn = 37,
232  USART2_IRQn = 38,
233  USART3_IRQn = 39,
234  EXTI15_10_IRQn = 40,
235  RTC_Alarm_IRQn = 41,
236  OTG_FS_WKUP_IRQn = 42,
237  TIM8_BRK_TIM12_IRQn = 43,
238  TIM8_UP_TIM13_IRQn = 44,
239  TIM8_TRG_COM_TIM14_IRQn = 45,
240  TIM8_CC_IRQn = 46,
241  DMA1_Stream7_IRQn = 47,
242  FSMC_IRQn = 48,
243  SDIO_IRQn = 49,
244  TIM5_IRQn = 50,
245  SPI3_IRQn = 51,
246  UART4_IRQn = 52,
247  UART5_IRQn = 53,
248  TIM6_DAC_IRQn = 54,
249  TIM7_IRQn = 55,
250  DMA2_Stream0_IRQn = 56,
251  DMA2_Stream1_IRQn = 57,
252  DMA2_Stream2_IRQn = 58,
253  DMA2_Stream3_IRQn = 59,
254  DMA2_Stream4_IRQn = 60,
255  ETH_IRQn = 61,
256  ETH_WKUP_IRQn = 62,
257  CAN2_TX_IRQn = 63,
258  CAN2_RX0_IRQn = 64,
259  CAN2_RX1_IRQn = 65,
260  CAN2_SCE_IRQn = 66,
261  OTG_FS_IRQn = 67,
262  DMA2_Stream5_IRQn = 68,
263  DMA2_Stream6_IRQn = 69,
264  DMA2_Stream7_IRQn = 70,
265  USART6_IRQn = 71,
266  I2C3_EV_IRQn = 72,
267  I2C3_ER_IRQn = 73,
268  OTG_HS_EP1_OUT_IRQn = 74,
269  OTG_HS_EP1_IN_IRQn = 75,
270  OTG_HS_WKUP_IRQn = 76,
271  OTG_HS_IRQn = 77,
272  DCMI_IRQn = 78,
273  CRYP_IRQn = 79,
274  HASH_RNG_IRQn = 80,
275  FPU_IRQn = 81
276 } IRQn_Type;
277 
278 #define __CM4_REV 0x0001
279 #define __MPU_PRESENT 1
280 #define __NVIC_PRIO_BITS 4
281 #define __Vendor_SysTickConfig 0
283 #include "core_cm4.h"
284 
285 #endif // ARM_CM4
286 typedef struct RCC_Type RCC_TypeDef;
289 typedef struct GPIO_Type GPIO_TypeDef;
290 // Funkce obsluhující vektor reset je bez návratu, nemusí tedy nic uklízet na zásobník.
291 // Proto ji můžeme definovat jako naked, pro případné zkrácení kódu. Není to však nutné (alespoň pro gcc).
293 #define NAKED __attribute__((naked))
295 // Naplň část ram definovaným obsahem - debug stacku.
297 static inline void fillram (void) {
298  __ASM volatile (
299  "ldr r0, =0x20000800\n\t" // od
300  "ldr r1, =0x20001800\n\t" // do
301  "ldr r2, =0xDEADBEEF\n" // obsah
302  "floop:\n\t"
303  "str r2, [r0, #0]\n\t"
304  "add r0, r0, #4\n\t"
305  "cmp r0, r1\n\t"
306  "bne floop\n\t"
307 // "bkpt 0\n"
308  );
309 }
310 
311 
312 #endif// _IO_H
Definition: io.h:111
Definition: io.h:91
Definition: io.h:84
__IO uint32_t BSRR
Takto to bylo původně, jeden 32. bit registr Address offset: 0x18.
Definition: io.h:44
__IO uint16_t OTYPER
Definition: io.h:35
uint16_t RESERVED2
Definition: io.h:42
Definition: io.h:109
__IO uint16_t IDR
Definition: io.h:39
__IO uint32_t APB1RSTR
Definition: io.h:20
__IO uint32_t APB2RSTR
Definition: io.h:19
Definition: io.h:90
uint16_t RESERVED1
Definition: io.h:40
Definition: io.h:88
IRQn_Type
Interrupt Numbers.
Definition: io.h:74
Definition: io.h:110
Definition: io.h:106
__IO uint32_t LCKR
Definition: io.h:50
Definition: io.h:105
__IO uint16_t ODR
Definition: io.h:41
__IO uint16_t BSRRL
spodní je nastavovací
Definition: io.h:46
Definition: io.h:104
__IO uint32_t CFGR2
Definition: io.h:27
Definition: io.h:79
Definition: io.h:102
Definition: io.h:103
Definition: io.h:98
Definition: io.h:87
__IO uint32_t CR
Definition: io.h:16
Definition: io.h:93
Definition: io.h:78
__IO uint32_t AHBRSTR
Definition: io.h:26
__IO uint32_t CFGR
Definition: io.h:17
Definition: io.h:86
__IO uint32_t AHBENR
Definition: io.h:21
Definition: io.h:97
__IO uint32_t MODER
Definition: io.h:34
__IO uint32_t OSPEEDR
Definition: io.h:37
Definition: io.h:95
__IO uint16_t BRR
Definition: io.h:52
__IO uint32_t PUPDR
Definition: io.h:38
__IO uint16_t BSRRH
horní je nulovací
Definition: io.h:47
__IO uint32_t CR2
Definition: io.h:29
Definition: io.h:100
Definition: io.h:85
Definition: io.h:80
Definition: io.h:83
Definition: io.h:99
static void fillram(void)
Debug stack only.
Definition: io.h:298
Definition: io.h:92
__IO uint32_t BDCR
Definition: io.h:24
__IO uint32_t CFGR3
Definition: io.h:28
uint16_t RESERVED0
Definition: io.h:36
__IO uint32_t CIR
Definition: io.h:18
__IO uint32_t CSR
Definition: io.h:25
Definition: io.h:76
Definition: io.h:107
__IO uint32_t APB1ENR
Definition: io.h:23
Definition: io.h:89
uint16_t RESERVED3
Definition: io.h:53
Definition: io.h:15
Definition: io.h:77
__IO uint32_t APB2ENR
Definition: io.h:22
#define __IO
Takhle je to použito v ST library.
Definition: io.h:9
Definition: io.h:33
Definition: io.h:108
Definition: io.h:101
Definition: io.h:96
Definition: io.h:94