~ruther/qmk_firmware

c9c60d227e38abdf08ca86bcdad3a0cac2579e3f — Takeshi ISHII 4 years ago c4dbf4b
add wait_cpuclock() macro for AVR and CPU_CLOCK macro (#12755)

2 files changed, 8 insertions(+), 5 deletions(-)

M tmk_core/common/avr/_wait.h
M tmk_core/common/chibios/_wait.h
M tmk_core/common/avr/_wait.h => tmk_core/common/avr/_wait.h +3 -1
@@ 37,6 37,8 @@
            }                                   \
        }                                       \
    } 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. */


@@ 44,4 46,4 @@
#    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)

M tmk_core/common/chibios/_wait.h => tmk_core/common/chibios/_wait.h +5 -4
@@ 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.


@@ 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)