planck/rev6: Enable WS2812 LED matrix with pwm drivers (#9735) * planck/rev6: Enable WS2812 LED matrix with pwm drivers * Comments and cleanup. * GPL2+ Licensing Co-authored-by: Nick Brassel <nick@tzarc.org>
5 files changed, 83 insertions(+), 11 deletions(-) A keyboards/planck/rev6/chconf.h M keyboards/planck/rev6/config.h A keyboards/planck/rev6/mcuconf.h M keyboards/planck/rev6/rev6.c M keyboards/planck/rev6/rules.mk
A keyboards/planck/rev6/chconf.h => keyboards/planck/rev6/chconf.h +21 -0
@@ 0,0 1,21 @@ /* Copyright 2020 QMK Contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // Need to override the SysTick timer to use TIM3 -- this is a 16-bit timer on F303 // so we need to change resolution and frequency to match. #define CH_CFG_ST_RESOLUTION 16 #define CH_CFG_ST_FREQUENCY 10000 #include_next "chconf.h"
M keyboards/planck/rev6/config.h => keyboards/planck/rev6/config.h +11 -10
@@ 126,17 126,18 @@ /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ //#define MIDI_TONE_KEYCODE_OCTAVES 1 // #define WS2812_LED_N 2 // #define RGBLED_NUM WS2812_LED_N // #define WS2812_TIM_N 2 // #define WS2812_TIM_CH 2 // #define PORT_WS2812 GPIOA // #define PIN_WS2812 1 // #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection) //#define WS2812_DMA_CHANNEL 7 // DMA channel for TIMx_UP //#define WS2812_EXTERNAL_PULLUP /* * WS2812 Underglow Matrix options */ #define RGB_DI_PIN A1 #define RGBLED_NUM 9 #define RGBLIGHT_ANIMATIONS #define DRIVER_LED_TOTAL RGBLED_NUM #define WS2812_PWM_DRIVER PWMD2 #define WS2812_PWM_CHANNEL 2 #define WS2812_PWM_PAL_MODE 1 #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 #define WS2812_DMA_CHANNEL 2 #endif
A keyboards/planck/rev6/mcuconf.h => keyboards/planck/rev6/mcuconf.h +30 -0
@@ 0,0 1,30 @@ /* Copyright 2020 QMK Contributors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include_next "mcuconf.h" // The SysTick timer from the normal quantum/stm32 uses TIM2 -- the WS2812 pin used // on the Planck requires the use of TIM2 to run PWM -- rework which timers are // allocated for PWM usage. #undef STM32_PWM_USE_TIM2 #undef STM32_PWM_USE_TIM3 #define STM32_PWM_USE_TIM2 TRUE #define STM32_PWM_USE_TIM3 FALSE // As mentioned above, we need to reallocate the SysTick timer used from // TIM2 to TIM3. #undef STM32_ST_USE_TIMER #define STM32_ST_USE_TIMER 3
M keyboards/planck/rev6/rev6.c => keyboards/planck/rev6/rev6.c +19 -0
@@ 15,6 15,25 @@ */ #include "rev6.h" led_config_t g_led_config = { { // Key Matrix to LED Index { NO_LED, 6, NO_LED, NO_LED, 5, NO_LED }, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 0 }, { NO_LED, 7, NO_LED, NO_LED, 2, NO_LED }, { NO_LED, 4, NO_LED, NO_LED, 3, NO_LED }, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, { NO_LED, 1, NO_LED, NO_LED, 8, NO_LED }, }, { // LED Index to Physical Position {112, 39}, {148, 60}, {206, 53}, {206, 3}, {150, 3}, {74, 3}, {18, 3}, {18, 54}, {77, 60} }, { // LED Index to Flag LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL, LED_FLAG_ALL } }; void matrix_init_kb(void) { matrix_init_user(); }
M keyboards/planck/rev6/rules.mk => keyboards/planck/rev6/rules.mk +2 -1
@@ 18,13 18,14 @@ AUDIO_ENABLE = yes # Audio output UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. WS2812_DRIVER = bitbang WS2812_DRIVER = pwm API_SYSEX_ENABLE = no # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend #SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend RGB_MATRIX_ENABLE = WS2812 # SERIAL_LINK_ENABLE = yes ENCODER_ENABLE = yes DIP_SWITCH_ENABLE = yes