summary refs log tree commit diff
path: root/docs
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2021-12-27 11:52:10 +1100
committerGitHub <noreply@github.com>2021-12-27 11:52:10 +1100
commit6e40dfa0220e68a6628d9e7d18788df6bcae5473 (patch)
tree743f0ad2504bad030b846477690fe6ceb228f580 /docs
parentf491e6b138c690263487bb791a1277b86da3a2e4 (diff)
Add open-drain GPIO support. (#15282)
* Add open-drain GPIO support.

* `qmk format-c`

* Wording.

* Remove port GPIO implementations as the only board that uses it has its own internal defs anyway. Will wait for first-class handling of ports in core before reimplementing.
Diffstat (limited to 'docs')
-rw-r--r--docs/internals_gpio_control.md24
1 files changed, 13 insertions, 11 deletions
diff --git a/docs/internals_gpio_control.md b/docs/internals_gpio_control.md
index ccd3f8c74d..e1f1515b71 100644
--- a/docs/internals_gpio_control.md
+++ b/docs/internals_gpio_control.md
@@ -6,17 +6,19 @@ QMK has a GPIO control abstraction layer which is microcontroller agnostic. This
 
 The following functions provide basic control of GPIOs and are found in `platforms/<platform>/gpio.h`.
 
-|Function                |Description                                       | Old AVR Examples                                | Old ChibiOS/ARM Examples                        |
-|------------------------|--------------------------------------------------|-------------------------------------------------|-------------------------------------------------|
-| `setPinInput(pin)`     | Set pin as input with high impedance (High-Z)    | `DDRB &= ~(1<<2)`                               | `palSetLineMode(pin, PAL_MODE_INPUT)`           |
-| `setPinInputHigh(pin)` | Set pin as input with builtin pull-up resistor   | `DDRB &= ~(1<<2); PORTB \|= (1<<2)`             | `palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)`    |
-| `setPinInputLow(pin)`  | Set pin as input with builtin pull-down resistor | N/A (Not supported on AVR)                      | `palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)`  |
-| `setPinOutput(pin)`    | Set pin as output                                | `DDRB \|= (1<<2)`                               | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)` |
-| `writePinHigh(pin)`    | Set pin level as high, assuming it is an output  | `PORTB \|= (1<<2)`                              | `palSetLine(pin)`                               |
-| `writePinLow(pin)`     | Set pin level as low, assuming it is an output   | `PORTB &= ~(1<<2)`                              | `palClearLine(pin)`                             |
-| `writePin(pin, level)` | Set pin level, assuming it is an output          | `(level) ? PORTB \|= (1<<2) : PORTB &= ~(1<<2)` | `(level) ? palSetLine(pin) : palClearLine(pin)` |
-| `readPin(pin)`         | Returns the level of the pin                     | `_SFR_IO8(pin >> 4) & _BV(pin & 0xF)`           | `palReadLine(pin)`                              |
-| `togglePin(pin)`       | Invert pin level, assuming it is an output       | `PORTB ^= (1<<2)`                               | `palToggleLine(pin)`                            |
+| Function                     | Description                                         | Old AVR Examples                                | Old ChibiOS/ARM Examples                         |
+|------------------------------|-----------------------------------------------------|-------------------------------------------------|--------------------------------------------------|
+| `setPinInput(pin)`           | Set pin as input with high impedance (High-Z)       | `DDRB &= ~(1<<2)`                               | `palSetLineMode(pin, PAL_MODE_INPUT)`            |
+| `setPinInputHigh(pin)`       | Set pin as input with builtin pull-up resistor      | `DDRB &= ~(1<<2); PORTB \|= (1<<2)`             | `palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)`     |
+| `setPinInputLow(pin)`        | Set pin as input with builtin pull-down resistor    | N/A (Not supported on AVR)                      | `palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)`   |
+| `setPinOutput(pin)`          | Set pin as output (alias of `setPinOutputPushPull`) | `DDRB \|= (1<<2)`                               | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)`  |
+| `setPinOutputPushPull(pin)`  | Set pin as output, push/pull mode                   | `DDRB \|= (1<<2)`                               | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)`  |
+| `setPinOutputOpenDrain(pin)` | Set pin as output, open-drain mode                  | N/A (Not implemented on AVR)                    | `palSetLineMode(pin, PAL_MODE_OUTPUT_OPENDRAIN)` |
+| `writePinHigh(pin)`          | Set pin level as high, assuming it is an output     | `PORTB \|= (1<<2)`                              | `palSetLine(pin)`                                |
+| `writePinLow(pin)`           | Set pin level as low, assuming it is an output      | `PORTB &= ~(1<<2)`                              | `palClearLine(pin)`                              |
+| `writePin(pin, level)`       | Set pin level, assuming it is an output             | `(level) ? PORTB \|= (1<<2) : PORTB &= ~(1<<2)` | `(level) ? palSetLine(pin) : palClearLine(pin)`  |
+| `readPin(pin)`               | Returns the level of the pin                        | `_SFR_IO8(pin >> 4) & _BV(pin & 0xF)`           | `palReadLine(pin)`                               |
+| `togglePin(pin)`             | Invert pin level, assuming it is an output          | `PORTB ^= (1<<2)`                               | `palToggleLine(pin)`                             |
 
 ## Advanced Settings :id=advanced-settings