Optimised fork of bikeNomad's WS2811 LED control library. Supports KL25Z and KL46Z
Fork of Multi_WS2811 by
Optimised to use far less RAM than the original.
Capable of running up to 8 strings of 240 LEDs each with plenty of RAM to spare on the KL46Z.
Should run at least three strings of 240 LEDs on the KL25Z (RAM limited)
Diff: WS2811.h
- Revision:
- 0:a8535703f23b
- Child:
- 2:1c2c9c8788a8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WS2811.h Sat Jan 04 00:40:08 2014 +0000 @@ -0,0 +1,63 @@ +// Mbed library to control WS2801-based RGB LED Strips +// some portions (c) 2011 Jelmer Tiete +// This library is ported from the Arduino implementation of Adafruit Industries +// found at: http://github.com/adafruit/LPD8806 +// and their strips: http://www.adafruit.com/products/306 +// Released under the MIT License: http://mbed.org/license/mit +// +/*****************************************************************************/ + +// Heavily modified by Jas Strong, 2012-10-04 +// Changed to use a virtual base class and to use software SPI. +// +// Modified by Ned Konz, December 2013. +// Using three-phase DMA ala Paul Stoffegren's version. + +#ifndef MBED_WS2811_H +#define MBED_WS2811_H + +#include "mbed.h" +#include "LedStrip.h" + +#define MAX_LEDS_PER_STRIP 60 + +extern "C" void DMA0_IRQHandler(); +extern "C" void TPM0_IRQHandler(); + +class WS2811 : public LedStrip +{ +public: + WS2811(unsigned n, unsigned pinNumber); + + virtual void begin(); + virtual void show(); + virtual void blank(); + + static void startDMA(); + +private: + uint32_t pinMask; + + void writePixel(unsigned n, uint8_t *p); + + // Class Static: + + static bool initialized; + static uint32_t enabledPins; + static volatile bool dma_done; + static void wait_for_dma_done() { while (!dma_done) __WFI(); } + + static void writeByte(uint8_t byte, uint32_t mask, uint32_t *dest); + + static void hw_init(); + static void io_init(); + static void clock_init(); + static void dma_init(); + static void tpm_init(); + static void dma_data_init(); + + friend void TPM0_IRQHandler(); +}; + +#endif +