aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar fauxpark <fauxpark@gmail.com>2019-09-21 15:11:15 +1000
committerGravatar Drashna Jaelre <drashna@live.com>2019-09-20 22:11:15 -0700
commit3642a82d37e8c4fb34b9ee60606ab831d642c9ec (patch)
treefdfef2b6461519d7c5515308c9ae6bb619b01031
parentc7d0262be7f3bc2c709fd45bd41327433285a11e (diff)
downloadqmk_firmware-3642a82d37e8c4fb34b9ee60606ab831d642c9ec.tar.gz
Add support for 328P hardware backlight on B1/B2 (#6776)
-rw-r--r--docs/feature_backlight.md22
-rw-r--r--quantum/quantum.c16
2 files changed, 28 insertions, 10 deletions
diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md
index 690eb8215..556da7385 100644
--- a/docs/feature_backlight.md
+++ b/docs/feature_backlight.md
@@ -32,16 +32,18 @@ This feature is distinct from both the [RGB underglow](feature_rgblight.md) and
Hardware PWM is supported according to the following table:
-|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|
-|-------------|-------------|-------------|-------------|---------|
-|`B5` |Timer 1 |Timer 1 | | |
-|`B6` |Timer 1 |Timer 1 | | |
-|`B7` |Timer 1 |Timer 1 |Timer 1 | |
-|`C4` |Timer 3 | | | |
-|`C5` |Timer 3 | |Timer 1 | |
-|`C6` |Timer 3 |Timer 3 |Timer 1 | |
-|`D4` | | | |Timer 1 |
-|`D5` | | | |Timer 1 |
+|Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328P|
+|-------------|-------------|-------------|-------------|---------|----------|
+|`B1` | | | | |Timer 1 |
+|`B2` | | | | |Timer 1 |
+|`B5` |Timer 1 |Timer 1 | | | |
+|`B6` |Timer 1 |Timer 1 | | | |
+|`B7` |Timer 1 |Timer 1 |Timer 1 | | |
+|`C4` |Timer 3 | | | | |
+|`C5` |Timer 3 | |Timer 1 | | |
+|`C6` |Timer 3 |Timer 3 |Timer 1 | | |
+|`D4` | | | |Timer 1 | |
+|`D5` | | | |Timer 1 | |
All other pins will use software PWM. If the [Audio](feature_audio.md) feature is disabled or only using one timer, the backlight PWM can be triggered by a hardware timer:
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 85a03377f..ec80fa557 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -1104,6 +1104,22 @@ void matrix_scan_quantum() {
# define COMxx1 COM1A1
# define OCRxx OCR1A
# endif
+# elif defined(__AVR_ATmega328P__) && (BACKLIGHT_PIN == B1 || BACKLIGHT_PIN == B2)
+# define HARDWARE_PWM
+# define ICRx ICR1
+# define TCCRxA TCCR1A
+# define TCCRxB TCCR1B
+# define TIMERx_OVF_vect TIMER1_OVF_vect
+# define TIMSKx TIMSK1
+# define TOIEx TOIE1
+
+# if BACKLIGHT_PIN == B1
+# define COMxx1 COM1A1
+# define OCRxx OCR1A
+# elif BACKLIGHT_PIN == B2
+# define COMxx1 COM1B1
+# define OCRxx OCR1B
+# endif
# else
# if !defined(BACKLIGHT_CUSTOM_DRIVER)
# if !defined(B5_AUDIO) && !defined(B6_AUDIO) && !defined(B7_AUDIO)