]> wirehaze git hosting - stm32f411ceu6.git/blob - kernel.c

wirehaze git hosting

blink blink
[stm32f411ceu6.git] / kernel.c
1 extern unsigned int _sram_end;
2 extern unsigned int _data_vma_start;
3 extern unsigned int _data_vma_end;
4 extern unsigned int _data_lma_start;
5 extern unsigned int _bss_vma_start;
6 extern unsigned int _bss_vma_end;
7
8 #define RCC_AHB1 ((volatile unsigned int * const) 0x40023830)
9 #define GPIOC_MODER ((volatile unsigned int * const) 0x40020800)
10 #define GPIOC_ODR ((volatile unsigned int * const) 0x40020814)
11
12 static void
13 delay (void)
14 {
15 volatile unsigned int i;
16 for (i = 0; i < 500000; i++);
17 }
18
19 static void
20 reset_handler (void)
21 {
22 unsigned int *src, *dst;
23
24 /* relocate .data to sram */
25 src = &_data_lma_start;
26 dst = &_data_vma_start;
27
28 while (dst < &_data_vma_end)
29 *(dst++) = *(src++);
30
31 /* initialize .bss */
32 dst = &_bss_vma_start;
33
34 while (dst < &_bss_vma_end)
35 *(dst++) = 0;
36
37 /* blink blink */
38 *RCC_AHB1 |= (1u << 2);
39 *GPIOC_MODER &= ~(3u << 26);
40 *GPIOC_MODER |= (1u << 26);
41
42 while (1)
43 {
44 *GPIOC_ODR ^= (1u << 13);
45 delay ();
46 }
47 }
48
49 __attribute__ ((section (".vtbl"), used))
50 static unsigned long const vector_table[] = {
51 (unsigned long) &_sram_end,
52 (unsigned long) reset_handler,
53 };