Other Parts Discussed in Thread: TM4C1231H6PZ, EK-LM3S8962
I'm working up a design that uses a TM4C1231H6PZ Tiva CPU driving a Newhaven OLED NHD-2.7-12864UCY3 using parallel 6800 mode. I'm using Port D for 8 bit parallel data transfer.
The OLED display is monochrome 128 x 64 pixels; it uses an SSD1325 controller IC and has 16 levels of brightness per pixel so it uses 4 bits per pixel and one byte written to the display represents 2 pixels, one per nibble. This presents the issue that I have to read the other nibble before I write a byte because each pixel has a 'sister' represented by the other nibble in a written byte. One way to do this would be to read a byte from the display then OR that with the new nibble data and then write the byte back - that would be very slow.
According to the Tiva Graphics UG, a better way is to keep a 'GrOffScreen' copy of the display values in RAM (128 x 64 needs 8 kB but the TM4C1231H6PZ has 32 kB so that's not a big issue). The graphics system can perform RMW pixel updates to the off-screen RAM and then issue a GrFlush command which copies the contents of the RAM to the display. The UG says that it's possible to keep a record of which bytes have changed and then have the GrFlush command only update the bytes that have changed but it also states that this is NOT done in the library - i.e. you have to write your own 'dirty' byte tracker; assuming that 1 bit tracks one dirty byte, then a 128x64 display would need another 512 bytes to do this.
Chapter 3 of the Tiva graphics library UG goes into detail about how 4BPP can be defined with such statements as GrOffScreen4BPPInit but there is no actual project examples and I'm fairly new to the graphics library and I'm hoping that someone who has done this before can help me get the right set of files together - or give me something similar enough to be adapted.
I'm also seeking help writing the actual graphics driver file if one isn't available.
Any help greatly appreciated.