emWin driver GUIDRV_CompactColor_16

Supported hardware

Controllers

This driver works with the following display controllers:

  • Epson S1D13743, S1D19122
  • Himax HX8301, HX8312A, HX8347, HX8340
  • Hitachi HD66766, HD66772, HD66789
  • Ilitek ILI9161, ILI9220, ILI9320, ILI9325
  • LG Electronics LGDP4531
  • MagnaChip D54E4PA7551
  • Novatek NT39122, NT7573
  • OriseTech SPFD5408, SPFD5420A, SPFD5414D
  • Renesas R63401, R61509, R61516, R61505, R61580
  • Samsung S6D0110A, S6D0117, S6D0129
  • Sharp LR38825, LCY-A06003
  • Sitronix ST7712, ST7628, ST7637
  • Solomon SSD1289, SSD1298, SSD1355, SSD1963, SSD2119
  • Toshiba JBT6K71

Bits per pixel

Supported color depth is 16 bpp.

Interfaces

The driver supports 8-bit parallel, 16 bit parallel and 3 pin SPI interface. Default mode is 8-bit parallel.

Display data RAM organization

The picture above shows the relation between the display memory and the SEG and COM lines of the LCD.

Additional RAM requirements

This LCD driver can be used with and without a display data cache, containing a complete copy of the contents of the LCD data RAM. The amount of memory used by the cache is: LCD_XSIZE x LCD_YSIZE x 2 bytes.
Using a cache is only recommended if a lot of drawing operations uses the XOR drawing mode. A cache would avoid reading the display data in this case. Normally the use of a cache is not recommended.

The driver can be used with a write buffer used for drawing multiple pixels of the same color. If multiple pixels of the same color should be drawn the driver first fills the buffer and then executes only one time the macro LCD_WRITEM_A1 to transfer the data to the display controller. The default buffer size is 500 bytes.

Additional driver functions

None.

Driver selection and configuration

To be able to use this driver the following macro definition needs to be added to the configuration file LCDConf.h:

#define LCD_USE_COMPACT_COLOR_16

After this define has been added the display driver assumes the driver specific configuration file LCDConf_CompactColor_16.h in the configuration folder. All further compile time configuration macros should be defined in this file.

Available configuration macros (compile time configuration)

Controller selection

The following table shows the available macro:

 

Macro Description
LCD_CONTROLLER Selects the display controller to be used:

66700 - Sharp LR38825
66701 - Renesas R63401
66701 - Renesas R61509
66701 - OriseTech SPFD5420A
66701 - Ilitek ILI9326
66702 - Solomon SSD1289
66702 - Solomon SSD1298
66703 - Toshiba JBT6K71
66704 - Sharp LCY-A06003
66705 - Samsung S6D0129
66705 - Renesas R61505
66706 - MagnaChip D54E4PA7551
66707 - Himax HX8312
66708 - Ilitek ILI9320
66708 - Ilitek ILI9325
66708 - OriseTech SPFD5408
66708 - LG Electronics LGDP4531
66708 - Renesas R61580
66709 - Novatek NT39122
66709 - Sitronix ST7628
66709 - Sitronix ST7637
66709 - Renesas R61516
66709 - Epson S1D19122
66709 - Solomon SSD1355
66709 - Solomon SSD1963
66709 - Orisetech SPFD5414D
66710 - Novatek NT7573
66711 - Epson S1D13743
66712 - Himax HX8347
66712 - Himax HX8352
66713 - Himax HX8340
66766 - Hitachi HD66766
66766 - Samsung S6D0110A
66766 - Ilitec ILI9161
66772 - Hitachi HD66772
66772 - Samsung S6D0117
66772 - Sitronix ST7712
66772 - Himax HX8301
66772 - Ilitec ILI9220
66789 - Hitachi HD66789

Display configuration

The following table shows the available configuration macros:

Macro Description
LCD_MIRROR_X Activate to mirror X-axis.
LCD_MIRROR_Y Activate to mirror Y-axis.
LCD_SWAP_XY Activate to swap X- and Y-axis.

Hardware access

The following table shows the available configuration macros which can be defined in this file for configuring the hardware access:

Macro Description
 LCD_NUM_DUMMY_READS  Number of required dummy reads if a read operation should be executed.
The default value is 2. If using a serial interface the display controllers
HD66766 and HD66772 need 5 dummy reads. Sharp LR38825
needs 3 dummy reads with a 8-bit bus.
 LCD_REG01  This macro is only required if a Himax HX8312A is used. Unfortunately
the register 0x01 (Control register 1) contains orientation specific settings
as well as common settings. So this macro should contain the contents
of this register.
 LCD_SERIAL_ID  With a serial 3 wire interface this macro defines the ID signal of the
device ID code. It should be 0 (default) or 1.
Please note: This macro is only used with the 3 wire protocoll for Hitachi
HD66772, Samsung S6D0117, Himax HX8301 and Ilitek ILI9220.
 LCD_USE_SERIAL_3PIN  This configuration macro has been implemented to support the 3 wire
serial interface of the following controllers: Hitachi HD66772, Samsung
S6D0117, Himax HX8301, Ilitek ILI9220. Should be set to 1 if the 3
wire serial interface is used. Default is 0.
Please note: Do not use this macro with other display controllers!
 LCD_USE_PARALLEL_16  Should be set to 1 if the 16 bit parallel interface is used. Default is 0.
 LCD_WRITE_BUFFER_SIZE  Defines the size of the write buffer. Using a write buffer increases the
performance of the driver. If multiple pixels should be written with the
same color, the driver first fills the buffer and then writes the contents
of the buffer with one execution of the macro LCD_WRITEM_A1, instead
of multiple macro executions. The default buffer size is 500 bytes.
 LCD_WRITE_A0  Write a byte to display controller with RS-line low.
 LCD_WRITE_A1  Write a byte to display controller with RS-line high.
 LCD_READM_A1  Read multiple bytes (8 bit parallel interface) or multiple words (16 bit
parallel interface) from display controller with RS-line high.
 LCD_WRITEM_A1  Write multiple bytes (8 bit parallel interface) or multiple words (16 bit
parallel interface) to display controller with RS-line high.
 LCD_WRITEM_A0  Write multiple bytes (8 bit parallel interface) or multiple words (16 bit
parallel interface) to display controller with RS-line low.

The driver initializes the ’Driver Output Mode’ and ’Entry Mode’ register itself. The user does not need to initialize this registers in LCD_X_InitController().

Available configuraion routines (run-time configuration)

The following table lists the available run-time configuration routines:

Routine Description
LCD_SetSizeEx() Changes the size of the visible area.

Configuration example

The following shows how to select the driver and how it can be configured:

LCDConf.h

As explained above it should include the following for selecting the driver:

#define LCD_USE_COMPACT_COLOR_16

LCDConf_CompactColor_16.h

This file contains the display driver specific configuration and could look as the following:

//
// General configuration of LCD
//
#define LCD_CONTROLLER 66709 // Renesas R61516
#define LCD_BITSPERPIXEL 16
#define LCD_SWAP_RB 1
#define LCD_USE_PARALLEL_16 1
#define LCD_MIRROR_Y 1
//
// Indirect interface configuration
//
void LCD_X_Write01_16(unsigned short c);
void LCD_X_Write00_16(unsigned short c);
void LCD_X_WriteM01_16(unsigned short * pData, int NumWords);
void LCD_X_WriteM00_16(unsigned short * pData, int NumWords);
void LCD_X_ReadM01_16 (unsigned short * pData, int NumWords);
#define LCD_WRITE_A1(Word) LCD_X_Write01_16(Word)
#define LCD_WRITE_A0(Word) LCD_X_Write00_16(Word)
#define LCD_WRITEM_A1(Word, NumWords) LCD_X_WriteM01_16(Word, NumWords)
#define LCD_WRITEM_A0(Word, NumWords) LCD_X_WriteM00_16(Word, NumWords)
#define LCD_READM_A1(Word, NumWords) LCD_X_ReadM01_16(Word, NumWords)

Creating a display driver device

The following shows how to create a display driver device with this driver and how to configure it:

void LCD_X_Config(void) {
//
// Set display driver and color conversion
//
GUI_DEVICE_CreateAndLink(GUIDRV_COMPACT_COLOR_16, // Display driver
GUICC_M565, // Color conversion
0, 0);
//
// Display driver configuration
//
LCD_SetSizeEx(0, 240, 320); // Physical display size in pixels
}