1 #ifndef __INC_FASTSPI_H
2 #define __INC_FASTSPI_H
9 #include "fastspi_bitbang.h"
11 FASTLED_NAMESPACE_BEGIN
13 #if defined(FASTLED_TEENSY3) && (F_CPU > 48000000)
14 #define DATA_RATE_MHZ(X) (((48000000L / 1000000L) / X))
15 #define DATA_RATE_KHZ(X) (((48000000L / 1000L) / X))
17 #define DATA_RATE_MHZ(X) ((F_CPU / 1000000L) / X)
18 #define DATA_RATE_KHZ(X) ((F_CPU / 1000L) / X)
28 #if !defined(FASTLED_ALL_PINS_HARDWARE_SPI)
29 template<u
int8_t _DATA_PIN, u
int8_t _CLOCK_PIN, u
int8_t _SPI_CLOCK_DIVIDER>
33 template<u
int8_t _DATA_PIN, u
int8_t _CLOCK_PIN, u
int8_t _SPI_CLOCK_DIVIDER>
36 #ifndef FASTLED_FORCE_SOFTWARE_SPI
38 #if defined(NRF51) && defined(FASTLED_ALL_PINS_HARDWARE_SPI)
39 template<u
int8_t _DATA_PIN, u
int8_t _CLOCK_PIN, u
int8_t _SPI_CLOCK_DIVIDER>
40 class SPIOutput :
public NRF51SPIOutput<_DATA_PIN, _CLOCK_PIN, _SPI_CLOCK_DIVIDER> {};
43 #if defined(SPI_DATA) && defined(SPI_CLOCK)
45 #if defined(FASTLED_TEENSY3) && defined(ARM_HARDWARE_SPI)
47 template<u
int8_t SPI_SPEED>
48 class SPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> :
public ARMHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED, 0x4002C000> {};
50 #if defined(SPI2_DATA)
52 template<u
int8_t SPI_SPEED>
53 class SPIOutput<SPI2_DATA, SPI2_CLOCK, SPI_SPEED> :
public ARMHardwareSPIOutput<SPI2_DATA, SPI2_CLOCK, SPI_SPEED, 0x4002C000> {};
55 template<u
int8_t SPI_SPEED>
56 class SPIOutput<SPI_DATA, SPI2_CLOCK, SPI_SPEED> :
public ARMHardwareSPIOutput<SPI_DATA, SPI2_CLOCK, SPI_SPEED, 0x4002C000> {};
58 template<u
int8_t SPI_SPEED>
59 class SPIOutput<SPI2_DATA, SPI_CLOCK, SPI_SPEED> :
public ARMHardwareSPIOutput<SPI2_DATA, SPI_CLOCK, SPI_SPEED, 0x4002C000> {};
62 #elif defined(FASTLED_TEENSYLC) && defined(ARM_HARDWARE_SPI)
64 #define DECLARE_SPI0(__DATA,__CLOCK) template<uint8_t SPI_SPEED>\
65 class SPIOutput<__DATA, __CLOCK, SPI_SPEED> : public ARMHardwareSPIOutput<__DATA, __CLOCK, SPI_SPEED, 0x40076000> {};
66 #define DECLARE_SPI1(__DATA,__CLOCK) template<uint8_t SPI_SPEED>\
67 class SPIOutput<__DATA, __CLOCK, SPI_SPEED> : public ARMHardwareSPIOutput<__DATA, __CLOCK, SPI_SPEED, 0x40077000> {};
81 #elif defined(__SAM3X8E__)
83 template<u
int8_t SPI_SPEED>
84 class SPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> :
public SAMHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> {};
86 #elif defined(AVR_HARDWARE_SPI)
88 template<u
int8_t SPI_SPEED>
89 class SPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> :
public AVRHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_SPEED> {};
91 #if defined(SPI_UART0_DATA)
93 template<u
int8_t SPI_SPEED>
94 class SPIOutput<SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED> :
public AVRUSART0SPIOutput<SPI_UART0_DATA, SPI_UART0_CLOCK, SPI_SPEED> {};
98 #if defined(SPI_UART1_DATA)
100 template<u
int8_t SPI_SPEED>
101 class SPIOutput<SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED> :
public AVRUSART1SPIOutput<SPI_UART1_DATA, SPI_UART1_CLOCK, SPI_SPEED> {};
109 #if !defined(FASTLED_INTERNAL)
110 #warning "No hardware SPI pins defined. All SPI access will default to bitbanged output"
120 #warning "Forcing software SPI - no hardware SPI for you!"
123 FASTLED_NAMESPACE_END
base definitions used by led controllers for writing out led data
central include file for FastLED, defines the CFastLED class/object