Added SPI burst mode to spi 8 bit.
Dependents: Bicycl_Computer_NUCLEO-F411RE Bicycl_Computer_NUCLEO-L476RG
Fork of UniGraphic by
Added SPI burst mode to this graphics driver. If whoever wants this rolled in to repository let me know. I replaced _spi.write(); with fastWrite(); and clearRX();
SPI8.cpp
// need to re-create SPI firmware to access SPI handle static SPI_HandleTypeDef SpiHandle; void SPI8::fastWrite(int data) { SpiHandle.Instance = SPI1; // Check if data is transmitted while ((SpiHandle.Instance->SR & SPI_SR_TXE) == 0); SpiHandle.Instance->DR = data; } void SPI8::clearRX( void ) { SpiHandle.Instance = SPI1; //Check if the RX buffer is busy //While busy, keep checking while (SpiHandle.Instance->SR & SPI_SR_BSY){ // Check RX buffer readable while ((SpiHandle.Instance->SR & SPI_SR_RXNE) == 0); int dummy = SpiHandle.Instance->DR; } }
Diff: Display/LCD.cpp
- Revision:
- 4:12ba0ecc2c1f
- Parent:
- 3:48f3282c2be8
- Child:
- 7:bb0383b91104
--- a/Display/LCD.cpp Sat Feb 14 17:42:21 2015 +0000 +++ b/Display/LCD.cpp Sun Feb 15 20:06:07 2015 +0000 @@ -1,4 +1,10 @@ -/* mbed library for the mbed Lab Board 128*32 pixel LCD +/* mbed UniGraphic library - universal LCD driver class + * Copyright (c) 2015 Giuliano Dianda + * Released under the MIT License: http://mbed.org/license/mit + * + * Derived work of: + * + * mbed library for the mbed Lab Board 128*32 pixel LCD * use C12832 controller * Copyright (c) 2012 Peter Drescher - DC2PD * Released under the MIT License: http://mbed.org/license/mit @@ -36,8 +42,8 @@ buffer16 = (unsigned short*)buffer; draw_mode = NORMAL; set_orientation(1); - foreground(Black); - background(White); + foreground(White); + background(Black); set_auto_up(true); // cls(); // locate(0,0); @@ -64,8 +70,8 @@ draw_mode = NORMAL; // cls(); set_orientation(1); - foreground(Black); - background(White); + foreground(White); + background(Black); set_auto_up(true); // locate(0,0); @@ -84,25 +90,17 @@ { proto->wr_data8(data); } -void LCD::wr_data8(unsigned char data, unsigned int count) - { - proto->wr_data8(data, count); - } -void LCD::wr_data8buf(unsigned char* data, unsigned int lenght) - { - proto->wr_data8buf(data, lenght); - } void LCD::wr_cmd16(unsigned short cmd) { proto->wr_cmd16(cmd); } -void LCD::wr_data16(unsigned short data, unsigned int count) +void LCD::wr_gram(unsigned short data, unsigned int count) { - proto->wr_data16(data, count); + proto->wr_gram(data, count); } -void LCD::wr_data16buf(unsigned short* data, unsigned int lenght) +void LCD::wr_grambuf(unsigned short* data, unsigned int lenght) { - proto->wr_data16buf(data, lenght); + proto->wr_grambuf(data, lenght); } void LCD::hw_reset() { @@ -257,8 +255,8 @@ // if(draw_mode == NORMAL) // { - if(color == Black) buffer[(x + ((y>>3)*LCDSIZE_X))^1] &= ~(1 << (y&7)); // erase pixel - else buffer[(x + ((y>>3)*LCDSIZE_X))^1] |= (1 << (y&7)); // set pixel + if(color) buffer[(x + ((y>>3)*LCDSIZE_X))^1] &= ~(1 << (y&7)); // erase pixel + else buffer[(x + ((y>>3)*LCDSIZE_X))^1] |= (1 << (y&7)); //Black=0000, set pixel // } // else // { // XOR mode @@ -275,13 +273,14 @@ // wr_cmd8(0x10|(col_offset>>4)); // set column hi nibble wr_cmd16(setcolcmd); wr_cmd8(0xB0|(page+page_offset)); // set page - wr_data16buf(buffer16+i, LCDSIZE_X>>1); // send whole page pixels + wr_grambuf(buffer16+i, LCDSIZE_X>>1); // send whole page pixels i+=LCDSIZE_X>>1; } } void LCD::cls(void) { - memset(buffer,0x00,LCDSIZE_X*LCDPAGES); // clear display buffer + unsigned short tmp = _background^0xFFFF; + memset(buffer,tmp,LCDSIZE_X*LCDPAGES); // clear display buffer unsigned short setcolcmd = 0x0010 | ((col_offset&0xF)<<8) | (col_offset>>4); for(int page=0; page<LCDPAGES; page++) { @@ -289,6 +288,6 @@ // wr_cmd8(0x10|(col_offset>>4)); // set column hi nibble wr_cmd16(setcolcmd); wr_cmd8(0xB0|(page+page_offset)); // set page - wr_data16(0, LCDSIZE_X>>1); // send whole page pixels =0 + wr_gram(tmp, LCDSIZE_X>>1); // send whole page pixels =0 } } \ No newline at end of file