Basic TFT display program for CITY082

Dependencies:   mbed

Revision:
1:402b32a1025f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emwin_config/LCDConf.cpp	Tue Nov 19 10:04:48 2019 +0000
@@ -0,0 +1,299 @@
+/*********************************************************************
+*                SEGGER Microcontroller GmbH & Co. KG                *
+*        Solutions for real time microcontroller applications        *
+**********************************************************************
+*                                                                    *
+*        (c) 1996 - 2017  SEGGER Microcontroller GmbH & Co. KG       *
+*                                                                    *
+*        Internet: www.segger.com    Support:  support@segger.com    *
+*                                                                    *
+**********************************************************************
+
+** emWin V5.46 - Graphical user interface for embedded applications **
+All  Intellectual Property rights  in the Software belongs to  SEGGER.
+emWin is protected by  international copyright laws.  Knowledge of the
+source code may not be used to write a similar product.  This file may
+only be used in accordance with the following terms:
+
+The software  has been licensed to  Cypress Semiconductor Corporation,
+whose registered  office is situated  at 198 Champion Ct. San Jose, CA 
+95134 USA  solely for the  purposes of creating  libraries for Cypress
+PSoC3 and  PSoC5 processor-based devices,  sublicensed and distributed
+under  the  terms  and  conditions  of  the  Cypress  End User License
+Agreement.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor:                 SEGGER Microcontroller Systems LLC
+Licensed to:              Cypress Semiconductor Corp, 198 Champion Ct., San Jose, CA 95134, USA
+Licensed SEGGER software: emWin
+License number:           GUI-00319
+License model:            Services and License Agreement, signed June 10th, 2009
+Licensed platform:        Any Cypress platform (Initial targets are: PSoC3, PSoC5)
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period:               2009-06-12 - 2022-07-27
+Contact to extend SUA:    sales@segger.com
+----------------------------------------------------------------------
+File        : LCDConf.c
+Purpose     : Display controller configuration (single layer)
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUI.h"
+#include "GUIDRV_FlexColor.h"
+
+#include "cy8ckit_028_tft.h"
+
+
+/*********************************************************************
+*
+*       Layer configuration (to be modified)
+*
+**********************************************************************
+*/
+//
+// Physical display size
+//   The display size should be adapted in order to match the size of
+//   the target display.
+//
+#define XSIZE_PHYS 240
+#define YSIZE_PHYS 320
+
+//
+// Color conversion
+//   The color conversion functions should be selected according to
+//   the color mode of the target display. Details can be found in
+//   the chapter "Colors" in the emWin user manual.
+//
+#define COLOR_CONVERSION GUICC_M565
+
+//
+// Display driver
+//
+#define DISPLAY_DRIVER GUIDRV_FLEXCOLOR
+
+/*********************************************************************
+*
+*       Configuration checking
+*
+**********************************************************************
+*/
+#ifndef   VXSIZE_PHYS
+  #define VXSIZE_PHYS XSIZE_PHYS
+#endif
+#ifndef   VYSIZE_PHYS
+  #define VYSIZE_PHYS YSIZE_PHYS
+#endif
+#ifndef   XSIZE_PHYS
+  #error Physical X size of display is not defined!
+#endif
+#ifndef   YSIZE_PHYS
+  #error Physical Y size of display is not defined!
+#endif
+#ifndef   COLOR_CONVERSION
+  #error Color conversion not defined!
+#endif
+#ifndef   DISPLAY_DRIVER
+  #error No display driver defined!
+#endif
+
+/********************************************************************
+*
+*       CY8CKIT_028_TFT_InitController
+*
+* Purpose:
+*   Initializes the LCD controller
+*
+*/
+static void CY8CKIT_028_TFT_InitController(void) {
+  /* Set up the display controller and put it into operation. If the 
+  *  display controller is not initialized by any external routine 
+  *  this needs to be adapted by the customer.
+  */
+	DisplayIntf_Init();
+
+/*
+	Cy_GPIO_Set(LCD_RESET_PORT, LCD_RESET_NUM);
+	GUI_Delay(20);
+	Cy_GPIO_Clr(LCD_RESET_PORT, LCD_RESET_NUM);
+	GUI_Delay(100);
+	Cy_GPIO_Set(LCD_RESET_PORT, LCD_RESET_NUM);
+	GUI_Delay(100);
+ */
+    LCD_RESET = 1u;
+	GUI_Delay(20);
+	LCD_RESET = 0u;
+	GUI_Delay(100);
+	
+    LCD_RESET = 1u;
+	GUI_Delay(100);
+
+	DisplayIntf_Write8_A0(0x28);
+	DisplayIntf_Write8_A0(0x11);	/* Exit Sleep mode */
+	GUI_Delay(100);
+	DisplayIntf_Write8_A0(0x36);
+	DisplayIntf_Write8_A1(0xA0);	/* MADCTL: memory data access control */
+	DisplayIntf_Write8_A0(0x3A);
+	DisplayIntf_Write8_A1(0x65);	/* COLMOD: Interface Pixel format */
+	DisplayIntf_Write8_A0(0xB2);
+	DisplayIntf_Write8_A1(0x0C);
+	DisplayIntf_Write8_A1(0x0C);
+	DisplayIntf_Write8_A1(0x00);
+	DisplayIntf_Write8_A1(0x33);
+	DisplayIntf_Write8_A1(0x33);	/* PORCTRK: Porch setting */
+	DisplayIntf_Write8_A0(0xB7);
+	DisplayIntf_Write8_A1(0x35);	/* GCTRL: Gate Control */
+	DisplayIntf_Write8_A0(0xBB);
+	DisplayIntf_Write8_A1(0x2B);	/* VCOMS: VCOM setting */
+	DisplayIntf_Write8_A0(0xC0);
+	DisplayIntf_Write8_A1(0x2C);	/* LCMCTRL: LCM Control */
+	DisplayIntf_Write8_A0(0xC2);
+	DisplayIntf_Write8_A1(0x01);
+	DisplayIntf_Write8_A1(0xFF);	/* VDVVRHEN: VDV and VRH Command Enable */
+	DisplayIntf_Write8_A0(0xC3);
+	DisplayIntf_Write8_A1(0x11);	/* VRHS: VRH Set */
+	DisplayIntf_Write8_A0(0xC4);
+	DisplayIntf_Write8_A1(0x20);	/* VDVS: VDV Set */
+	DisplayIntf_Write8_A0(0xC6);
+	DisplayIntf_Write8_A1(0x0F);	/* FRCTRL2: Frame Rate control in normal mode */
+	DisplayIntf_Write8_A0(0xD0);
+	DisplayIntf_Write8_A1(0xA4);
+	DisplayIntf_Write8_A1(0xA1);	/* PWCTRL1: Power Control 1 */
+	DisplayIntf_Write8_A0(0xE0);
+	DisplayIntf_Write8_A1(0xD0);
+	DisplayIntf_Write8_A1(0x00);
+	DisplayIntf_Write8_A1(0x05);
+	DisplayIntf_Write8_A1(0x0E);
+	DisplayIntf_Write8_A1(0x15);
+	DisplayIntf_Write8_A1(0x0D);
+	DisplayIntf_Write8_A1(0x37);
+	DisplayIntf_Write8_A1(0x43);
+	DisplayIntf_Write8_A1(0x47);
+	DisplayIntf_Write8_A1(0x09);
+	DisplayIntf_Write8_A1(0x15);
+	DisplayIntf_Write8_A1(0x12);
+	DisplayIntf_Write8_A1(0x16);
+	DisplayIntf_Write8_A1(0x19);	/* PVGAMCTRL: Positive Voltage Gamma control */
+	DisplayIntf_Write8_A0(0xE1);
+	DisplayIntf_Write8_A1(0xD0);
+	DisplayIntf_Write8_A1(0x00);
+	DisplayIntf_Write8_A1(0x05);
+	DisplayIntf_Write8_A1(0x0D);
+	DisplayIntf_Write8_A1(0x0C);
+	DisplayIntf_Write8_A1(0x06);
+	DisplayIntf_Write8_A1(0x2D);
+	DisplayIntf_Write8_A1(0x44);
+	DisplayIntf_Write8_A1(0x40);
+	DisplayIntf_Write8_A1(0x0E);
+	DisplayIntf_Write8_A1(0x1C);
+	DisplayIntf_Write8_A1(0x18);
+	DisplayIntf_Write8_A1(0x16);
+	DisplayIntf_Write8_A1(0x19);	/* NVGAMCTRL: Negative Voltage Gamma control */
+	DisplayIntf_Write8_A0(0x2B);
+	DisplayIntf_Write8_A1(0x00);
+	DisplayIntf_Write8_A1(0x00);
+	DisplayIntf_Write8_A1(0x00);
+	DisplayIntf_Write8_A1(0xEF);	/* Y address set */
+	DisplayIntf_Write8_A0(0x2A);
+	DisplayIntf_Write8_A1(0x00);
+	DisplayIntf_Write8_A1(0x00);
+	DisplayIntf_Write8_A1(0x01);
+	DisplayIntf_Write8_A1(0x3F);	/* X address set */
+	GUI_Delay(10);
+	DisplayIntf_Write8_A0(0x29);
+}
+
+/*********************************************************************
+*
+*       Public code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+*       LCD_X_Config
+*
+* Function description
+*   Called during the initialization process in order to set up the
+*   display driver configuration.
+*/
+void LCD_X_Config(void) {
+  GUI_DEVICE * pDevice;
+  CONFIG_FLEXCOLOR Config = {0};
+  GUI_PORT_API PortAPI = {0};
+  //
+  // Set the display driver and color conversion
+  //
+  pDevice = GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
+  //
+  // Display driver configuration
+  //
+  LCD_SetSizeEx    (0, XSIZE_PHYS,   YSIZE_PHYS);
+  LCD_SetVSizeEx   (0, VXSIZE_PHYS,  VYSIZE_PHYS);
+  //
+  // Orientation
+  //
+  Config.Orientation   = GUI_MIRROR_Y | GUI_SWAP_XY;
+  GUIDRV_FlexColor_Config(pDevice, &Config);
+  //
+  // Set controller and operation mode
+  //
+  PortAPI.pfWrite8_A0  = DisplayIntf_Write8_A0;
+  PortAPI.pfWrite8_A1  = DisplayIntf_Write8_A1;
+  PortAPI.pfWriteM8_A1 = DisplayIntf_WriteM8_A1;
+  PortAPI.pfRead8_A1   = DisplayIntf_Read8_A1;
+  PortAPI.pfReadM8_A1  = DisplayIntf_ReadM8_A1;
+  
+  GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B8);
+}
+
+/*********************************************************************
+*
+*       LCD_X_DisplayDriver
+*
+* Purpose:
+*   This function is called by the display driver for several purposes.
+*   To support the according task, the routine needs to be adapted to
+*   the display controller. Note that the commands marked
+*   "optional" are not cogently required and should only be adapted if 
+*   the display controller supports these features.
+*
+* Parameter:
+*   LayerIndex - Zero based layer index
+*   Cmd        - Command to be executed
+*   pData      - Pointer to a data structure.
+* 
+* Return Value:
+*   < -1 - Error
+*     -1 - The command is not handled.
+*      0 - OK.
+*/
+int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {
+  int r;
+  
+  GUI_USE_PARA(LayerIndex);
+  GUI_USE_PARA(pData);
+  
+  switch (Cmd) {
+  case LCD_X_INITCONTROLLER: {
+    //
+    // Called during the initialization process in order to set up the
+    // display controller and put it into operation. If the display
+    // controller is not initialized by any external routine, this needs
+    // to be adapted by the customer...
+    //
+    // ...
+    CY8CKIT_028_TFT_InitController();
+    return 0;
+  }
+  default:
+    r = -1;
+  }
+  return r;
+}
+
+/*************************** End of file ****************************/
+