3030
3131#include "asf/common2/services/delay/delay.h"
3232
33- void common_hal_neopixel_write (const nativeio_digitalinout_obj_t * digitalinout , uint8_t * pixels , uint32_t numBytes , bool is800KHz ) {
33+ void common_hal_neopixel_write (const nativeio_digitalinout_obj_t * digitalinout , uint8_t * pixels , uint32_t numBytes ) {
3434 // This is adapted directly from the Adafruit NeoPixel library SAMD21G18A code:
3535 // https://github.com/adafruit/Adafruit_NeoPixel/blob/master/Adafruit_NeoPixel.cpp
3636 uint8_t * ptr , * end , p , bitMask ;
@@ -54,53 +54,22 @@ void common_hal_neopixel_write(const nativeio_digitalinout_obj_t* digitalinout,
5454 volatile uint32_t * set = & (port -> OUTSET .reg ),
5555 * clr = & (port -> OUTCLR .reg );
5656
57- if (is800KHz ) {
58- for (;;) {
59- * set = pinMask ;
57+ for (;;) {
58+ * set = pinMask ;
59+ asm("nop; nop;" );
60+ if (p & bitMask ) {
61+ asm("nop; nop; nop; nop; nop; nop; nop;" );
62+ * clr = pinMask ;
63+ } else {
64+ * clr = pinMask ;
6065 asm("nop; nop;" );
61- if (p & bitMask ) {
62- asm("nop; nop; nop; nop; nop; nop; nop;" );
63- * clr = pinMask ;
64- } else {
65- * clr = pinMask ;
66- asm("nop; nop;" );
67- }
68- if ((bitMask >>= 1 ) != 0 ) {
69- asm("nop; nop; nop; nop; nop;" );
70- } else {
71- if (ptr >= end ) break ;
72- p = * ptr ++ ;
73- bitMask = 0x80 ;
74- }
7566 }
76- } else { // 400 KHz bitstream
77- for (;;) {
78- * set = pinMask ;
79-
80- asm("nop; nop; nop; nop; nop; nop; nop;" );
81- if (p & bitMask ) {
82- asm("nop; nop; nop; nop; nop; nop; nop; nop;"
83- "nop; nop; nop; nop; nop; nop; nop; nop;"
84- "nop; nop; nop;" );
85- * clr = pinMask ;
86- } else {
87- * clr = pinMask ;
88- asm("nop; nop; nop; nop; nop; nop; nop; nop;"
89- "nop; nop; nop; nop; nop; nop; nop; nop;"
90- "nop; nop; nop; nop; nop; nop; nop; nop;"
91- "nop; nop; nop;" );
92- }
93- asm("nop; nop; nop; nop; nop; nop; nop; nop;"
94- "nop; nop; nop; nop; nop; nop; nop; nop;"
95- "nop; nop; nop; nop; nop; nop; nop; nop;"
96- "nop; nop; nop; nop; nop; nop; nop; nop;" );
97- if (bitMask >>= 1 ) {
98- asm("nop; nop; nop; nop; nop; nop; nop;" );
99- } else {
100- if (ptr >= end ) break ;
101- p = * ptr ++ ;
102- bitMask = 0x80 ;
103- }
67+ if ((bitMask >>= 1 ) != 0 ) {
68+ asm("nop; nop; nop; nop; nop;" );
69+ } else {
70+ if (ptr >= end ) break ;
71+ p = * ptr ++ ;
72+ bitMask = 0x80 ;
10473 }
10574 }
10675
0 commit comments