Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FastLED/FastLED.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanielgarcia@gmail.com <danielgarcia@gmail.com@4ad4ec5c-605d-bd5c-5796-512c9b60011b>2013-03-12 11:25:16 +0400
committerdanielgarcia@gmail.com <danielgarcia@gmail.com@4ad4ec5c-605d-bd5c-5796-512c9b60011b>2013-03-12 11:25:16 +0400
commita025b07f19ea5b8cc6b30b7fed33327a1285f89d (patch)
tree467095342ead31a460f95f5f6b13b105f07d6e55 /fastspi.h
parent66e00224f75a6264e59c269465ca010af0a61570 (diff)
Add support for the SM16716 chipset and allow the SPI code to write out a start bit when writing out RGB data
Diffstat (limited to 'fastspi.h')
-rw-r--r--fastspi.h23
1 files changed, 19 insertions, 4 deletions
diff --git a/fastspi.h b/fastspi.h
index cce756ae..07637bfc 100644
--- a/fastspi.h
+++ b/fastspi.h
@@ -65,6 +65,9 @@ public:
static __attribute__((always_inline)) inline uint8_t adjust(uint8_t data) { return data; }
};
+#define FLAG_START_BIT 0x80
+#define MASK_SKIP_BITS 0x7F
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Software SPI (aka bit-banging) support - with aggressive optimizations for when the clock and data pin are on the same port
@@ -360,7 +363,10 @@ public:
uint8_t *end = data + len;
while(data != end) {
- data += SKIP;
+ data += (MASK_SKIP_BITS & SKIP);
+ if(SKIP & FLAG_START_BIT) {
+ writeBit<0>(1, clockpin, datapin, datahi, datalo, clockhi, clocklo);
+ }
writeByte(D::adjust(*data++), clockpin, datapin, datahi, datalo, clockhi, clocklo);
writeByte(D::adjust(*data++), clockpin, datapin, datahi, datalo, clockhi, clocklo);
writeByte(D::adjust(*data++), clockpin, datapin, datahi, datalo, clockhi, clocklo);
@@ -376,7 +382,10 @@ public:
uint8_t *end = data + len;
while(data != end) {
- data += SKIP;
+ data += (MASK_SKIP_BITS & SKIP);
+ if(SKIP & FLAG_START_BIT) {
+ writeBit<0>(1, datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);
+ }
writeByte(D::adjust(*data++), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);
writeByte(D::adjust(*data++), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);
writeByte(D::adjust(*data++), datapin, datahi_clockhi, datalo_clockhi, datahi_clocklo, datalo_clocklo);
@@ -481,7 +490,7 @@ public:
uint8_t *end = data + len;
select();
while(data != end) {
- data += SKIP;
+ data += (MASK_SKIP_BITS & SKIP);
#if defined(__MK20DX128__)
writeByte(D::adjust(*data++));
writeByte(D::adjust(*data++));
@@ -620,7 +629,13 @@ public:
uint8_t *end = data + len;
select();
while(data != end) {
- data += SKIP;
+ data += (MASK_SKIP_BITS & SKIP);
+ if(SKIP & FLAG_START_BIT) {
+ if(_SPI_SPEED != 0) {
+ wait();
+ }
+ writeBit<0>(1);
+ }
#if defined(__MK20DX128__)
writeByte(D::adjust(*data++));
writeByte(D::adjust(*data++));