don't block on led transmission
This commit is contained in:
parent
63c17af691
commit
72b3d5188b
|
@ -104,10 +104,10 @@ void ws2812b_set_rgb(uint16_t led, uint8_t red, uint8_t green, uint8_t blue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ws2812b_transmit(void)
|
bool ws2812b_transmit(void)
|
||||||
{
|
{
|
||||||
while (transmit_flag) { // wait for previous transmission to complete
|
if (transmit_flag) { // a transmission is already ongoing
|
||||||
__WFI();
|
return false;
|
||||||
}
|
}
|
||||||
transmit_flag = true; // remember transmission started
|
transmit_flag = true; // remember transmission started
|
||||||
dma_set_memory_address(WS2812B_DMA, WS2812B_DMA_CH, (uint32_t)ws2812b_data);
|
dma_set_memory_address(WS2812B_DMA, WS2812B_DMA_CH, (uint32_t)ws2812b_data);
|
||||||
|
@ -119,6 +119,7 @@ void ws2812b_transmit(void)
|
||||||
|
|
||||||
timer_set_counter(WS2812B_TIMER, 0); // reset timer counter fro clean clock
|
timer_set_counter(WS2812B_TIMER, 0); // reset timer counter fro clean clock
|
||||||
timer_enable_counter(WS2812B_TIMER); // start timer to generate clock
|
timer_enable_counter(WS2812B_TIMER); // start timer to generate clock
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ws2812b_setup(void)
|
void ws2812b_setup(void)
|
||||||
|
|
|
@ -33,5 +33,7 @@ void ws2812b_setup(void);
|
||||||
* @note transmission needs to be done separately
|
* @note transmission needs to be done separately
|
||||||
*/
|
*/
|
||||||
void ws2812b_set_rgb(uint16_t led, uint8_t red, uint8_t green, uint8_t blue);
|
void ws2812b_set_rgb(uint16_t led, uint8_t red, uint8_t green, uint8_t blue);
|
||||||
/** @brief transmit color values to WS2812b LEDs */
|
/** @brief transmit color values to WS2812b LEDs
|
||||||
void ws2812b_transmit(void);
|
* @return true if transmission started, false if another transmission is already ongoing
|
||||||
|
*/
|
||||||
|
bool ws2812b_transmit(void);
|
||||||
|
|
Loading…
Reference in New Issue