Skip to content

Commit

Permalink
add wait_cpuclock() macro for AVR and CPU_CLOCK macro (qmk#12755)
Browse files Browse the repository at this point in the history
  • Loading branch information
mtei authored Aug 24, 2021
1 parent c4dbf4b commit c9c60d2
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
4 changes: 3 additions & 1 deletion tmk_core/common/avr/_wait.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,13 @@
} \
} \
} while (0)
#define wait_cpuclock(n) __builtin_avr_delay_cycles(n)
#define CPU_CLOCK F_CPU

/* The AVR series GPIOs have a one clock read delay for changes in the digital input signal.
* But here's more margin to make it two clocks. */
#ifndef GPIO_INPUT_PIN_DELAY
# define GPIO_INPUT_PIN_DELAY 2
#endif

#define waitInputPinDelay() __builtin_avr_delay_cycles(GPIO_INPUT_PIN_DELAY)
#define waitInputPinDelay() wait_cpuclock(GPIO_INPUT_PIN_DELAY)
9 changes: 5 additions & 4 deletions tmk_core/common/chibios/_wait.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ void wait_us(uint16_t duration);
} while (0)
#endif

#include "_wait.c"

#define CPU_CLOCK STM32_SYSCLK

/* For GPIOs on ARM-based MCUs, the input pins are sampled by the clock of the bus
* to which the GPIO is connected.
* The connected buses differ depending on the various series of MCUs.
Expand All @@ -51,11 +55,8 @@ void wait_us(uint16_t duration);
* If the GPIO_INPUT_PIN_DELAY macro is not defined, the following default values will be used.
* (A fairly large value of 0.25 microseconds is set.)
*/

#include "_wait.c"

#ifndef GPIO_INPUT_PIN_DELAY
# define GPIO_INPUT_PIN_DELAY (STM32_SYSCLK / 1000000L / 4)
# define GPIO_INPUT_PIN_DELAY (CPU_CLOCK / 1000000L / 4)
#endif

#define waitInputPinDelay() wait_cpuclock(GPIO_INPUT_PIN_DELAY)

0 comments on commit c9c60d2

Please sign in to comment.