Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Multi_WS2811 by
WS2811.h@1:c4123ca9b02c, 2014-12-14 (annotated)
- Committer:
- ryanfeng
- Date:
- Sun Dec 14 04:49:52 2014 +0000
- Revision:
- 1:c4123ca9b02c
- Parent:
- 0:a8535703f23b
Changed values for flippityflappity
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| bikeNomad | 0:a8535703f23b | 1 | // Mbed library to control WS2801-based RGB LED Strips |
| bikeNomad | 0:a8535703f23b | 2 | // some portions (c) 2011 Jelmer Tiete |
| bikeNomad | 0:a8535703f23b | 3 | // This library is ported from the Arduino implementation of Adafruit Industries |
| bikeNomad | 0:a8535703f23b | 4 | // found at: http://github.com/adafruit/LPD8806 |
| bikeNomad | 0:a8535703f23b | 5 | // and their strips: http://www.adafruit.com/products/306 |
| bikeNomad | 0:a8535703f23b | 6 | // Released under the MIT License: http://mbed.org/license/mit |
| bikeNomad | 0:a8535703f23b | 7 | // |
| bikeNomad | 0:a8535703f23b | 8 | /*****************************************************************************/ |
| bikeNomad | 0:a8535703f23b | 9 | |
| bikeNomad | 0:a8535703f23b | 10 | // Heavily modified by Jas Strong, 2012-10-04 |
| bikeNomad | 0:a8535703f23b | 11 | // Changed to use a virtual base class and to use software SPI. |
| bikeNomad | 0:a8535703f23b | 12 | // |
| bikeNomad | 0:a8535703f23b | 13 | // Modified by Ned Konz, December 2013. |
| bikeNomad | 0:a8535703f23b | 14 | // Using three-phase DMA ala Paul Stoffegren's version. |
| bikeNomad | 0:a8535703f23b | 15 | |
| bikeNomad | 0:a8535703f23b | 16 | #ifndef MBED_WS2811_H |
| bikeNomad | 0:a8535703f23b | 17 | #define MBED_WS2811_H |
| bikeNomad | 0:a8535703f23b | 18 | |
| bikeNomad | 0:a8535703f23b | 19 | #include "mbed.h" |
| bikeNomad | 0:a8535703f23b | 20 | #include "LedStrip.h" |
| bikeNomad | 0:a8535703f23b | 21 | |
| ryanfeng | 1:c4123ca9b02c | 22 | #define MAX_LEDS_PER_STRIP 54 |
| bikeNomad | 0:a8535703f23b | 23 | |
| bikeNomad | 0:a8535703f23b | 24 | extern "C" void DMA0_IRQHandler(); |
| bikeNomad | 0:a8535703f23b | 25 | extern "C" void TPM0_IRQHandler(); |
| bikeNomad | 0:a8535703f23b | 26 | |
| bikeNomad | 0:a8535703f23b | 27 | class WS2811 : public LedStrip |
| bikeNomad | 0:a8535703f23b | 28 | { |
| bikeNomad | 0:a8535703f23b | 29 | public: |
| bikeNomad | 0:a8535703f23b | 30 | WS2811(unsigned n, unsigned pinNumber); |
| bikeNomad | 0:a8535703f23b | 31 | |
| bikeNomad | 0:a8535703f23b | 32 | virtual void begin(); |
| bikeNomad | 0:a8535703f23b | 33 | virtual void show(); |
| bikeNomad | 0:a8535703f23b | 34 | virtual void blank(); |
| bikeNomad | 0:a8535703f23b | 35 | |
| bikeNomad | 0:a8535703f23b | 36 | static void startDMA(); |
| bikeNomad | 0:a8535703f23b | 37 | |
| bikeNomad | 0:a8535703f23b | 38 | private: |
| bikeNomad | 0:a8535703f23b | 39 | uint32_t pinMask; |
| bikeNomad | 0:a8535703f23b | 40 | |
| bikeNomad | 0:a8535703f23b | 41 | void writePixel(unsigned n, uint8_t *p); |
| bikeNomad | 0:a8535703f23b | 42 | |
| bikeNomad | 0:a8535703f23b | 43 | // Class Static: |
| bikeNomad | 0:a8535703f23b | 44 | |
| bikeNomad | 0:a8535703f23b | 45 | static bool initialized; |
| bikeNomad | 0:a8535703f23b | 46 | static uint32_t enabledPins; |
| bikeNomad | 0:a8535703f23b | 47 | static volatile bool dma_done; |
| bikeNomad | 0:a8535703f23b | 48 | static void wait_for_dma_done() { while (!dma_done) __WFI(); } |
| bikeNomad | 0:a8535703f23b | 49 | |
| bikeNomad | 0:a8535703f23b | 50 | static void writeByte(uint8_t byte, uint32_t mask, uint32_t *dest); |
| bikeNomad | 0:a8535703f23b | 51 | |
| bikeNomad | 0:a8535703f23b | 52 | static void hw_init(); |
| bikeNomad | 0:a8535703f23b | 53 | static void io_init(); |
| bikeNomad | 0:a8535703f23b | 54 | static void clock_init(); |
| bikeNomad | 0:a8535703f23b | 55 | static void dma_init(); |
| bikeNomad | 0:a8535703f23b | 56 | static void tpm_init(); |
| bikeNomad | 0:a8535703f23b | 57 | static void dma_data_init(); |
| bikeNomad | 0:a8535703f23b | 58 | |
| bikeNomad | 0:a8535703f23b | 59 | friend void TPM0_IRQHandler(); |
| bikeNomad | 0:a8535703f23b | 60 | }; |
| bikeNomad | 0:a8535703f23b | 61 | |
| bikeNomad | 0:a8535703f23b | 62 | #endif |
| bikeNomad | 0:a8535703f23b | 63 |
