aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2017-02-12 11:29:42 -0500
committerJack Humbert <jack.humb@gmail.com>2017-02-12 11:29:42 -0500
commit8d0fdf10086a0e8a1615f0521fccf1f5a2806497 (patch)
treea64c77717d4b4cc7ffe08a6cdfc7e8091bd3c32a /quantum
parenta0c2305bd1153d9d578d73effd33896c2dbc26c8 (diff)
downloadqmk_firmware-8d0fdf10086a0e8a1615f0521fccf1f5a2806497.tar.gz
qmk_firmware-8d0fdf10086a0e8a1615f0521fccf1f5a2806497.zip
adds soft pwm for non-timed ports
Diffstat (limited to 'quantum')
-rw-r--r--quantum/quantum.c59
-rw-r--r--quantum/quantum.h1
2 files changed, 46 insertions, 14 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 45ea8cb73..95f06d95d 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -7,6 +7,9 @@
7#define TAPPING_TERM 200 7#define TAPPING_TERM 200
8#endif 8#endif
9 9
10#include "backlight.h"
11extern backlight_config_t backlight_config;
12
10static void do_code16 (uint16_t code, void (*f) (uint8_t)) { 13static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
11 switch (code) { 14 switch (code) {
12 case QK_MODS ... QK_MODS_MAX: 15 case QK_MODS ... QK_MODS_MAX:
@@ -577,6 +580,10 @@ void matrix_scan_quantum() {
577 matrix_scan_combo(); 580 matrix_scan_combo();
578 #endif 581 #endif
579 582
583 #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN)
584 backlight_task();
585 #endif
586
580 matrix_scan_kb(); 587 matrix_scan_kb();
581} 588}
582 589
@@ -644,13 +651,13 @@ __attribute__ ((weak))
644void backlight_set(uint8_t level) 651void backlight_set(uint8_t level)
645{ 652{
646 // Prevent backlight blink on lowest level 653 // Prevent backlight blink on lowest level
647 #if BACKLIGHT_ON_STATE == 0 654 // #if BACKLIGHT_ON_STATE == 0
648 // PORTx &= ~n 655 // // PORTx &= ~n
649 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); 656 // _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
650 #else 657 // #else
651 // PORTx |= n 658 // // PORTx |= n
652 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); 659 // _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
653 #endif 660 // #endif
654 661
655 if ( level == 0 ) { 662 if ( level == 0 ) {
656 #ifndef NO_BACKLIGHT_CLOCK 663 #ifndef NO_BACKLIGHT_CLOCK
@@ -658,13 +665,13 @@ void backlight_set(uint8_t level)
658 TCCR1A &= ~(_BV(COM1x1)); 665 TCCR1A &= ~(_BV(COM1x1));
659 OCR1x = 0x0; 666 OCR1x = 0x0;
660 #else 667 #else
661 #if BACKLIGHT_ON_STATE == 0 668 // #if BACKLIGHT_ON_STATE == 0
662 // PORTx |= n 669 // // PORTx |= n
663 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); 670 // _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
664 #else 671 // #else
665 // PORTx &= ~n 672 // // PORTx &= ~n
666 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); 673 // _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
667 #endif 674 // #endif
668 #endif 675 #endif
669 } 676 }
670 #ifndef NO_BACKLIGHT_CLOCK 677 #ifndef NO_BACKLIGHT_CLOCK
@@ -687,6 +694,30 @@ void backlight_set(uint8_t level)
687 #endif 694 #endif
688} 695}
689 696
697uint8_t backlight_tick = 0;
698
699void backlight_task(void) {
700 #ifdef NO_BACKLIGHT_CLOCK
701 if ((0xFFFF >> ((BACKLIGHT_LEVELS - backlight_config.level) * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {
702 #if BACKLIGHT_ON_STATE == 0
703 // PORTx &= ~n
704 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
705 #else
706 // PORTx |= n
707 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
708 #endif
709 } else {
710 #if BACKLIGHT_ON_STATE == 0
711 // PORTx |= n
712 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
713 #else
714 // PORTx &= ~n
715 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
716 #endif
717 }
718 backlight_tick = (backlight_tick + 1) % 16;
719 #endif
720}
690 721
691#ifdef BACKLIGHT_BREATHING 722#ifdef BACKLIGHT_BREATHING
692 723
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 18f072189..2470d8c7d 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -95,6 +95,7 @@ void unregister_code16 (uint16_t code);
95 95
96#ifdef BACKLIGHT_ENABLE 96#ifdef BACKLIGHT_ENABLE
97void backlight_init_ports(void); 97void backlight_init_ports(void);
98void backlight_task(void);
98 99
99#ifdef BACKLIGHT_BREATHING 100#ifdef BACKLIGHT_BREATHING
100void breathing_enable(void); 101void breathing_enable(void);