1
0
forked from me/IronOS

LED iffy (unstable timer?)

This commit is contained in:
Ben V. Brown
2021-05-02 21:39:47 +10:00
parent e4f7946dcb
commit 5128602335
4 changed files with 470 additions and 493 deletions

View File

@@ -11,7 +11,7 @@
#ifndef CORE_DRIVERS_WS2812_H_
#define CORE_DRIVERS_WS2812_H_
#ifndef WS2812_LED_COUNT
#define WS2812_LED_COUNT 4
#define WS2812_LED_COUNT 3
#endif
#ifndef WS2812_LED_CHANNEL_COUNT
#define WS2812_LED_CHANNEL_COUNT 3
@@ -19,23 +19,23 @@
#define WS2812_RAW_BYTES_PER_LED (WS2812_LED_CHANNEL_COUNT * 8)
class WS2812 {
public:
static void init(void);
static uint8_t led_update(uint8_t block);
static void led_set_color(size_t index, uint8_t r, uint8_t g, uint8_t b);
static void led_set_color_all(uint8_t r, uint8_t g, uint8_t b);
static void init(void);
static uint8_t led_update(uint8_t block);
static void led_set_color(size_t index, uint8_t r, uint8_t g, uint8_t b);
static void led_set_color_all(uint8_t r, uint8_t g, uint8_t b);
private:
static uint8_t led_is_update_finished(void);
static void led_start_reset_pulse(uint8_t num);
static void DMAHalfComplete(DMA_HandleTypeDef *hdma);
static void DMAComplete(DMA_HandleTypeDef *hdma);
static void led_update_sequence(uint8_t tc);
static void led_fill_led_pwm_data(size_t ledx, volatile uint16_t *ptr);
static uint8_t leds_colors[WS2812_LED_CHANNEL_COUNT * WS2812_LED_COUNT];
static volatile uint16_t tmp_led_data[2 * WS2812_RAW_BYTES_PER_LED];
static volatile uint8_t is_reset_pulse; /*!< Status if we are sending reset pulse or led data */
static volatile uint8_t is_updating; /*!< Is updating in progress? */
static volatile uint32_t current_led; /*!< Current LED number we are sending */
static uint8_t led_is_update_finished(void);
static void led_start_reset_pulse(uint8_t num);
static void DMAHalfComplete(DMA_HandleTypeDef *hdma);
static void DMAComplete(DMA_HandleTypeDef *hdma);
static void led_update_sequence(uint8_t tc);
static void led_fill_led_pwm_data(size_t ledx, volatile uint16_t *ptr);
static uint8_t leds_colors[WS2812_LED_CHANNEL_COUNT * WS2812_LED_COUNT];
static volatile uint16_t tmp_led_data[2 * WS2812_RAW_BYTES_PER_LED];
static volatile uint8_t is_reset_pulse; /*!< Status if we are sending reset pulse or led data */
static volatile uint8_t is_updating; /*!< Is updating in progress? */
static volatile uint32_t current_led; /*!< Current LED number we are sending */
};
#endif /* CORE_DRIVERS_WS2812_H_ */