mirror of https://github.com/ARMmbed/mbed-os.git
STM32: Change Set_GPIO_Clock return type
Directly return a GPIO_TypeDef pointer to avoid extra casts. Also move it to GPIO file.pull/3665/head
parent
6bd488db4d
commit
3517eb108e
|
|
@ -49,42 +49,7 @@ static const uint32_t gpio_mode[13] = {
|
||||||
0x10000000 // 12 = Reset IT and EVT (not in STM32Cube HAL)
|
0x10000000 // 12 = Reset IT and EVT (not in STM32Cube HAL)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Enable GPIO clock and return GPIO base address
|
extern GPIO_TypeDef *Set_GPIO_Clock(uint32_t port_idx);
|
||||||
uint32_t Set_GPIO_Clock(uint32_t port_idx) {
|
|
||||||
uint32_t gpio_add = 0;
|
|
||||||
switch (port_idx) {
|
|
||||||
case PortA:
|
|
||||||
gpio_add = GPIOA_BASE;
|
|
||||||
__GPIOA_CLK_ENABLE();
|
|
||||||
break;
|
|
||||||
case PortB:
|
|
||||||
gpio_add = GPIOB_BASE;
|
|
||||||
__GPIOB_CLK_ENABLE();
|
|
||||||
break;
|
|
||||||
#if defined(GPIOC_BASE)
|
|
||||||
case PortC:
|
|
||||||
gpio_add = GPIOC_BASE;
|
|
||||||
__GPIOC_CLK_ENABLE();
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#if defined(GPIOD_BASE)
|
|
||||||
case PortD:
|
|
||||||
gpio_add = GPIOD_BASE;
|
|
||||||
__GPIOD_CLK_ENABLE();
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#if defined(GPIOF_BASE)
|
|
||||||
case PortF:
|
|
||||||
gpio_add = GPIOF_BASE;
|
|
||||||
__GPIOF_CLK_ENABLE();
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
error("Pinmap error: wrong port number.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return gpio_add;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure pin (mode, speed, output type and pull-up/pull-down)
|
* Configure pin (mode, speed, output type and pull-up/pull-down)
|
||||||
|
|
@ -101,8 +66,7 @@ void pin_function(PinName pin, int data) {
|
||||||
uint32_t pin_index = STM_PIN(pin);
|
uint32_t pin_index = STM_PIN(pin);
|
||||||
|
|
||||||
// Enable GPIO clock
|
// Enable GPIO clock
|
||||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *)gpio_add;
|
|
||||||
|
|
||||||
// Configure GPIO
|
// Configure GPIO
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
|
@ -130,8 +94,7 @@ void pin_mode(PinName pin, PinMode mode) {
|
||||||
uint32_t pin_index = STM_PIN(pin);
|
uint32_t pin_index = STM_PIN(pin);
|
||||||
|
|
||||||
// Enable GPIO clock
|
// Enable GPIO clock
|
||||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *)gpio_add;
|
|
||||||
|
|
||||||
// Configure pull-up/pull-down resistors
|
// Configure pull-up/pull-down resistors
|
||||||
uint32_t pupd = (uint32_t)mode;
|
uint32_t pupd = (uint32_t)mode;
|
||||||
|
|
@ -148,7 +111,7 @@ void pin_function_gpiomode(PinName pin, uint32_t gpiomode) {
|
||||||
/* Read current pull state from HW to avoid over-write*/
|
/* Read current pull state from HW to avoid over-write*/
|
||||||
uint32_t port_index = STM_PORT(pin);
|
uint32_t port_index = STM_PORT(pin);
|
||||||
uint32_t pin_index = STM_PIN(pin);
|
uint32_t pin_index = STM_PIN(pin);
|
||||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *) Set_GPIO_Clock(port_index);
|
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||||
uint32_t temp = gpio->PUPDR;
|
uint32_t temp = gpio->PUPDR;
|
||||||
uint32_t pull = (temp >> (pin_index * 2U)) & GPIO_PUPDR_PUPDR0;
|
uint32_t pull = (temp >> (pin_index * 2U)) & GPIO_PUPDR_PUPDR0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,78 @@
|
||||||
#include "pinmap.h"
|
#include "pinmap.h"
|
||||||
#include "mbed_error.h"
|
#include "mbed_error.h"
|
||||||
|
|
||||||
extern uint32_t Set_GPIO_Clock(uint32_t port_idx);
|
// Enable GPIO clock and return GPIO base address
|
||||||
|
GPIO_TypeDef *Set_GPIO_Clock(uint32_t port_idx) {
|
||||||
|
uint32_t gpio_add = 0;
|
||||||
|
switch (port_idx) {
|
||||||
|
case PortA:
|
||||||
|
gpio_add = GPIOA_BASE;
|
||||||
|
__GPIOA_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
case PortB:
|
||||||
|
gpio_add = GPIOB_BASE;
|
||||||
|
__GPIOB_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#if defined(GPIOC_BASE)
|
||||||
|
case PortC:
|
||||||
|
gpio_add = GPIOC_BASE;
|
||||||
|
__GPIOC_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined GPIOD_BASE
|
||||||
|
case PortD:
|
||||||
|
gpio_add = GPIOD_BASE;
|
||||||
|
__GPIOD_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined GPIOE_BASE
|
||||||
|
case PortE:
|
||||||
|
gpio_add = GPIOE_BASE;
|
||||||
|
__GPIOE_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined GPIOF_BASE
|
||||||
|
case PortF:
|
||||||
|
gpio_add = GPIOF_BASE;
|
||||||
|
__GPIOF_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined GPIOG_BASE
|
||||||
|
case PortG:
|
||||||
|
gpio_add = GPIOG_BASE;
|
||||||
|
__GPIOG_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined GPIOH_BASE
|
||||||
|
case PortH:
|
||||||
|
gpio_add = GPIOH_BASE;
|
||||||
|
__GPIOH_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined GPIOI_BASE
|
||||||
|
case PortI:
|
||||||
|
gpio_add = GPIOI_BASE;
|
||||||
|
__GPIOI_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined GPIOJ_BASE
|
||||||
|
case PortJ:
|
||||||
|
gpio_add = GPIOJ_BASE;
|
||||||
|
__GPIOJ_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if defined GPIOK_BASE
|
||||||
|
case PortK:
|
||||||
|
gpio_add = GPIOK_BASE;
|
||||||
|
__GPIOK_CLK_ENABLE();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
error("Pinmap error: wrong port number.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return (GPIO_TypeDef *) gpio_add;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t gpio_set(PinName pin) {
|
uint32_t gpio_set(PinName pin) {
|
||||||
MBED_ASSERT(pin != (PinName)NC);
|
MBED_ASSERT(pin != (PinName)NC);
|
||||||
|
|
@ -51,8 +122,7 @@ void gpio_init(gpio_t *obj, PinName pin) {
|
||||||
uint32_t port_index = STM_PORT(pin);
|
uint32_t port_index = STM_PORT(pin);
|
||||||
|
|
||||||
// Enable GPIO clock
|
// Enable GPIO clock
|
||||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *)gpio_add;
|
|
||||||
|
|
||||||
// Fill GPIO object structure for future use
|
// Fill GPIO object structure for future use
|
||||||
obj->mask = gpio_set(pin);
|
obj->mask = gpio_set(pin);
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
typedef struct gpio_channel {
|
typedef struct gpio_channel {
|
||||||
uint32_t pin_mask; // bitmask representing which pins are configured for receiving interrupts
|
uint32_t pin_mask; // bitmask representing which pins are configured for receiving interrupts
|
||||||
uint32_t channel_ids[MAX_PIN_LINE]; // mbed "gpio_irq_t gpio_irq" field of instance
|
uint32_t channel_ids[MAX_PIN_LINE]; // mbed "gpio_irq_t gpio_irq" field of instance
|
||||||
uint32_t channel_gpio[MAX_PIN_LINE]; // base address of gpio port group
|
GPIO_TypeDef* channel_gpio[MAX_PIN_LINE]; // base address of gpio port group
|
||||||
uint32_t channel_pin[MAX_PIN_LINE]; // pin number in port group
|
uint32_t channel_pin[MAX_PIN_LINE]; // pin number in port group
|
||||||
} gpio_channel_t;
|
} gpio_channel_t;
|
||||||
|
|
||||||
|
|
@ -159,7 +159,7 @@ static void gpio_irq6(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern uint32_t Set_GPIO_Clock(uint32_t port_idx);
|
extern GPIO_TypeDef *Set_GPIO_Clock(uint32_t port_idx);
|
||||||
extern void pin_function_gpiomode(PinName pin, uint32_t gpiomode);
|
extern void pin_function_gpiomode(PinName pin, uint32_t gpiomode);
|
||||||
|
|
||||||
int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id)
|
int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id)
|
||||||
|
|
@ -221,7 +221,7 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable GPIO clock
|
// Enable GPIO clock
|
||||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
GPIO_TypeDef *gpio_add = Set_GPIO_Clock(port_index);
|
||||||
|
|
||||||
// Save informations for future use
|
// Save informations for future use
|
||||||
obj->irq_n = pin_lines_desc[pin_index].irq_n;
|
obj->irq_n = pin_lines_desc[pin_index].irq_n;
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#if DEVICE_PORTIN || DEVICE_PORTOUT
|
#if DEVICE_PORTIN || DEVICE_PORTOUT
|
||||||
|
|
||||||
extern uint32_t Set_GPIO_Clock(uint32_t port_idx);
|
extern GPIO_TypeDef *Set_GPIO_Clock(uint32_t port_idx);
|
||||||
|
|
||||||
// high nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, ...)
|
// high nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, ...)
|
||||||
// low nibble = pin number
|
// low nibble = pin number
|
||||||
|
|
@ -48,8 +48,7 @@ void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
|
||||||
uint32_t port_index = (uint32_t)port;
|
uint32_t port_index = (uint32_t)port;
|
||||||
|
|
||||||
// Enable GPIO clock
|
// Enable GPIO clock
|
||||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *)gpio_add;
|
|
||||||
|
|
||||||
// Fill PORT object structure for future use
|
// Fill PORT object structure for future use
|
||||||
obj->port = port;
|
obj->port = port;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue