diff options
author | xengineering <me@xengineering.eu> | 2022-01-23 13:36:16 +0100 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2022-01-23 13:36:16 +0100 |
commit | 06108658053efd7cc0743ee5caa913b7bdfa0260 (patch) | |
tree | ba9a756ebd881f795115530feeb446af94cdb70a /firmware/src/main.c | |
parent | 3a2244d1c094b7722fa286eb24effb0b631d81aa (diff) | |
download | ledcontrol-06108658053efd7cc0743ee5caa913b7bdfa0260.tar ledcontrol-06108658053efd7cc0743ee5caa913b7bdfa0260.tar.zst ledcontrol-06108658053efd7cc0743ee5caa913b7bdfa0260.zip |
Simplify structure of firmware directory
Diffstat (limited to 'firmware/src/main.c')
-rw-r--r-- | firmware/src/main.c | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/firmware/src/main.c b/firmware/src/main.c deleted file mode 100644 index 8e39278..0000000 --- a/firmware/src/main.c +++ /dev/null @@ -1,143 +0,0 @@ -// vim: shiftwidth=4 tabstop=4 noexpandtab - - -#include <libopencm3/stm32/rcc.h> -#include <libopencm3/stm32/gpio.h> -#include <libopencm3/stm32/timer.h> -#include <libopencm3/cm3/nvic.h> - - -static void clock_init(void); -static void gpio_init(void); -static void nvic_init(void); -static void timer_init(void); - -void tim2_isr(void); - - -void main(void) -{ - clock_init(); - gpio_init(); - gpio_clear(GPIOC, GPIO13); // set onboard LED on - nvic_init(); - timer_init(); - - while(1); // wait forever -} - - -static void clock_init(void) -{ - // set sysclk to 72 MHz via external 8 MHz crystal - rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]); - - // enable clocks for GPIO ports B and C - rcc_periph_clock_enable(RCC_GPIOB); - rcc_periph_clock_enable(RCC_GPIOC); - - // enable clock for timer 2 (blinking) - rcc_periph_clock_enable(RCC_TIM2); - - // enable clock for timer 3 (PWM) - rcc_periph_clock_enable(RCC_TIM3); - - // enable clock for alternate functions - rcc_periph_clock_enable(RCC_AFIO); // TODO is this necessary? -} - - -static void gpio_init(void) -{ - // init PC13 onboard LED for blinking - gpio_set_mode( - GPIOC, - GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_PUSHPULL, - GPIO13 - ); - - // setup PB0 (connected to TIM3_CH3) for PWM - gpio_set_mode( - GPIOB, - GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, - GPIO_TIM3_CH3 - ); -} - - -static void nvic_init(void) -{ - // enable timer 2 interrupt and set priority - nvic_enable_irq(NVIC_TIM2_IRQ); - nvic_set_priority(NVIC_TIM2_IRQ, 1); -} - - -static void timer_init(void) -{ - // setup timer 2 for blinking - timer_set_counter(TIM2, 1); - timer_set_prescaler(TIM2, 1440); - timer_set_period(TIM2, 50); - - // enable timer / counter 2 and the corresponding interrupt for blinking - timer_enable_irq(TIM2, TIM_DIER_UIE); - timer_enable_counter(TIM2); - - /* - enable timer / counter 3 - */ - - /* Clock division and mode */ - TIM3_CR1 = TIM_CR1_CKD_CK_INT | TIM_CR1_CMS_EDGE; - /* Period */ - TIM3_ARR = 65535; - /* Prescaler */ - TIM3_PSC = 0; - TIM3_EGR = TIM_EGR_UG; - - /* ---- */ - /* Output compare 3 mode and preload */ - TIM3_CCMR2 |= TIM_CCMR2_OC3M_PWM1 | TIM_CCMR2_OC3PE; - - /* Polarity and state */ - TIM3_CCER |= TIM_CCER_CC3P | TIM_CCER_CC3E; - //TIM3_CCER |= TIM_CCER_CC3E; - - /* Capture compare value */ - TIM3_CCR3 = 30000; - - /* ---- */ - /* ARR reload enable */ - TIM3_CR1 |= TIM_CR1_ARPE; - - /* Counter enable */ - TIM3_CR1 |= TIM_CR1_CEN; -} - - -void tim2_isr(void) -{ - // PWM handling - static uint32_t pwm_value; - if (pwm_value == 0) { - pwm_value = 65535; - } - else { - pwm_value -= 20; - } - TIM3_CCR3 = pwm_value; - - // toggle blink LED - static uint32_t counter; - counter += 1; - if (counter > 500) { - gpio_toggle(GPIOC, GPIO13); - counter = 0; - } - - // clear interrrupt flag - TIM_SR(TIM2) &= ~TIM_SR_UIF; -} |