adds soft pwm for non-timed ports
This commit is contained in:
parent
a0c2305bd1
commit
8d0fdf1008
4 changed files with 50 additions and 18 deletions
|
@ -7,6 +7,9 @@
|
|||
#define TAPPING_TERM 200
|
||||
#endif
|
||||
|
||||
#include "backlight.h"
|
||||
extern backlight_config_t backlight_config;
|
||||
|
||||
static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
|
||||
switch (code) {
|
||||
case QK_MODS ... QK_MODS_MAX:
|
||||
|
@ -577,6 +580,10 @@ void matrix_scan_quantum() {
|
|||
matrix_scan_combo();
|
||||
#endif
|
||||
|
||||
#if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN)
|
||||
backlight_task();
|
||||
#endif
|
||||
|
||||
matrix_scan_kb();
|
||||
}
|
||||
|
||||
|
@ -644,13 +651,13 @@ __attribute__ ((weak))
|
|||
void backlight_set(uint8_t level)
|
||||
{
|
||||
// Prevent backlight blink on lowest level
|
||||
#if BACKLIGHT_ON_STATE == 0
|
||||
// PORTx &= ~n
|
||||
_SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
|
||||
#else
|
||||
// PORTx |= n
|
||||
_SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
|
||||
#endif
|
||||
// #if BACKLIGHT_ON_STATE == 0
|
||||
// // PORTx &= ~n
|
||||
// _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
|
||||
// #else
|
||||
// // PORTx |= n
|
||||
// _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
|
||||
// #endif
|
||||
|
||||
if ( level == 0 ) {
|
||||
#ifndef NO_BACKLIGHT_CLOCK
|
||||
|
@ -658,13 +665,13 @@ void backlight_set(uint8_t level)
|
|||
TCCR1A &= ~(_BV(COM1x1));
|
||||
OCR1x = 0x0;
|
||||
#else
|
||||
#if BACKLIGHT_ON_STATE == 0
|
||||
// PORTx |= n
|
||||
_SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
|
||||
#else
|
||||
// PORTx &= ~n
|
||||
_SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
|
||||
#endif
|
||||
// #if BACKLIGHT_ON_STATE == 0
|
||||
// // PORTx |= n
|
||||
// _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
|
||||
// #else
|
||||
// // PORTx &= ~n
|
||||
// _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
|
||||
// #endif
|
||||
#endif
|
||||
}
|
||||
#ifndef NO_BACKLIGHT_CLOCK
|
||||
|
@ -687,6 +694,30 @@ void backlight_set(uint8_t level)
|
|||
#endif
|
||||
}
|
||||
|
||||
uint8_t backlight_tick = 0;
|
||||
|
||||
void backlight_task(void) {
|
||||
#ifdef NO_BACKLIGHT_CLOCK
|
||||
if ((0xFFFF >> ((BACKLIGHT_LEVELS - backlight_config.level) * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {
|
||||
#if BACKLIGHT_ON_STATE == 0
|
||||
// PORTx &= ~n
|
||||
_SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
|
||||
#else
|
||||
// PORTx |= n
|
||||
_SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
|
||||
#endif
|
||||
} else {
|
||||
#if BACKLIGHT_ON_STATE == 0
|
||||
// PORTx |= n
|
||||
_SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
|
||||
#else
|
||||
// PORTx &= ~n
|
||||
_SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
|
||||
#endif
|
||||
}
|
||||
backlight_tick = (backlight_tick + 1) % 16;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef BACKLIGHT_BREATHING
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue