Basically i glued Peter Drescher and Simon Ford libs in a GraphicsDisplay class, then derived TFT or LCD class (which inherits Protocols class), then the most derived ones (Inits), which are per-display and are the only part needed to be adapted to diff hw.
Inits/TFT_MIPI.cpp
- Committer:
- dswood
- Date:
- 2022-01-07
- Revision:
- 34:67b3634507da
- Parent:
- 11:b842b8e332cb
File content as of revision 34:67b3634507da:
/* mbed UniGraphic library - Device specific class * Copyright (c) 2015 Giuliano Dianda * Released under the MIT License: http://mbed.org/license/mit */ #include "Protocols.h" #include "TFT_MIPI.h" ////////////////////////////////////////////////////////////////////////////////// // display settings /////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// // put in constructor //#define LCDSIZE_X 320 // display X pixels, TFTs are usually portrait view //#define LCDSIZE_Y 480 // display Y pixels TFT_MIPI::TFT_MIPI(proto_t displayproto, PortName port, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD, const char *name , unsigned int LCDSIZE_X, unsigned int LCDSIZE_Y) : TFT(displayproto, port, CS, reset, DC, WR, RD, LCDSIZE_X, LCDSIZE_Y, name) { hw_reset(); BusEnable(true); identify(); // will collect tftID, set mipistd flag init(); auto_gram_read_format();// try to get read gram pixel format, could be 16bit or 18bit, RGB or BGR. Will set flags accordingly // scrollbugfix=1; // when scrolling 1 line, the last line disappears, set to 1 to fix it, for ili9481 is set automatically in identify() set_orientation(0); // FastWindow(true); // most but not all controllers support this, even if datasheet tells they should. Give a try cls(); locate(0,0); } TFT_MIPI::TFT_MIPI(proto_t displayproto, int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC, const char *name , unsigned int LCDSIZE_X , unsigned int LCDSIZE_Y ) : TFT(displayproto, Hz, mosi, miso, sclk, CS, reset, DC, LCDSIZE_X, LCDSIZE_Y, name) { hw_reset(); //TFT class forwards to Protocol class BusEnable(true); //TFT class forwards to Protocol class identify(); // will collect tftID and set mipistd flag init(); // per display custom init cmd sequence, implemented here auto_gram_read_format();// try to get read gram pixel format, could be 16bit or 18bit, RGB or BGR. Will set flags accordingly // scrollbugfix=1; // when scrolling 1 line, the last line disappears, set to 1 to fix it, for ili9481 is set automatically in identify() set_orientation(0); //TFT class does for MIPI standard and some ILIxxx // FastWindow(true); // most but not all controllers support this, even if datasheet tells they should. Give a try cls(); locate(0,0); } // reset and init the lcd controller void TFT_MIPI::init() { /* Start Initial Sequence ----------------------------------------------------*/ /* Start Initial Sequence ----------------------------------------------------*/ wr_cmd8(0xD0); // POWER SETTING wr_data8(0x07); wr_data8(0x42); wr_data8(0x18); wr_cmd8(0xD1); // VCOM control wr_data8(0x00); wr_data8(0x07); wr_data8(0x10); wr_cmd8(0xD2); // Power_Setting for Normal Mode wr_data8(0x01); // LCD power supply current wr_data8(0x02); // charge pumps wr_cmd8(0xC0); // Panel Driving Setting wr_data8(0x10); // 10 orig wr_data8(0x3B); //number of lines+1 *8 wr_data8(0x00); wr_data8(0x02); wr_data8(0x11); // C1 missing? Display_Timing_Setting for Normal Mode //renesas does not have this // wr_cmd8(0xC5); // Frame Rate and Inversion Control // wr_data8(0x03); // 72hz, datashet tells default 02=85hz wr_cmd8(0xC8); // Gamma settings wr_data8(0x00); wr_data8(0x32); wr_data8(0x36); wr_data8(0x45); wr_data8(0x06); wr_data8(0x16); wr_data8(0x37); wr_data8(0x75); wr_data8(0x77); wr_data8(0x54); wr_data8(0x0C); wr_data8(0x00); wr_cmd8(0x36); // MEMORY_ACCESS_CONTROL (orientation stuff) wr_data8(0x0A); // 0A as per chinese example (vertical flipped) wr_cmd8(0x3A); // COLMOD_PIXEL_FORMAT_SET, not present in AN wr_data8(0x55); // 16 bit pixel wr_cmd8(0x13); // Nomal Displaymode wr_cmd8(0x11); // sleep out wait_ms(150); wr_cmd8(0x29); // display on wait_ms(150); }