]> begriffs open source - cmsis-driver-bare/blob - test/cmsis-validate.c
Scope GPIO driver vars to main
[cmsis-driver-bare] / test / cmsis-validate.c
1 #include <stdlib.h>
2
3 #include "Driver_GPIO.h"
4 #include "stm32f4xx.h"
5
6 #include "sram_vtor.h"
7
8 #include "cmsis_dv.h"
9 #include "cmsis_os2.h"
10
11 volatile long gTicks;
12 void tick(void)
13 {
14         gTicks++;
15 }
16
17 osStatus_t osDelay (uint32_t t)
18 {
19         uint32_t start = gTicks;
20         // modular subtraction is resillient against
21         // up to a single overflow in gTicks
22         while (gTicks - start < t)
23                 __WFI();
24         return 0;
25 }
26
27 void init_clock(void)
28 {
29         SystemCoreClockUpdate();
30         SysTick_Config(SystemCoreClock / 1000);
31         NVIC_SetVector(SysTick_IRQn, (uintptr_t)tick);
32         NVIC_EnableIRQ(SysTick_IRQn);
33
34         RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
35         (void)RCC->AHB1ENR;
36         (void)RCC->AHB1ENR;
37 }
38
39 int main(void)
40 {
41         NVIC_Relocate_VTOR();
42         init_clock();
43
44         cmsis_dv(NULL);
45         return EXIT_SUCCESS;
46 }