diff options
| author | Takeshi ISHII <2170248+mtei@users.noreply.github.com> | 2021-01-13 10:46:22 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-13 12:46:22 +1100 |
| commit | 302b35c2a0ac90208e523944e8cc4b44a793d8d5 (patch) | |
| tree | 473bf6d47b42125027fde59c409971b0b1c925c6 /quantum/quantum.h | |
| parent | 017aa5988af308ae6d585b4afea6f28c28e2d238 (diff) | |
| download | qmk_firmware-302b35c2a0ac90208e523944e8cc4b44a793d8d5.tar.gz qmk_firmware-302b35c2a0ac90208e523944e8cc4b44a793d8d5.zip | |
fix matrix_io_delay() timing in quantum/matrix.c (#9603)
* fix matrix_io_delay() timing in quantum/matrix.c
* Updated comments explaining the need for matrix_io_delay() in quantum/matrix.c
* fix matrix_io_delay() timing in quantum/split_common/matrix.c
* Update quantum/matrix.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update quantum/split_common/matrix.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update quantum/matrix.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update quantum/split_common/matrix.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* add waitOutputPinValid() and wait_cpuclock() into quantum/quantum.h and tmk_core/common/wait.h
* add matrix_output_select_delay() and matrix_output_unselect_delay()
* fix quantum/matrix_common.c, tmk_core/common/matrix.h
* fix tmk_core/common/wait.h
* fix quantum/quantum.h, tmk_core/common/wait.h
* waitOutputPinValid() rename to waitInputPinDelay() in quantum/quantum.h.
* waitOutputPinValid() rename to waitInputPinDelay() in quantum/matrix_common.c
* update tmk_core/common/wait.h
* update comment in quantum/matrix.c, quantum/split_common/matrix.c
* update quantum/quantum.h: Make more margin in the GPIO_INPUT_PIN_DELAY default value.
Co-authored-by: Ryan <fauxpark@gmail.com>
Diffstat (limited to 'quantum/quantum.h')
| -rw-r--r-- | quantum/quantum.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/quantum/quantum.h b/quantum/quantum.h index 83694c832..d234e6ea0 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h | |||
| @@ -210,6 +210,13 @@ typedef uint8_t pin_t; | |||
| 210 | 210 | ||
| 211 | # define togglePin(pin) (PORTx_ADDRESS(pin) ^= _BV((pin)&0xF)) | 211 | # define togglePin(pin) (PORTx_ADDRESS(pin) ^= _BV((pin)&0xF)) |
| 212 | 212 | ||
| 213 | /* The AVR series GPIOs have a one clock read delay for changes in the digital input signal. | ||
| 214 | * But here's more margin to make it two clocks. */ | ||
| 215 | # if !defined(GPIO_INPUT_PIN_DELAY) | ||
| 216 | # define GPIO_INPUT_PIN_DELAY 2 | ||
| 217 | # endif | ||
| 218 | # define waitInputPinDelay() wait_cpuclock(GPIO_INPUT_PIN_DELAY) | ||
| 219 | |||
| 213 | #elif defined(PROTOCOL_CHIBIOS) | 220 | #elif defined(PROTOCOL_CHIBIOS) |
| 214 | typedef ioline_t pin_t; | 221 | typedef ioline_t pin_t; |
| 215 | 222 | ||
| @@ -225,6 +232,28 @@ typedef ioline_t pin_t; | |||
| 225 | # define readPin(pin) palReadLine(pin) | 232 | # define readPin(pin) palReadLine(pin) |
| 226 | 233 | ||
| 227 | # define togglePin(pin) palToggleLine(pin) | 234 | # define togglePin(pin) palToggleLine(pin) |
| 235 | |||
| 236 | #endif | ||
| 237 | |||
| 238 | #if defined(__ARMEL__) || defined(__ARMEB__) | ||
| 239 | /* For GPIOs on ARM-based MCUs, the input pins are sampled by the clock of the bus | ||
| 240 | * to which the GPIO is connected. | ||
| 241 | * The connected buses differ depending on the various series of MCUs. | ||
| 242 | * And since the instruction execution clock of the CPU and the bus clock of GPIO are different, | ||
| 243 | * there is a delay of several clocks to read the change of the input signal. | ||
| 244 | * | ||
| 245 | * Define this delay with the GPIO_INPUT_PIN_DELAY macro. | ||
| 246 | * If the GPIO_INPUT_PIN_DELAY macro is not defined, the following default values will be used. | ||
| 247 | * (A fairly large value of 0.25 microseconds is set.) | ||
| 248 | */ | ||
| 249 | # if !defined(GPIO_INPUT_PIN_DELAY) | ||
| 250 | # if defined(STM32_SYSCLK) | ||
| 251 | # define GPIO_INPUT_PIN_DELAY (STM32_SYSCLK/1000000L / 4) | ||
| 252 | # elif defined(KINETIS_SYSCLK_FREQUENCY) | ||
| 253 | # define GPIO_INPUT_PIN_DELAY (KINETIS_SYSCLK_FREQUENCY/1000000L / 4) | ||
| 254 | # endif | ||
| 255 | # endif | ||
| 256 | # define waitInputPinDelay() wait_cpuclock(GPIO_INPUT_PIN_DELAY) | ||
| 228 | #endif | 257 | #endif |
| 229 | 258 | ||
| 230 | // Atomic macro to help make GPIO and other controls atomic. | 259 | // Atomic macro to help make GPIO and other controls atomic. |
