From 8f2da892a66328d0a808ed94561f8701ae3d9826 Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Mon, 2 Jun 2014 19:55:52 +0100 Subject: [PATCH] Extract led and buzzer hardware initialisation from system.c. --- Makefile | 6 +++ src/main/drivers/light_led.c | 26 +++++++++++ src/main/drivers/light_led.h | 2 + src/main/drivers/light_led_stm32f10x.c | 53 +++++++++++++++++++++++ src/main/drivers/light_led_stm32f30x.c | 49 +++++++++++++++++++++ src/main/drivers/sound_beeper.c | 2 +- src/main/drivers/sound_beeper.h | 2 + src/main/drivers/sound_beeper_stm32f10x.c | 30 +++++++++++++ src/main/drivers/sound_beeper_stm32f30x.c | 27 ++++++++++++ src/main/drivers/system.c | 35 +-------------- src/main/target/CHEBUZZF3/target.h | 5 +++ src/main/target/NAZE/target.h | 6 +++ src/main/target/NAZE32PRO/target.h | 2 + src/main/target/OLIMEXINO/target.h | 2 + src/main/target/STM32F3DISCOVERY/target.h | 7 +++ 15 files changed, 219 insertions(+), 35 deletions(-) create mode 100644 src/main/drivers/light_led.c create mode 100644 src/main/drivers/light_led_stm32f10x.c create mode 100644 src/main/drivers/light_led_stm32f30x.c create mode 100644 src/main/drivers/sound_beeper_stm32f10x.c create mode 100644 src/main/drivers/sound_beeper_stm32f30x.c diff --git a/Makefile b/Makefile index 50462bf47f..655e1fcbc2 100644 --- a/Makefile +++ b/Makefile @@ -181,6 +181,7 @@ NAZE_SRC = startup_stm32f10x_md_gcc.S \ drivers/bus_i2c_stm32f10x.c \ drivers/compass_hmc5883l.c \ drivers/gpio_stm32f10x.c \ + drivers/light_led_stm32f10x.c \ drivers/light_ledring.c \ drivers/sonar_hcsr04.c \ drivers/pwm_mapping.c \ @@ -189,6 +190,7 @@ NAZE_SRC = startup_stm32f10x_md_gcc.S \ drivers/serial_softserial.c \ drivers/serial_uart.c \ drivers/serial_uart_stm32f10x.c \ + drivers/sound_beeper_stm32f10x.c \ drivers/system_stm32f10x.c \ drivers/timer.c \ $(COMMON_SRC) @@ -200,6 +202,7 @@ OLIMEXINO_SRC = startup_stm32f10x_md_gcc.S \ drivers/bus_i2c_stm32f10x.c \ drivers/bus_spi.c \ drivers/gpio_stm32f10x.c \ + drivers/light_led_stm32f10x.c \ drivers/pwm_mapping.c \ drivers/pwm_output.c \ drivers/pwm_rssi.c \ @@ -207,6 +210,7 @@ OLIMEXINO_SRC = startup_stm32f10x_md_gcc.S \ drivers/serial_softserial.c \ drivers/serial_uart.c \ drivers/serial_uart_stm32f10x.c \ + drivers/sound_beeper_stm32f10x.c \ drivers/system_stm32f10x.c \ drivers/timer.c \ $(COMMON_SRC) @@ -217,6 +221,7 @@ STM32F30x_COMMON_SRC = startup_stm32f30x_md_gcc.S \ drivers/bus_i2c_stm32f30x.c \ drivers/bus_spi.c \ drivers/gpio_stm32f30x.c \ + drivers/light_led_stm32f30x.c \ drivers/pwm_mapping.c \ drivers/pwm_output.c \ drivers/pwm_rssi.c \ @@ -225,6 +230,7 @@ STM32F30x_COMMON_SRC = startup_stm32f30x_md_gcc.S \ drivers/serial_uart_stm32f30x.c \ drivers/serial_softserial.c \ drivers/serial_usb_vcp.c \ + drivers/sound_beeper_stm32f30x.c \ drivers/system_stm32f30x.c \ drivers/timer.c \ vcp/hw_config.c \ diff --git a/src/main/drivers/light_led.c b/src/main/drivers/light_led.c new file mode 100644 index 0000000000..25f3a5c82f --- /dev/null +++ b/src/main/drivers/light_led.c @@ -0,0 +1,26 @@ + + +initLeds(void) +{ + struct { + GPIO_TypeDef *gpio; + gpio_config_t cfg; + } gpio_setup[] = { +#ifdef LED0 + { + .gpio = LED0_GPIO, + .cfg = { LED0_PIN, Mode_Out_PP, Speed_2MHz } + }, +#endif +#ifdef LED1 + + { + .gpio = LED1_GPIO, + .cfg = { LED1_PIN, Mode_Out_PP, Speed_2MHz } + }, +#endif + } + + uint8_t gpio_count = sizeof(gpio_setup) / sizeof(gpio_setup[0]); + +} diff --git a/src/main/drivers/light_led.h b/src/main/drivers/light_led.h index 230ce944ab..b7f3ca00c2 100644 --- a/src/main/drivers/light_led.h +++ b/src/main/drivers/light_led.h @@ -30,3 +30,5 @@ #define LED1_OFF #define LED1_ON #endif + +void ledInit(void); diff --git a/src/main/drivers/light_led_stm32f10x.c b/src/main/drivers/light_led_stm32f10x.c new file mode 100644 index 0000000000..1088240528 --- /dev/null +++ b/src/main/drivers/light_led_stm32f10x.c @@ -0,0 +1,53 @@ +#include +#include +#include + +#include "platform.h" + +#include "system.h" +#include "gpio.h" + +#include "light_led.h" + + +void ledInit(void) +{ + uint32_t i; + + struct { + GPIO_TypeDef *gpio; + gpio_config_t cfg; + } gpio_setup[] = { +#ifdef LED0 + { + .gpio = LED0_GPIO, + .cfg = { LED0_PIN, Mode_Out_PP, Speed_2MHz } + }, +#endif +#ifdef LED1 + { + .gpio = LED1_GPIO, + .cfg = { LED1_PIN, Mode_Out_PP, Speed_2MHz } + } +#endif + }; + + uint8_t gpio_count = sizeof(gpio_setup) / sizeof(gpio_setup[0]); + +#ifdef LED0 + RCC_APB2PeriphClockCmd(LED0_PERIPHERAL, ENABLE); +#endif +#ifdef LED1 + RCC_APB2PeriphClockCmd(LED1_PERIPHERAL, ENABLE); +#endif + + LED0_OFF; + LED1_OFF; + + for (i = 0; i < gpio_count; i++) { + if (hse_value == 12000000 && gpio_setup[i].cfg.mode == Mode_Out_OD) + gpio_setup[i].cfg.mode = Mode_Out_PP; + gpioInit(gpio_setup[i].gpio, &gpio_setup[i].cfg); + } +} + diff --git a/src/main/drivers/light_led_stm32f30x.c b/src/main/drivers/light_led_stm32f30x.c new file mode 100644 index 0000000000..70a7a87b51 --- /dev/null +++ b/src/main/drivers/light_led_stm32f30x.c @@ -0,0 +1,49 @@ +#include +#include +#include + +#include "platform.h" + +#include "gpio.h" + +#include "light_led.h" + +void ledInit(void) +{ + uint32_t i; + + struct { + GPIO_TypeDef *gpio; + gpio_config_t cfg; + } gpio_setup[] = { +#ifdef LED0 + { + .gpio = LED0_GPIO, + .cfg = { LED0_PIN, Mode_Out_PP, Speed_2MHz } + }, +#endif +#ifdef LED1 + { + .gpio = LED1_GPIO, + .cfg = { LED1_PIN, Mode_Out_PP, Speed_2MHz } + } +#endif + }; + + uint8_t gpio_count = sizeof(gpio_setup) / sizeof(gpio_setup[0]); + +#ifdef LED0 + RCC_AHBPeriphClockCmd(LED0_PERIPHERAL, ENABLE); +#endif +#ifdef LED1 + RCC_AHBPeriphClockCmd(LED1_PERIPHERAL, ENABLE); +#endif + + LED0_OFF; + LED1_OFF; + + for (i = 0; i < gpio_count; i++) { + gpioInit(gpio_setup[i].gpio, &gpio_setup[i].cfg); + } +} + diff --git a/src/main/drivers/sound_beeper.c b/src/main/drivers/sound_beeper.c index 43bd2e9d18..b3c624fdb2 100644 --- a/src/main/drivers/sound_beeper.c +++ b/src/main/drivers/sound_beeper.c @@ -54,7 +54,7 @@ static inline bool isBuzzerOutputInverted(void) void beeperInit(void) { #ifdef BUZZER - // Configure gpio + initBeeperHardware(); if (isBuzzerOutputInverted()) systemBeepPtr = beepInverted; else diff --git a/src/main/drivers/sound_beeper.h b/src/main/drivers/sound_beeper.h index acffdb60d2..68621c8a62 100644 --- a/src/main/drivers/sound_beeper.h +++ b/src/main/drivers/sound_beeper.h @@ -12,3 +12,5 @@ void systemBeep(bool onoff); void beeperInit(void); + +void initBeeperHardware(void); diff --git a/src/main/drivers/sound_beeper_stm32f10x.c b/src/main/drivers/sound_beeper_stm32f10x.c new file mode 100644 index 0000000000..a26b4de82f --- /dev/null +++ b/src/main/drivers/sound_beeper_stm32f10x.c @@ -0,0 +1,30 @@ +#include +#include +#include + +#include "platform.h" + +#include "system.h" +#include "gpio.h" + +#include "sound_beeper.h" + +void initBeeperHardware(void) +{ +#ifdef BUZZER + struct { + GPIO_TypeDef *gpio; + gpio_config_t cfg; + } gpio_setup = { + .gpio = BEEP_GPIO, + .cfg = { BEEP_PIN, Mode_Out_OD, Speed_2MHz } + }; + + RCC_APB2PeriphClockCmd(BEEP_PERIPHERAL, ENABLE); + + if (hse_value == 12000000 && gpio_setup.cfg.mode == Mode_Out_OD) + gpio_setup.cfg.mode = Mode_Out_PP; + gpioInit(gpio_setup.gpio, &gpio_setup.cfg); + +#endif +} diff --git a/src/main/drivers/sound_beeper_stm32f30x.c b/src/main/drivers/sound_beeper_stm32f30x.c new file mode 100644 index 0000000000..83e74eb2e4 --- /dev/null +++ b/src/main/drivers/sound_beeper_stm32f30x.c @@ -0,0 +1,27 @@ +#include +#include +#include + +#include "platform.h" + +#include "gpio.h" + +#include "sound_beeper.h" + +void initBeeperHardware(void) +{ +#ifdef BUZZER + struct { + GPIO_TypeDef *gpio; + gpio_config_t cfg; + } gpio_setup = { + .gpio = BEEP_GPIO, + .cfg = { BEEP_PIN, Mode_Out_OD, Speed_2MHz } + }; + + RCC_AHBPeriphClockCmd(BEEP_PERIPHERAL, ENABLE); + + gpioInit(gpio_setup.gpio, &gpio_setup.cfg); + +#endif +} diff --git a/src/main/drivers/system.c b/src/main/drivers/system.c index 8fb63d07fd..0f71cf3628 100755 --- a/src/main/drivers/system.c +++ b/src/main/drivers/system.c @@ -65,33 +65,7 @@ void systemInit(bool overclock) SCB->CPACR = (0x3 << (10*2)) | (0x3 << (11*2)); #endif - struct { - GPIO_TypeDef *gpio; - gpio_config_t cfg; - } gpio_setup[] = { -#ifdef LED0 - { - .gpio = LED0_GPIO, - .cfg = { LED0_PIN, Mode_Out_PP, Speed_2MHz } - }, -#endif -#ifdef LED1 - - { - .gpio = LED1_GPIO, - .cfg = { LED1_PIN, Mode_Out_PP, Speed_2MHz } - }, -#endif -#ifdef BUZZER - { - .gpio = BEEP_GPIO, - .cfg = { BEEP_PIN, Mode_Out_OD, Speed_2MHz } - }, -#endif - }; gpio_config_t gpio; - uint32_t i; - uint8_t gpio_count = sizeof(gpio_setup) / sizeof(gpio_setup[0]); #ifdef STM32F303xC SetSysClock(); @@ -209,15 +183,8 @@ void systemInit(bool overclock) GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_2); #endif + ledInit(); beeperInit(); - LED0_OFF; - LED1_OFF; - - for (i = 0; i < gpio_count; i++) { - if (hse_value == 12000000 && gpio_setup[i].cfg.mode == Mode_Out_OD) - gpio_setup[i].cfg.mode = Mode_Out_PP; - gpioInit(gpio_setup[i].gpio, &gpio_setup[i].cfg); - } // Init cycle counter cycleCounterInit(); diff --git a/src/main/target/CHEBUZZF3/target.h b/src/main/target/CHEBUZZF3/target.h index 2ed27db539..1447cccdd0 100644 --- a/src/main/target/CHEBUZZF3/target.h +++ b/src/main/target/CHEBUZZF3/target.h @@ -1,13 +1,18 @@ #define LED0_GPIO GPIOE #define LED0_PIN Pin_8|Pin_12 // Blue LEDs - PE8/PE12 +#define LED0_PERIPHERAL RCC_AHBPeriph_GPIOE #define LED0_INVERTED #define LED1_GPIO GPIOE #define LED1_PIN Pin_10|Pin_14 // Orange LEDs - PE10/PE14 +#define LED1_PERIPHERAL RCC_AHBPeriph_GPIOE #define LED1_INVERTED + #define BEEP_GPIO GPIOE #define BEEP_PIN Pin_9|Pin_13 // Red LEDs - PE9/PE13 +#define BEEP_PERIPHERAL RCC_AHBPeriph_GPIOE #define BUZZER_INVERTED + #define BARO_GPIO GPIOC #define BARO_PIN Pin_13 diff --git a/src/main/target/NAZE/target.h b/src/main/target/NAZE/target.h index abb36b3b72..a5e66935c2 100644 --- a/src/main/target/NAZE/target.h +++ b/src/main/target/NAZE/target.h @@ -2,10 +2,16 @@ #define LED0_GPIO GPIOB #define LED0_PIN Pin_3 // PB3 (LED) +#define LED0_PERIPHERAL RCC_APB2Periph_GPIOA #define LED1_GPIO GPIOB #define LED1_PIN Pin_4 // PB4 (LED) +#define LED1_PERIPHERAL RCC_APB2Periph_GPIOB + + #define BEEP_GPIO GPIOA #define BEEP_PIN Pin_12 // PA12 (Buzzer) +#define BEEP_PERIPHERAL RCC_APB2Periph_GPIOA + #define BARO_GPIO GPIOC #define BARO_PIN Pin_13 diff --git a/src/main/target/NAZE32PRO/target.h b/src/main/target/NAZE32PRO/target.h index 4459660c44..95d1d4403e 100644 --- a/src/main/target/NAZE32PRO/target.h +++ b/src/main/target/NAZE32PRO/target.h @@ -1,7 +1,9 @@ #define LED0_GPIO GPIOB #define LED0_PIN Pin_12 +#define LED0_PERIPHERAL RCC_AHBPeriph_GPIOB #define BEEP_GPIO GPIOB #define BEEP_PIN Pin_10 +#define BEEP_PERIPHERAL RCC_AHBPeriph_GPIOB #define BUZZER #define LED0 diff --git a/src/main/target/OLIMEXINO/target.h b/src/main/target/OLIMEXINO/target.h index 84e4686580..1fdc481b5e 100644 --- a/src/main/target/OLIMEXINO/target.h +++ b/src/main/target/OLIMEXINO/target.h @@ -6,6 +6,7 @@ #ifdef OLIMEXINO_UNCUT_LED1_E_JUMPER #define LED0_GPIO GPIOA #define LED0_PIN Pin_5 // D13, PA5/SPI1_SCK/ADC5 - "LED1" on silkscreen, Green +#define LED0_PERIPHERAL RCC_APB2Periph_GPIOA #define LED0 #endif @@ -13,6 +14,7 @@ // "LED2" is using one of the PWM pins (CH2/PWM2), so we must not use PWM2 unless the jumper is cut. @See pwmInit() #define LED1_GPIO GPIOA #define LED1_PIN Pin_1 // D3, PA1/USART2_RTS/ADC1/TIM2_CH3 - "LED2" on silkscreen, Yellow +#define LED1_PERIPHERAL RCC_APB2Periph_GPIOA #define LED1 #endif diff --git a/src/main/target/STM32F3DISCOVERY/target.h b/src/main/target/STM32F3DISCOVERY/target.h index 2ed27db539..86bb347414 100644 --- a/src/main/target/STM32F3DISCOVERY/target.h +++ b/src/main/target/STM32F3DISCOVERY/target.h @@ -1,12 +1,19 @@ #define LED0_GPIO GPIOE #define LED0_PIN Pin_8|Pin_12 // Blue LEDs - PE8/PE12 +#define LED0_PERIPHERAL RCC_AHBPeriph_GPIOE #define LED0_INVERTED #define LED1_GPIO GPIOE #define LED1_PIN Pin_10|Pin_14 // Orange LEDs - PE10/PE14 +#define LED1_PERIPHERAL RCC_AHBPeriph_GPIOE #define LED1_INVERTED + #define BEEP_GPIO GPIOE #define BEEP_PIN Pin_9|Pin_13 // Red LEDs - PE9/PE13 +#define BEEP_PERIPHERAL RCC_AHBPeriph_GPIOE +#define BUZZER_INVERTED + + #define BUZZER_INVERTED #define BARO_GPIO GPIOC #define BARO_PIN Pin_13