diff options
Diffstat (limited to 'drivers/chibios/ws2812_spi.c')
-rw-r--r-- | drivers/chibios/ws2812_spi.c | 24 |
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 | ||
111 | void ws2812_init(void) { | 121 | void 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}; |