]> mj.ucw.cz Git - home-hw.git/blob - test-blink/test.c
Power daemon: A new daemon for relaying power meter data to MQTT
[home-hw.git] / test-blink / test.c
1 #include "util.h"
2
3 #include <libopencm3/cm3/cortex.h>
4 #include <libopencm3/cm3/nvic.h>
5 #include <libopencm3/cm3/systick.h>
6 #include <libopencm3/stm32/rcc.h>
7 #include <libopencm3/stm32/gpio.h>
8
9 static void clock_setup(void)
10 {
11         rcc_clock_setup_in_hse_8mhz_out_72mhz();
12
13         rcc_periph_clock_enable(RCC_GPIOC);
14
15         rcc_periph_reset_pulse(RST_GPIOC);
16 }
17
18 static void gpio_setup(void)
19 {
20         // PC13 = BluePill LED
21         gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO13);
22         gpio_clear(GPIOC, GPIO13);
23 }
24
25 static volatile u32 ms_ticks;
26
27 void sys_tick_handler(void)
28 {
29         ms_ticks++;
30 }
31
32 static void tick_setup(void)
33 {
34         systick_set_frequency(1000, 72000000);
35         systick_counter_enable();
36         systick_interrupt_enable();
37 }
38
39 static void delay_ms(uint ms)
40 {
41         u32 start_ticks = ms_ticks;
42         while (ms_ticks - start_ticks < ms)
43                 ;
44 }
45
46 int main(void)
47 {
48         clock_setup();
49         gpio_setup();
50         tick_setup();
51         cm_enable_interrupts();
52
53         for (;;) {
54                 gpio_toggle(GPIOC, GPIO13);
55                 delay_ms(100);
56                 gpio_toggle(GPIOC, GPIO13);
57                 delay_ms(500);
58         }
59
60         return 0;
61 }