Skip to content

Commit

Permalink
Add support for GPIO pulldown control
Browse files Browse the repository at this point in the history
Note that it does nothing on the AVR, which doesn't support it.
  • Loading branch information
dougg3 committed Sep 10, 2023
1 parent 7e5639c commit a4e6cf4
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
12 changes: 12 additions & 0 deletions hal/at90usb646/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,18 @@ void GPIO_SetPullup(GPIOPin pin, bool pullup)
GPIO_Set(pin, pullup);
}

/**
* @brief Sets whether an input GPIO pin is pulled down
* @param pin The pin
* @param pulldown True if it should be pulled down, false if not
*/
void GPIO_SetPulldown(GPIOPin pin, bool pulldown)
{
(void)pin;
(void)pulldown;
// The AVR doesn't support pulldowns
}

/** Turns a GPIO pin on (sets it high)
*
* @param pin The pin
Expand Down
1 change: 1 addition & 0 deletions hal/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ typedef struct GPIOPin

void GPIO_SetDirection(GPIOPin pin, bool output);
void GPIO_SetPullup(GPIOPin pin, bool pullup);
void GPIO_SetPulldown(GPIOPin pin, bool pulldown);
void GPIO_SetOn(GPIOPin pin);
void GPIO_SetOff(GPIOPin pin);
void GPIO_Toggle(GPIOPin pin);
Expand Down
22 changes: 20 additions & 2 deletions hal/m258ke/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,31 @@ void GPIO_SetPullup(GPIOPin pin, bool pullup)
if (pullup)
{
uint32_t tmp = gpioRegs[pin.port]->PUSEL;
tmp &= ~(2UL << 2*pin.pin);
tmp |= (1UL << 2*pin.pin);
gpioRegs[pin.port]->PUSEL = tmp;
}
else
{
gpioRegs[pin.port]->PUSEL &= ~(3UL << 2*pin.pin);
gpioRegs[pin.port]->PUSEL &= ~(1UL << 2*pin.pin);
}
}

/** Sets whether an input GPIO pin is pulled down
*
* @param pin The pin
* @param pulldown True if it should be pulled down, false if not
*/
void GPIO_SetPulldown(GPIOPin pin, bool pulldown)
{
if (pulldown)
{
uint32_t tmp = gpioRegs[pin.port]->PUSEL;
tmp |= (2UL << 2*pin.pin);
gpioRegs[pin.port]->PUSEL = tmp;
}
else
{
gpioRegs[pin.port]->PUSEL &= ~(2UL << 2*pin.pin);
}
}

Expand Down

0 comments on commit a4e6cf4

Please sign in to comment.