1 #ifndef __INC_FL_DELAY_H
2 #define __INC_FL_DELAY_H
9 FASTLED_NAMESPACE_BEGIN
21 diff = (micros() & 0xFFFF) - mLastMicros;
25 void mark() { mLastMicros = micros() & 0xFFFF; }
37 # define NOP __asm__ __volatile__ ("cp r0,r0\n");
38 # define NOP2 __asm__ __volatile__ ("rjmp .+0");
40 # define NOP __asm__ __volatile__ ("nop\n");
41 # define NOP2 __asm__ __volatile__ ("nop\n\t nop\n");
45 template<
int CYCLES>
inline void delaycycles();
46 template<
int CYCLES>
inline void delaycycles_min1() {
48 delaycycles<CYCLES-1>();
55 #if defined(FASTLED_AVR)
57 template<
int LOOP,
int PAD>
inline void _delaycycles_AVR() {
62 __asm__ __volatile__ (
72 template<
int CYCLES>
__attribute__((always_inline)) inline
void delaycycles() {
73 _delaycycles_AVR<CYCLES / 3, CYCLES % 3>();
92 template<
int CYCLES>
__attribute__((always_inline)) inline
void delaycycles() {
94 NOP; delaycycles<CYCLES-1>();
101 template<>
__attribute__((always_inline)) inline
void delaycycles<-9>() {}
102 template<>
__attribute__((always_inline)) inline
void delaycycles<-8>() {}
103 template<>
__attribute__((always_inline)) inline
void delaycycles<-7>() {}
104 template<>
__attribute__((always_inline)) inline
void delaycycles<-6>() {}
105 template<>
__attribute__((always_inline)) inline
void delaycycles<-5>() {}
106 template<>
__attribute__((always_inline)) inline
void delaycycles<-4>() {}
107 template<>
__attribute__((always_inline)) inline
void delaycycles<-3>() {}
108 template<>
__attribute__((always_inline)) inline
void delaycycles<-2>() {}
109 template<>
__attribute__((always_inline)) inline
void delaycycles<-1>() {}
110 template<>
__attribute__((always_inline)) inline
void delaycycles<0>() {}
111 template<>
__attribute__((always_inline)) inline
void delaycycles<1>() {NOP;}
112 template<>
__attribute__((always_inline)) inline
void delaycycles<2>() {NOP2;}
113 template<>
__attribute__((always_inline)) inline
void delaycycles<3>() {NOP;NOP2;}
114 template<>
__attribute__((always_inline)) inline
void delaycycles<4>() {NOP2;NOP2;}
115 template<>
__attribute__((always_inline)) inline
void delaycycles<5>() {NOP2;NOP2;NOP;}
121 #define F_CPU_MHZ (F_CPU / 1000000L)
124 #define NS(_NS) (((_NS * F_CPU_MHZ) + 999) / 1000)
125 #define CLKS_TO_MICROS(_CLKS) ((long)(_CLKS)) / (F_CPU / 1000000L)
128 #define NO_TIME(A, B, C) (NS(A) < 3 || NS(B) < 3 || NS(C) < 6)
130 FASTLED_NAMESPACE_END
Class to ensure that a minimum amount of time has kicked since the last time run - and delay if not e...
central include file for FastLED, defines the CFastLED class/object
__attribute__((always_inline)) inline void delaycycles()
Do an 8byte by 8bit rotation.