diff options
author | danielgarcia@gmail.com <danielgarcia@gmail.com@4ad4ec5c-605d-bd5c-5796-512c9b60011b> | 2013-03-12 11:25:16 +0400 |
---|---|---|
committer | danielgarcia@gmail.com <danielgarcia@gmail.com@4ad4ec5c-605d-bd5c-5796-512c9b60011b> | 2013-03-12 11:25:16 +0400 |
commit | a025b07f19ea5b8cc6b30b7fed33327a1285f89d (patch) | |
tree | 467095342ead31a460f95f5f6b13b105f07d6e55 /fastspi.h | |
parent | 66e00224f75a6264e59c269465ca010af0a61570 (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.h | 23 |
1 files changed, 19 insertions, 4 deletions
@@ -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++)); |