]> mj.ucw.cz Git - home-hw.git/blob - test-opencm3/test.c
ocm3 test: debugging utilities
[home-hw.git] / test-opencm3 / test.c
1 #include "util.h"
2
3 #include <libopencm3/cm3/nvic.h>
4 #include <libopencm3/cm3/systick.h>
5 #include <libopencm3/stm32/rcc.h>
6 #include <libopencm3/stm32/gpio.h>
7 #include <libopencm3/stm32/usart.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_GPIOA);
14         rcc_periph_clock_enable(RCC_GPIOC);
15         rcc_periph_clock_enable(RCC_USART1);
16 }
17
18 static void gpio_setup(void)
19 {
20         gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO13);
21 }
22
23 static volatile u32 ms_ticks;
24
25 void sys_tick_handler(void)
26 {
27         ms_ticks++;
28 }
29
30 static void tick_setup(void)
31 {
32         systick_set_frequency(1000, 72000000);
33         systick_counter_enable();
34         systick_interrupt_enable();
35 }
36
37 static void delay_ms(uint ms)
38 {
39         u32 start_ticks = ms_ticks;
40         while (ms_ticks - start_ticks < ms)
41                 ;
42 }
43
44 static void usart_setup(void)
45 {
46                 gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO_USART1_TX);
47
48                 usart_set_baudrate(USART1, 115200);
49                 usart_set_databits(USART1, 8);
50                 usart_set_stopbits(USART1, USART_STOPBITS_1);
51                 usart_set_mode(USART1, USART_MODE_TX);
52                 usart_set_parity(USART1, USART_PARITY_NONE);
53                 usart_set_flow_control(USART1, USART_FLOWCONTROL_NONE);
54
55                 usart_enable(USART1);
56 }
57
58 int main(void)
59 {
60         clock_setup();
61         gpio_setup();
62         tick_setup();
63         usart_setup();
64
65         int cc = 32;
66         for (;;) {
67                 gpio_toggle(GPIOC, GPIO13);
68                 debug_putc(cc);
69                 cc++;
70                 if (cc >= 126) cc = 32;
71                 delay_ms(100);
72         }
73
74         return 0;
75 }