keychron_qmk_firmware/drivers/avr
Sergey Vlasov 627ceebef3
ws2812: Fix number of nops for AVR at 8 MHz (#9559)
* ws2812: Fix number of nops for AVR at 8 MHz

When trying to calculate the number of nops for AVR running at 8 MHz,
the value of `w3` is expected to be negative; however, because `F_CPU`
is defined in tmk_core/avr.mk with the `UL` suffix, the preprocessor
performs its calculations using `unsigned long`, getting a very large
positive number instead of the expected negative number; this then
results in generating code with a huge number of nops.  Fix the broken
calculations by performing a comparison before subtraction, so that the
unsigned number wraparound does not occur.

The keyboard which triggers the problem is `handwired/promethium`; the
buggy code silently compiles, but the resulting timings would be
completely wrong.

* ws2812: Clean up the code after the 8 MHz fix

Remove old code which was unsuccessfully trying to clamp negative w1, w2
and w3 values to 0, and set w1_nops, w2_nops and w3_nops directly.
2021-02-09 08:33:04 +11:00
..
analog.c
analog.h
apa102.c
apa102.h
glcdfont.c
hd44780.c
hd44780.h Change include guards in tmk_core/ and drivers/ to pragma once (#11240) 2020-12-26 15:56:11 +11:00
i2c_master.c
i2c_master.h Change include guards in tmk_core/ and drivers/ to pragma once (#11240) 2020-12-26 15:56:11 +11:00
i2c_slave.c
i2c_slave.h Change include guards in tmk_core/ and drivers/ to pragma once (#11240) 2020-12-26 15:56:11 +11:00
serial.c 2020 November 28 Breaking Changes Update (#11053) 2020-11-28 12:02:18 -08:00
serial.h
spi_master.c Fix error handling in SPI master. (#11122) 2020-12-06 12:50:02 +11:00
spi_master.h
ssd1306.c Fix ssd1306 compilation on avr-gcc 10 (#9267) 2020-09-17 10:42:24 +10:00
ssd1306.h Change include guards in tmk_core/ and drivers/ to pragma once (#11240) 2020-12-26 15:56:11 +11:00
ws2812_i2c.c
ws2812.c ws2812: Fix number of nops for AVR at 8 MHz (#9559) 2021-02-09 08:33:04 +11:00