Skip to content

Commit

Permalink
[adc] cleaner ADC driver configuration and updated board files
Browse files Browse the repository at this point in the history
  • Loading branch information
gautierhattenberger committed Nov 27, 2013
1 parent 0ea59ec commit 713456b
Show file tree
Hide file tree
Showing 15 changed files with 424 additions and 780 deletions.
489 changes: 168 additions & 321 deletions sw/airborne/arch/stm32/mcu_periph/adc_arch.c

Large diffs are not rendered by default.

53 changes: 25 additions & 28 deletions sw/airborne/arch/stm32/mcu_periph/adc_arch.h
Expand Up @@ -33,50 +33,47 @@
#include BOARD_CONFIG

// NB_ADCx_CHANNELS
enum adc1_channels {
#ifdef USE_AD1_1
ADC1_C1,
enum adc_channels {
#ifdef AD1_1_CHANNEL
AD1_1,
#endif
#ifdef USE_AD1_2
ADC1_C2,
#ifdef AD1_2_CHANNEL
AD1_2,
#endif
#ifdef USE_AD1_3
ADC1_C3,
#ifdef AD1_3_CHANNEL
AD1_3,
#endif
#ifdef USE_AD1_4
ADC1_C4,
#ifdef AD1_4_CHANNEL
AD1_4,
#endif
// NB_ADC1_CHANNELS
#ifdef USE_AD2_1
ADC2_C1,
#ifdef AD2_1_CHANNEL
AD2_1,
#endif
#ifdef USE_AD2_2
ADC2_C2,
#ifdef AD2_2_CHANNEL
AD2_2,
#endif
#ifdef USE_AD2_3
ADC2_C3,
#ifdef AD2_3_CHANNEL
AD2_3,
#endif
#ifdef USE_AD2_4
ADC2_C4,
#ifdef AD2_4_CHANNEL
AD2_4,
#endif
// NB_ADC2_CHANNELS
#ifdef USE_AD3_1
ADC3_C1,
#ifdef AD3_1_CHANNEL
AD3_1,
#endif
#ifdef USE_AD3_2
ADC3_C2,
#ifdef AD3_2_CHANNEL
AD3_2,
#endif
#ifdef USE_AD3_3
ADC3_C3,
#ifdef AD3_3_CHANNEL
AD3_3,
#endif
#ifdef USE_AD3_4
ADC3_C4,
#ifdef AD3_4_CHANNEL
AD3_4,
#endif
// NB_ADC3_CHANNELS
NB_ADC
};

#define AdcBank0(x) (x)
#define AdcBank1(x) (x+NB_ADC)

#endif /* ADC_ARCH_H */
11 changes: 11 additions & 0 deletions sw/airborne/arch/stm32/mcu_periph/gpio_arch.c
Expand Up @@ -74,6 +74,11 @@ void gpio_setup_pin_af(uint32_t port, uint16_t pin, uint8_t af, bool_t is_output
gpio_set_mode(port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, pin);
}

void gpio_setup_pin_analog(uint32_t port, uint16_t pin) {
gpio_enable_clock(port);
gpio_set_mode(port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_ANALOG, pin);
}

#elif defined STM32F4
void gpio_enable_clock(uint32_t port) {
switch (port) {
Expand Down Expand Up @@ -124,5 +129,11 @@ void gpio_setup_pin_af(uint32_t port, uint16_t pin, uint8_t af, bool_t is_output
gpio_mode_setup(port, GPIO_MODE_AF, GPIO_PUPD_NONE, pin);
gpio_set_af(port, af, pin);
}

void gpio_setup_pin_analog(uint32_t port, uint16_t pin) {
gpio_enable_clock(port);
gpio_mode_setup(port, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, pin);
}

#endif

8 changes: 8 additions & 0 deletions sw/airborne/arch/stm32/mcu_periph/gpio_arch.h
Expand Up @@ -38,6 +38,14 @@
*/
extern void gpio_setup_pin_af(uint32_t port, uint16_t pin, uint8_t af, bool_t is_output);

/**
* Setup a gpio for analog use.
*/
extern void gpio_setup_pin_analog(uint32_t port, uint16_t pin);

/**
* Enable the relevant clock.
*/
extern void gpio_enable_clock(uint32_t port);

#endif /* GPIO_ARCH_H */
78 changes: 21 additions & 57 deletions sw/airborne/boards/apogee_0.99.h
Expand Up @@ -76,83 +76,47 @@
/* Onboard ADCs */
#define USE_AD_TIM4 1

#define BOARD_ADC_CHANNEL_1 8
#define BOARD_ADC_CHANNEL_2 9
#define BOARD_ADC_CHANNEL_3 14
#define BOARD_ADC_CHANNEL_4 4

#ifndef USE_AD1
#define USE_AD1 1
#endif
/* provide defines that can be used to access the ADC_x in the code or airframe file
* these directly map to the index number of the 4 adc channels defined above
* 4th (index 3) is used for bat monitoring by default
*/
#define ADC_1 ADC1_C1
#ifdef USE_ADC_1
#ifndef ADC_1_GPIO_CLOCK_PORT
#define ADC_1_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPBEN
#define ADC_1_INIT() gpio_mode_setup(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO0)
#endif
#define USE_AD1_1 1
#else
#define ADC_1_GPIO_CLOCK_PORT 0
#define ADC_1_INIT() {}
#define AD1_1_CHANNEL 8
#define ADC_1 AD1_1
#define ADC_1_GPIO_PORT GPIOB
#define ADC_1_GPIO_PIN GPIO0
#endif

#define ADC_2 ADC1_C2
#ifdef USE_ADC_2
#ifndef ADC_2_GPIO_CLOCK_PORT
#define ADC_2_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPBEN
#define ADC_2_INIT() gpio_mode_setup(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO1)
#endif
#define USE_AD1_2 1
#else
#define ADC_2_GPIO_CLOCK_PORT 0
#define ADC_2_INIT() {}
#define AD1_2_CHANNEL 9
#define ADC_2 AD1_2
#define ADC_2_GPIO_PORT GPIOB
#define ADC_2_GPIO_PIN GPIO1
#endif

#define ADC_3 ADC1_C3
#ifdef USE_ADC_3
#ifndef ADC_3_GPIO_CLOCK_PORT
#define ADC_3_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPCEN
#define ADC_3_INIT() gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO4)
#endif
#define USE_AD1_3 1
#else
#define ADC_3_GPIO_CLOCK_PORT 0
#define ADC_3_INIT() {}
#define AD1_3_CHANNEL 14
#define ADC_3 AD1_3
#define ADC_3_GPIO_PORT GPIOC
#define ADC_3_GPIO_PIN GPIO4
#endif

#define ADC_4 ADC1_C4
//#ifdef USE_ADC_4
#ifndef ADC_4_GPIO_CLOCK_PORT
#define ADC_4_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPAEN
#define ADC_4_INIT() gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO4)
// Internal ADC for battery enabled by default
#ifndef USE_ADC_4
#define USE_ADC_4 1
#endif
#ifdef USE_ADC_4
#define AD1_4_CHANNEL 4
#define ADC_4 AD1_4
#define ADC_4_GPIO_PORT GPIOA
#define ADC_4_GPIO_PIN GPIO4
#endif
#define USE_AD1_4 1
//#else
//#define ADC_4_GPIO_CLOCK_PORT 0
//#define ADC_4_INIT() {}
//#endif

/* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
#ifndef ADC_CHANNEL_VSUPPLY
#define ADC_CHANNEL_VSUPPLY ADC_4
#endif

#define ADC_GPIO_CLOCK_PORT (ADC_1_GPIO_CLOCK_PORT | ADC_2_GPIO_CLOCK_PORT | ADC_3_GPIO_CLOCK_PORT | ADC_4_GPIO_CLOCK_PORT)

/* GPIO mapping for ADC1 pins, overwrites the default in arch/stm32/mcu_periph/adc_arch.c */
#ifdef USE_AD1
#define ADC1_GPIO_INIT(gpio) { \
ADC_1_INIT(); \
ADC_2_INIT(); \
ADC_3_INIT(); \
ADC_4_INIT(); \
}
#endif // USE_AD1


/* I2C mapping */
#define I2C1_GPIO_PORT GPIOB
Expand Down
74 changes: 21 additions & 53 deletions sw/airborne/boards/apogee_1.0.h
Expand Up @@ -166,82 +166,50 @@
/* Onboard ADCs */
#define USE_AD_TIM4 1

#define BOARD_ADC_CHANNEL_1 9
#define BOARD_ADC_CHANNEL_2 15
#define BOARD_ADC_CHANNEL_3 14
#define BOARD_ADC_CHANNEL_4 4

#ifndef USE_AD1
#define USE_AD1 1
#endif
/* provide defines that can be used to access the ADC_x in the code or airframe file
* these directly map to the index number of the 4 adc channels defined above
* 4th (index 3) is used for bat monitoring by default
*/
// AUX 1
#define ADC_1 ADC1_C1
#ifdef USE_ADC_1
#ifndef ADC_1_GPIO_CLOCK_PORT
#define ADC_1_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPBEN
#define ADC_1_INIT() gpio_mode_setup(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO1)
#endif
#define USE_AD1_1 1
#else
#define ADC_1_GPIO_CLOCK_PORT 0
#define ADC_1_INIT() {}
#define AD1_1_CHANNEL 9
#define ADC_1 AD1_1
#define ADC_1_GPIO_PORT GPIOB
#define ADC_1_GPIO_PIN GPIO1
#endif

// AUX 2
#define ADC_2 ADC1_C2
#ifdef USE_ADC_2
#ifndef ADC_2_GPIO_CLOCK_PORT
#define ADC_2_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPCEN
#define ADC_2_INIT() gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO5)
#endif
#define USE_AD1_2 1
#else
#define ADC_2_GPIO_CLOCK_PORT 0
#define ADC_2_INIT() {}
#define AD1_2_CHANNEL 15
#define ADC_2 AD1_2
#define ADC_2_GPIO_PORT GPIOC
#define ADC_2_GPIO_PIN GPIO5
#endif

// AUX 3
#define ADC_3 ADC1_C3
#ifdef USE_ADC_3
#ifndef ADC_3_GPIO_CLOCK_PORT
#define ADC_3_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPCEN
#define ADC_3_INIT() gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO4)
#endif
#define USE_AD1_3 1
#else
#define ADC_3_GPIO_CLOCK_PORT 0
#define ADC_3_INIT() {}
#define AD1_3_CHANNEL 14
#define ADC_3 AD1_3
#define ADC_3_GPIO_PORT GPIOC
#define ADC_3_GPIO_PIN GPIO4
#endif

// BAT
#define ADC_4 ADC1_C4
#ifndef ADC_4_GPIO_CLOCK_PORT
#define ADC_4_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPAEN
#define ADC_4_INIT() gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO4)
// Internal ADC for battery enabled by default
#ifndef USE_ADC_4
#define USE_ADC_4 1
#endif
#ifdef USE_ADC_4
#define AD1_4_CHANNEL 4
#define ADC_4 AD1_4
#define ADC_4_GPIO_PORT GPIOA
#define ADC_4_GPIO_PIN GPIO4
#endif
#define USE_AD1_4 1

/* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
#ifndef ADC_CHANNEL_VSUPPLY
#define ADC_CHANNEL_VSUPPLY ADC_4
#endif

#define ADC_GPIO_CLOCK_PORT (ADC_1_GPIO_CLOCK_PORT | ADC_2_GPIO_CLOCK_PORT | ADC_3_GPIO_CLOCK_PORT | ADC_4_GPIO_CLOCK_PORT)

/* GPIO mapping for ADC1 pins, overwrites the default in arch/stm32/mcu_periph/adc_arch.c */
#ifdef USE_AD1
#define ADC1_GPIO_INIT(gpio) { \
ADC_1_INIT(); \
ADC_2_INIT(); \
ADC_3_INIT(); \
ADC_4_INIT(); \
}
#endif // USE_AD1


/* I2C mapping */
#define I2C1_GPIO_PORT GPIOB
Expand Down

0 comments on commit 713456b

Please sign in to comment.