Adafruit-RGB_matrix_Panel(32*16)
Diff: RGBmatrixPanel.cpp
- Revision:
- 5:1f8409ee8850
- Parent:
- 4:0ff6053c4bb2
- Child:
- 6:b594794a132e
- Child:
- 9:349baf041171
diff -r 0ff6053c4bb2 -r 1f8409ee8850 RGBmatrixPanel.cpp --- a/RGBmatrixPanel.cpp Sun May 25 09:32:41 2014 +0000 +++ b/RGBmatrixPanel.cpp Sun May 25 11:30:30 2014 +0000 @@ -1,5 +1,5 @@ #define DEBUG -//#undef DEBUG +#undef DEBUG #include "RGBmatrixPanel.h" #include "gamma.h" @@ -36,12 +36,12 @@ // Constructor for 16x32 panel: RGBmatrixPanel::RGBmatrixPanel(PinName r1,PinName r2,PinName g1,PinName g2,PinName b1,PinName b2,PinName a,PinName b, PinName c, PinName sclk, PinName latch, PinName oe, bool dbuf) :Adafruit_GFX(32, 16), + _dataBus(r1,g1,b1,r2,g2,b2), + _rowBus(a,b,c), + _d(NC), _sclk(sclk), _latch(latch), - _oe(oe), - _d(NC), - _dataBus(r1,g1,b1,r2,g2,b2), - _rowBus(c,b,a) + _oe(oe) { init(8, dbuf); } @@ -49,12 +49,12 @@ // Constructor for 32x32 panel: RGBmatrixPanel::RGBmatrixPanel(PinName r1,PinName r2,PinName g1,PinName g2,PinName b1,PinName b2,PinName a,PinName b,PinName c,PinName d,PinName sclk,PinName latch,PinName oe,bool dbuf) :Adafruit_GFX(32, 32), + _dataBus(r1,g1,b1,r2,g2,b2), + _rowBus(a,b,c), + _d(d),// Init 32x32-specific elements: _sclk(sclk), _latch(latch), - _oe(oe), - _d(d),// Init 32x32-specific elements: - _dataBus(r1,g1,b1,r2,g2,b2), - _rowBus(c,b,a) + _oe(oe) { init(16,dbuf); } @@ -68,9 +68,9 @@ // Set up Timer for interrupt: #ifndef DEBUG - _refresh.attach(this,(&RGBmatrixPanel::updateDisplay),0.0001); //updateDisplay() called every 1ms + _refresh.attach_us(this,(&RGBmatrixPanel::updateDisplay),100); //updateDisplay() called every 1ms #else - _refresh.attach(this,(&RGBmatrixPanel::updateDisplay),1.2); //updateDisplay() called every 2s + _refresh.attach(this,(&RGBmatrixPanel::updateDisplay),0.5); //updateDisplay() called every 2s #endif } @@ -232,7 +232,7 @@ // Data is stored in the high 6 bits so it can be quickly // copied to the DATAPORT register w/6 output lines. for(; bit < limit; bit <<= 1) { - ptr[0] &= ~(_BV(4)|_BV(3)|_BV(2)); // Mask(0b11100011) out R,G,B in one op + *ptr &= ~(_BV(4)|_BV(3)|_BV(2)) ; // Mask(0b11100011) out R,G,B in one op if(r & bit) *ptr |= _BV(2); // Plane N R: bit 2 if(g & bit) *ptr |= _BV(3); // Plane N G: bit 3 if(b & bit) *ptr |= _BV(4); // Plane N B: bit 4 @@ -320,6 +320,7 @@ void RGBmatrixPanel::updateDisplay(void) { + uint8_t *ptr; log_debug("\r\ncall updateDisplay\r\n"); _oe=1; _latch=1; @@ -337,17 +338,21 @@ } } else if(plane == 1) { log_debug("\tupdate row%s","\r\n"); - _rowBus=row; + _rowBus.write(row); } + _dataBus=0; _oe=0; _latch=0; + ptr = (uint8_t *)buffptr; + log_debug("\t(row@plane)=(%d,%d)\r\n",row,plane); int color; if(plane > 0) { + //ptr[i]>>2 for(int i=0; i<32; i++) { - color=0x3F&(buffptr[i]); - //buffptr[i]>>2 - _dataBus=color>>2; + color=*(ptr+i); + color=(color>>2)&0x3F; + _dataBus.write(color); _sclk=1; _sclk=0; #ifdef DEBUG @@ -361,9 +366,10 @@ } buffptr += _rawWidth; } else { + //((ptr[i]<<4)|((ptr[i+32]<<2)&0x0C)|((ptr[i+64])&0x03)); for(int i=0; i<32; i++) { - color=0x3F&((buffptr[i]<<4)|((buffptr[i+32]<<2)&0x0C)|((buffptr[i+64])&0x03)); - _dataBus=color; + color=0x3F&((ptr[i]<<4)|((ptr[i+32]<<2)&0x0C)|((ptr[i+64])&0x03)); + _dataBus.write(color); _sclk=1; _sclk=0; #ifdef DEBUG @@ -376,5 +382,6 @@ #endif } } + }