mirror of https://github.com/ARMmbed/mbed-os.git
[Nuvoton] Support GPIO input pull-high/pull-low
In Nuvoton, only new-design chips support GPIO input pull-high/pull-low modes. Targets not supporting this feature are listed below: - NUMAKER_PFM_NANO130 - NUMAKER_PFM_NUC472 - NUMAKER_PFM_M453pull/11152/head
parent
09bf844d76
commit
ca0846b1e9
|
@ -62,10 +62,23 @@ void gpio_mode(gpio_t *obj, PinMode mode)
|
|||
return;
|
||||
}
|
||||
|
||||
uint32_t pin_index = NU_PININDEX(obj->pin);
|
||||
uint32_t port_index = NU_PINPORT(obj->pin);
|
||||
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
|
||||
|
||||
switch (mode) {
|
||||
case PullNone:
|
||||
if (mode == PullNone) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_DISABLE);
|
||||
}
|
||||
case PullDown:
|
||||
if (mode == PullDown) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_DOWN);
|
||||
}
|
||||
case PullUp:
|
||||
if (mode == PullUp) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_UP);
|
||||
}
|
||||
/* H/W doesn't support separate configuration for input pull mode/direction.
|
||||
* We translate to input-only/push-pull output I/O mode dependent on direction. */
|
||||
obj->mode = (obj->direction == PIN_INPUT) ? InputOnly : PushPullOutput;
|
||||
|
@ -110,10 +123,23 @@ void gpio_dir(gpio_t *obj, PinDirection direction)
|
|||
|
||||
obj->direction = direction;
|
||||
|
||||
uint32_t pin_index = NU_PININDEX(obj->pin);
|
||||
uint32_t port_index = NU_PINPORT(obj->pin);
|
||||
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
|
||||
|
||||
switch (obj->mode) {
|
||||
case PullNone:
|
||||
if (obj->mode == PullNone) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_DISABLE);
|
||||
}
|
||||
case PullDown:
|
||||
if (obj->mode == PullDown) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_DOWN);
|
||||
}
|
||||
case PullUp:
|
||||
if (obj->mode == PullUp) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_UP);
|
||||
}
|
||||
/* H/W doesn't support separate configuration for input pull mode/direction.
|
||||
* We translate to input-only/push-pull output I/O mode dependent on direction. */
|
||||
obj->mode = (obj->direction == PIN_INPUT) ? InputOnly : PushPullOutput;
|
||||
|
|
|
@ -62,10 +62,23 @@ void gpio_mode(gpio_t *obj, PinMode mode)
|
|||
return;
|
||||
}
|
||||
|
||||
uint32_t pin_index = NU_PININDEX(obj->pin);
|
||||
uint32_t port_index = NU_PINPORT(obj->pin);
|
||||
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
|
||||
|
||||
switch (mode) {
|
||||
case PullNone:
|
||||
if (mode == PullNone) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_DISABLE);
|
||||
}
|
||||
case PullDown:
|
||||
if (mode == PullDown) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_DOWN);
|
||||
}
|
||||
case PullUp:
|
||||
if (mode == PullUp) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_UP);
|
||||
}
|
||||
/* H/W doesn't support separate configuration for input pull mode/direction.
|
||||
* We translate to input-only/push-pull output I/O mode dependent on direction. */
|
||||
obj->mode = (obj->direction == PIN_INPUT) ? InputOnly : PushPullOutput;
|
||||
|
@ -110,10 +123,23 @@ void gpio_dir(gpio_t *obj, PinDirection direction)
|
|||
|
||||
obj->direction = direction;
|
||||
|
||||
uint32_t pin_index = NU_PININDEX(obj->pin);
|
||||
uint32_t port_index = NU_PINPORT(obj->pin);
|
||||
GPIO_T *gpio_base = NU_PORT_BASE(port_index);
|
||||
|
||||
switch (obj->mode) {
|
||||
case PullNone:
|
||||
if (obj->mode == PullNone) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_DISABLE);
|
||||
}
|
||||
case PullDown:
|
||||
if (obj->mode == PullDown) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_DOWN);
|
||||
}
|
||||
case PullUp:
|
||||
if (obj->mode == PullUp) {
|
||||
GPIO_SetPullCtl(gpio_base, 1 << pin_index, GPIO_PUSEL_PULL_UP);
|
||||
}
|
||||
/* H/W doesn't support separate configuration for input pull mode/direction.
|
||||
* We translate to input-only/push-pull output I/O mode dependent on direction. */
|
||||
obj->mode = (obj->direction == PIN_INPUT) ? InputOnly : PushPullOutput;
|
||||
|
|
Loading…
Reference in New Issue