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)
|
||||
};
|
||||
|
||||
// Enable GPIO clock and return GPIO base address
|
||||
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;
|
||||
}
|
||||
extern GPIO_TypeDef *Set_GPIO_Clock(uint32_t port_idx);
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
// Enable GPIO clock
|
||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *)gpio_add;
|
||||
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||
|
||||
// Configure GPIO
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
@ -130,8 +94,7 @@ void pin_mode(PinName pin, PinMode mode) {
|
|||
uint32_t pin_index = STM_PIN(pin);
|
||||
|
||||
// Enable GPIO clock
|
||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *)gpio_add;
|
||||
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||
|
||||
// Configure pull-up/pull-down resistors
|
||||
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*/
|
||||
uint32_t port_index = STM_PORT(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 pull = (temp >> (pin_index * 2U)) & GPIO_PUPDR_PUPDR0;
|
||||
|
||||
|
|
|
@ -32,7 +32,78 @@
|
|||
#include "pinmap.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) {
|
||||
MBED_ASSERT(pin != (PinName)NC);
|
||||
|
@ -51,8 +122,7 @@ void gpio_init(gpio_t *obj, PinName pin) {
|
|||
uint32_t port_index = STM_PORT(pin);
|
||||
|
||||
// Enable GPIO clock
|
||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *)gpio_add;
|
||||
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||
|
||||
// Fill GPIO object structure for future use
|
||||
obj->mask = gpio_set(pin);
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
typedef struct gpio_channel {
|
||||
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_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
|
||||
} gpio_channel_t;
|
||||
|
||||
|
@ -159,7 +159,7 @@ static void gpio_irq6(void)
|
|||
}
|
||||
#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);
|
||||
|
||||
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
|
||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
||||
GPIO_TypeDef *gpio_add = Set_GPIO_Clock(port_index);
|
||||
|
||||
// Save informations for future use
|
||||
obj->irq_n = pin_lines_desc[pin_index].irq_n;
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#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, ...)
|
||||
// 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;
|
||||
|
||||
// Enable GPIO clock
|
||||
uint32_t gpio_add = Set_GPIO_Clock(port_index);
|
||||
GPIO_TypeDef *gpio = (GPIO_TypeDef *)gpio_add;
|
||||
GPIO_TypeDef *gpio = Set_GPIO_Clock(port_index);
|
||||
|
||||
// Fill PORT object structure for future use
|
||||
obj->port = port;
|
||||
|
|
Loading…
Reference in New Issue