Skip to content

Commit

Permalink
Tweak 4-way parallel output to work on pins 12-15 on esp8266 - keep b…
Browse files Browse the repository at this point in the history
…locked out for now, needs some more testing.
  • Loading branch information
focalintent committed May 22, 2016
1 parent a448d5c commit 20e5042
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions bitswap.cpp
@@ -0,0 +1,28 @@
#define FASTLED_INTERNAL
#include "FastLED.h"

/// Simplified form of bits rotating function. Based on code found here - http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt - rotating
/// data into LSB for a faster write (the code using this data can happily walk the array backwards)
void transpose8x1_noinline(unsigned char *A, unsigned char *B) {
uint32_t x, y, t;

// Load the array and pack it into x and y.
y = *(unsigned int*)(A);
x = *(unsigned int*)(A+4);

// pre-transform x
t = (x ^ (x >> 7)) & 0x00AA00AA; x = x ^ t ^ (t << 7);
t = (x ^ (x >>14)) & 0x0000CCCC; x = x ^ t ^ (t <<14);

// pre-transform y
t = (y ^ (y >> 7)) & 0x00AA00AA; y = y ^ t ^ (t << 7);
t = (y ^ (y >>14)) & 0x0000CCCC; y = y ^ t ^ (t <<14);

// final transform
t = (x & 0xF0F0F0F0) | ((y >> 4) & 0x0F0F0F0F);
y = ((x << 4) & 0xF0F0F0F0) | (y & 0x0F0F0F0F);
x = t;

*((uint32_t*)B) = y;
*((uint32_t*)(B+4)) = x;
}

0 comments on commit 20e5042

Please sign in to comment.