TinyFanControl-Firmware/src/main.c

71 lines
1.3 KiB
C

#include <libopencm3/stm32/rcc.h>
#include <libopencm3/cm3/systick.h>
#include <libopencmsis/core_cm3.h>
#include "uart.h"
#include "fan_ctrl_pwm.h"
#include "fan_ctrl_dc.h"
static void clock_setup(void)
{
/* We are running on MSI (2.1 MHz) after boot. */
rcc_periph_clock_enable(RCC_GPIOA); // for basically everything
rcc_periph_clock_enable(RCC_GPIOC); // for UART only
/* Enable clocks for USART2. */
rcc_periph_clock_enable(RCC_USART2);
}
/* Set up systick to fire freq times per second */
static void init_systick(int freq)
{
systick_set_clocksource(STK_CSR_CLKSOURCE_AHB);
/* clear counter so it starts right away */
STK_CVR = 0;
systick_set_reload(rcc_ahb_frequency / freq);
systick_counter_enable();
systick_interrupt_enable();
}
int main(void)
{
uint64_t timebase_ms = 0;
// delay startup a bit to allow debugger to connect before debug pins are
// reconfigured to UART.
for(uint32_t i = 0; i < 1000000; i++) {
__asm__("nop");
}
clock_setup();
init_systick(1000);
uart_init();
fan_ctrl_pwm_init();
fan_ctrl_dc_init();
uart_enqueue("TinyFanControl v" VERSION " initialized.\n");
// triggered every 1 ms
while (1) {
__WFI();
}
return 0;
}
/* Called when systick fires */
void sys_tick_handler(void)
{
//wait_frame = 0;
}
void hard_fault_handler(void)
{
while (1);
}