FastLED 3.9.15
Loading...
Searching...
No Matches

◆ send_bit()

void fl::third_party::ezWS2812gpio::send_bit ( bool bit_value) const
inlineprivate

Send a single bit using precise timing.

Definition at line 183 of file ezWS2812.h.

183 {
184 if (F_CPU >= 78000000) {
185 // Timing for 78MHz CPU
186 if (bit_value) {
187 // Send '1' bit: ~0.8µs high, ~0.45µs low
189 __asm__ volatile(
190 "nop; nop; nop; nop; nop; nop; nop; nop;"
191 "nop; nop; nop; nop; nop; nop; nop; nop;"
192 "nop; nop; nop; nop; nop; nop; nop; nop;"
193 "nop; nop; nop; nop; nop; nop; nop; nop;"
194 "nop; nop; nop; nop; nop; nop; nop; nop;"
195 "nop; nop; nop; nop; nop; nop; nop; nop;"
196 "nop; nop; nop; nop; nop; nop; nop; nop;"
197 "nop; nop; nop; nop; nop; nop; nop; nop;"
198 );
200 __asm__ volatile(
201 "nop; nop; nop; nop; nop; nop; nop; nop;"
202 "nop; nop; nop; nop; nop; nop; nop; nop;"
203 "nop; nop; nop; nop; nop; nop; nop; nop;"
204 "nop; nop; nop; nop; nop; nop;"
205 );
206 } else {
207 // Send '0' bit: ~0.4µs high, ~0.85µs low
209 __asm__ volatile(
210 "nop; nop; nop; nop; nop; nop; nop; nop;"
211 "nop; nop; nop; nop; nop; nop; nop; nop;"
212 "nop; nop; nop; nop; nop; nop; nop; nop;"
213 "nop; nop; nop; nop; nop; nop;"
214 );
216 __asm__ volatile(
217 "nop; nop; nop; nop; nop; nop; nop; nop;"
218 "nop; nop; nop; nop; nop; nop; nop; nop;"
219 "nop; nop; nop; nop; nop; nop; nop; nop;"
220 "nop; nop; nop; nop; nop; nop; nop; nop;"
221 "nop; nop; nop; nop; nop; nop; nop; nop;"
222 "nop; nop; nop; nop; nop; nop; nop; nop;"
223 "nop; nop; nop; nop; nop; nop; nop; nop;"
224 );
225 }
226 } else {
227 // Timing for 39MHz CPU (default)
228 if (bit_value) {
229 // Send '1' bit: ~0.8µs high, ~0.45µs low
231 __asm__ volatile(
232 "nop; nop; nop; nop; nop; nop; nop; nop;"
233 "nop; nop; nop; nop; nop; nop; nop; nop;"
234 "nop; nop; nop; nop; nop; nop; nop; nop;"
235 "nop; nop; nop; nop; nop; nop; nop; nop;"
236 );
238 __asm__ volatile(
239 "nop; nop; nop; nop; nop; nop; nop; nop;"
240 "nop; nop; nop; nop; nop; nop; nop;"
241 );
242 } else {
243 // Send '0' bit: ~0.4µs high, ~0.85µs low
245 __asm__ volatile(
246 "nop; nop; nop; nop; nop; nop; nop; nop;"
247 "nop; nop; nop; nop; nop; nop; nop;"
248 );
250 __asm__ volatile(
251 "nop; nop; nop; nop; nop; nop; nop; nop;"
252 "nop; nop; nop; nop; nop; nop; nop; nop;"
253 "nop; nop; nop; nop; nop; nop; nop; nop;"
254 "nop; nop; nop; nop; nop; nop; nop; nop;"
255 );
256 }
257 }
258 }
volatile uint32_t * port_set_
Definition ezWS2812.h:179
volatile uint32_t * port_clear_
Definition ezWS2812.h:180

References pin_mask_, port_clear_, and port_set_.

Referenced by send_byte().

+ Here is the caller graph for this function: