aboutsummaryrefslogtreecommitdiff
path: root/drivers/chibios/ws2812_spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/chibios/ws2812_spi.c')
-rw-r--r--drivers/chibios/ws2812_spi.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/drivers/chibios/ws2812_spi.c b/drivers/chibios/ws2812_spi.c
index e02cbabc0..377a929b9 100644
--- a/drivers/chibios/ws2812_spi.c
+++ b/drivers/chibios/ws2812_spi.c
@@ -16,19 +16,23 @@
16# define WS2812_SPI_MOSI_PAL_MODE 5 16# define WS2812_SPI_MOSI_PAL_MODE 5
17#endif 17#endif
18 18
19#ifndef WS2812_SPI_SCK_PAL_MODE
20# define WS2812_SPI_SCK_PAL_MODE 5
21#endif
22
19// Push Pull or Open Drain Configuration 23// Push Pull or Open Drain Configuration
20// Default Push Pull 24// Default Push Pull
21#ifndef WS2812_EXTERNAL_PULLUP 25#ifndef WS2812_EXTERNAL_PULLUP
22# if defined(USE_GPIOV1) 26# if defined(USE_GPIOV1)
23# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL 27# define WS2812_MOSI_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL
24# else 28# else
25# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL 29# define WS2812_MOSI_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL
26# endif 30# endif
27#else 31#else
28# if defined(USE_GPIOV1) 32# if defined(USE_GPIOV1)
29# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN 33# define WS2812_MOSI_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
30# else 34# else
31# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN 35# define WS2812_MOSI_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN
32# endif 36# endif
33#endif 37#endif
34 38
@@ -63,6 +67,12 @@
63# define WS2812_SPI_BUFFER_MODE 0 // normal buffer 67# define WS2812_SPI_BUFFER_MODE 0 // normal buffer
64#endif 68#endif
65 69
70#if defined(USE_GPIOV1)
71# define WS2812_SCK_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL
72#else
73# define WS2812_SCK_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_SCK_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL
74#endif
75
66#define BYTES_FOR_LED_BYTE 4 76#define BYTES_FOR_LED_BYTE 4
67#define NB_COLORS 3 77#define NB_COLORS 3
68#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * NB_COLORS) 78#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * NB_COLORS)
@@ -109,7 +119,11 @@ static void set_led_color_rgb(LED_TYPE color, int pos) {
109} 119}
110 120
111void ws2812_init(void) { 121void ws2812_init(void) {
112 palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE); 122 palSetLineMode(RGB_DI_PIN, WS2812_MOSI_OUTPUT_MODE);
123
124#ifdef WS2812_SPI_SCK_PIN
125 palSetLineMode(WS2812_SPI_SCK_PIN, WS2812_SCK_OUTPUT_MODE);
126#endif // WS2812_SPI_SCK_PIN
113 127
114 // TODO: more dynamic baudrate 128 // TODO: more dynamic baudrate
115 static const SPIConfig spicfg = {WS2812_SPI_BUFFER_MODE, NULL, PAL_PORT(RGB_DI_PIN), PAL_PAD(RGB_DI_PIN), WS2812_SPI_DIVISOR}; 129 static const SPIConfig spicfg = {WS2812_SPI_BUFFER_MODE, NULL, PAL_PORT(RGB_DI_PIN), PAL_PAD(RGB_DI_PIN), WS2812_SPI_DIVISOR};