19#if defined(FASTLED_TEENSY3) && (F_CPU > 48000000)
20#define DATA_RATE_MHZ(X) (((48000000L / 1000000L) / X))
21#define DATA_RATE_KHZ(X) (((48000000L / 1000L) / X))
22#elif defined(FASTLED_TEENSY4) || (defined(ESP32) && defined(FASTLED_ALL_PINS_HARDWARE_SPI)) || (defined(ESP8266) && defined(FASTLED_ALL_PINS_HARDWARE_SPI) || defined(FASTLED_STUB_IMPL))
24#define DATA_RATE_MHZ(X) (1000000 * (X))
25#define DATA_RATE_KHZ(X) (1000 * (X))
28#define DATA_RATE_MHZ(X) ((F_CPU / 1000000L) / X)
30#define DATA_RATE_KHZ(X) ((F_CPU / 1000L) / X)
42#if defined(FASTLED_STUB_IMPL)
44template<fl::u8 _DATA_PIN, fl::u8 _CLOCK_PIN, fl::u32 _SPI_CLOCK_DIVIDER>
45class SPIOutput :
public fl::StubSPIOutput {};
50#if !defined(FASTLED_ALL_PINS_HARDWARE_SPI)
52template<fl::u8 _DATA_PIN, fl::u8 _CLOCK_PIN, fl::u32 _SPI_CLOCK_DIVIDER>
57template<fl::u8 _DATA_PIN, fl::u8 _CLOCK_PIN, fl::u32 _SPI_CLOCK_DIVIDER>
60#ifndef FASTLED_FORCE_SOFTWARE_SPI
62#if defined(NRF51) && defined(FASTLED_ALL_PINS_HARDWARE_SPI)
63template<fl::u8 _DATA_PIN, fl::u8 _CLOCK_PIN, fl::u32 _SPI_CLOCK_DIVIDER>
64class SPIOutput :
public NRF51SPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER> {};
67#if defined(NRF52_SERIES) && defined(FASTLED_ALL_PINS_HARDWARE_SPI)
68template<fl::u8 _DATA_PIN, fl::u8 _CLOCK_PIN, fl::u32 _SPI_CLOCK_DIVIDER>
69class SPIOutput :
public NRF52SPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER> {};
72#if defined(FASTLED_APOLLO3) && defined(FASTLED_ALL_PINS_HARDWARE_SPI)
73template<fl::u8 _DATA_PIN, fl::u8 _CLOCK_PIN, fl::u32 _SPI_CLOCK_DIVIDER>
74class SPIOutput :
public APOLLO3HardwareSPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER> {};
77#if defined(ESP32) && defined(FASTLED_ALL_PINS_HARDWARE_SPI)
78template<fl::u8 _DATA_PIN, fl::u8 _CLOCK_PIN, fl::u32 _SPI_CLOCK_DIVIDER>
79class SPIOutput :
public ESP32SPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER> {};
82#if defined(ESP8266) && defined(FASTLED_ALL_PINS_HARDWARE_SPI)
83template<fl::u8 _DATA_PIN, fl::u8 _CLOCK_PIN, fl::u32 _SPI_CLOCK_DIVIDER>
84class SPIOutput :
public ESP8266SPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER> {};
90#if defined(SPI_DATA) && defined(SPI_CLOCK)
92#if defined(FASTLED_TEENSY3) && defined(ARM_HARDWARE_SPI)
94template<fl::u32 SPI_SPEED>
95class SPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> :
public ARMHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED, 0x4002C000> {};
99template<fl::u32 SPI_SPEED>
100class SPIOutput<SPI2_DATA, SPI2_CLOCK, SPI_SPEED> :
public ARMHardwareSPIOutput<SPI2_DATA, SPI2_CLOCK, SPI_SPEED, 0x4002C000> {};
102template<fl::u32 SPI_SPEED>
103class SPIOutput<SPI_DATA, SPI2_CLOCK, SPI_SPEED> :
public ARMHardwareSPIOutput<SPI_DATA, SPI2_CLOCK, SPI_SPEED, 0x4002C000> {};
105template<fl::u32 SPI_SPEED>
106class SPIOutput<SPI2_DATA, SPI_CLOCK, SPI_SPEED> :
public ARMHardwareSPIOutput<SPI2_DATA, SPI_CLOCK, SPI_SPEED, 0x4002C000> {};
109#elif defined(FASTLED_TEENSY4) && defined(ARM_HARDWARE_SPI)
111template<fl::u32 SPI_SPEED>
112class SPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> :
public Teensy4HardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED, SPI, 0> {};
114template<fl::u32 SPI_SPEED>
115class SPIOutput<SPI1_DATA, SPI1_CLOCK, SPI_SPEED> :
public Teensy4HardwareSPIOutput<SPI1_DATA, SPI1_CLOCK, SPI_SPEED, SPI1, 1> {};
117template<fl::u32 SPI_SPEED>
118class SPIOutput<SPI2_DATA, SPI2_CLOCK, SPI_SPEED> :
public Teensy4HardwareSPIOutput<SPI2_DATA, SPI2_CLOCK, SPI_SPEED, SPI2, 2> {};
120#elif defined(FASTLED_TEENSYLC) && defined(ARM_HARDWARE_SPI)
122#define DECLARE_SPI0(__DATA,__CLOCK) template<fl::u32 SPI_SPEED>\
123 class SPIOutput<__DATA, __CLOCK, SPI_SPEED> : public ARMHardwareSPIOutput<__DATA, __CLOCK, SPI_SPEED, 0x40076000> {};
124 #define DECLARE_SPI1(__DATA,__CLOCK) template<fl::u32 SPI_SPEED>\
125 class SPIOutput<__DATA, __CLOCK, SPI_SPEED> : public ARMHardwareSPIOutput<__DATA, __CLOCK, SPI_SPEED, 0x40077000> {};
139#elif defined(__SAM3X8E__)
141template<fl::u32 SPI_SPEED>
142class SPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> :
public SAMHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> {};
144#elif defined(AVR_HARDWARE_SPI)
146template<fl::u32 SPI_SPEED>
147class SPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> :
public AVRHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> {};
149#if defined(SPI_UART0_DATA)
151template<fl::u32 SPI_SPEED>
152class SPIOutput<SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED> :
public AVRUSART0SPIOutput<SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED> {};
156#if defined(SPI_UART1_DATA)
158template<fl::u32 SPI_SPEED>
159class SPIOutput<SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED> :
public AVRUSART1SPIOutput<SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED> {};
163#elif defined(ARDUNIO_CORE_SPI)
165template<fl::u32 SPI_SPEED>
166class SPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> :
public ArdunioCoreSPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED, SPI> {};
171# if !defined(FASTLED_INTERNAL) && !defined(FASTLED_ALL_PINS_HARDWARE_SPI) && !defined(ESP32)
172# ifdef FASTLED_HAS_PRAGMA_MESSAGE
173# pragma message "WARNING: The SPI pins you chose have not been marked as hardware accelerated within the code base. All SPI access will default to bitbanged output. Consult the data sheet for hardware spi pins designed for efficient SPI transfer, typically via DMA / MOSI / SCK / SS pin"
175# warning "The SPI pins you chose have not been marked as hardware accelerated within the code base. All SPI access will default to bitbanged output. Consult the data sheet for hardware spi pins designed for efficient SPI transfer, typically via DMA / MOSI / SCK / SS pins"
186# if !defined(FASTLED_INTERNAL) && !defined(FASTLED_ALL_PINS_HARDWARE_SPI)
187# ifdef FASTLED_HAS_PRAGMA_MESSAGE
188# pragma message "Forcing software SPI - no hardware accelerated SPI for you!"
190# warning "Forcing software SPI - no hardware accelerated SPI for you!"
central include file for FastLED, defines the CFastLED class/object
deprecated: base definitions used by led controllers for writing out led data
Software SPI (aka bit-banging) support.
Fast, efficient 8-bit math functions specifically designed for high-performance LED programming.
#define FASTLED_NAMESPACE_END
#define FASTLED_NAMESPACE_BEGIN