mirror of https://github.com/ARMmbed/mbed-os.git
Fix for Cypress GPIO driver
parent
699372421a
commit
48b02af144
|
@ -39,9 +39,9 @@ void apply_config(gpio_t *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj->drive_mode == PullUp) {
|
if (obj->drive_mode == PullUp) {
|
||||||
gpio_write(obj, 1);
|
gpio_set_pull(obj, 1);
|
||||||
} else if (obj->drive_mode == PullDown) {
|
} else if (obj->drive_mode == PullDown) {
|
||||||
gpio_write(obj, 0);
|
gpio_set_pull(obj, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,6 +80,7 @@ void gpio_dir(gpio_t *obj, PinDirection direction)
|
||||||
} else if (direction == PIN_OUTPUT) {
|
} else if (direction == PIN_OUTPUT) {
|
||||||
// mbed reads from input buffer instead of DR even for output pins so always leave input buffer enabled
|
// mbed reads from input buffer instead of DR even for output pins so always leave input buffer enabled
|
||||||
obj->direction = CYHAL_GPIO_DIR_BIDIRECTIONAL;
|
obj->direction = CYHAL_GPIO_DIR_BIDIRECTIONAL;
|
||||||
|
gpio_write(obj, obj->output_val);
|
||||||
if (obj->drive_mode == CYHAL_GPIO_DRIVE_NONE || obj->drive_mode == CYHAL_GPIO_DRIVE_ANALOG) {
|
if (obj->drive_mode == CYHAL_GPIO_DRIVE_NONE || obj->drive_mode == CYHAL_GPIO_DRIVE_ANALOG) {
|
||||||
obj->drive_mode = CYHAL_GPIO_DRIVE_STRONG;
|
obj->drive_mode = CYHAL_GPIO_DRIVE_STRONG;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ typedef struct {
|
||||||
cyhal_gpio_t pin;
|
cyhal_gpio_t pin;
|
||||||
cyhal_gpio_direction_t direction;
|
cyhal_gpio_direction_t direction;
|
||||||
cyhal_gpio_drive_mode_t drive_mode;
|
cyhal_gpio_drive_mode_t drive_mode;
|
||||||
|
int output_val;
|
||||||
} gpio_t;
|
} gpio_t;
|
||||||
|
|
||||||
struct gpio_irq_s {
|
struct gpio_irq_s {
|
||||||
|
@ -57,6 +58,21 @@ struct port_s {
|
||||||
* @param value The value to be set
|
* @param value The value to be set
|
||||||
*/
|
*/
|
||||||
static inline void gpio_write(gpio_t *obj, int value)
|
static inline void gpio_write(gpio_t *obj, int value)
|
||||||
|
{
|
||||||
|
if (obj->direction != CYHAL_GPIO_DIR_INPUT) {
|
||||||
|
MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);
|
||||||
|
cyhal_gpio_write(obj->pin, value != 0);
|
||||||
|
} else {
|
||||||
|
obj->output_val = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the pull value
|
||||||
|
*
|
||||||
|
* @param obj The GPIO object
|
||||||
|
* @param value The pull value to be set
|
||||||
|
*/
|
||||||
|
static inline void gpio_set_pull(gpio_t *obj, int value)
|
||||||
{
|
{
|
||||||
MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);
|
MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);
|
||||||
cyhal_gpio_write(obj->pin, value != 0);
|
cyhal_gpio_write(obj->pin, value != 0);
|
||||||
|
|
Loading…
Reference in New Issue