You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
10 KiB
253 lines
10 KiB
2 years ago
|
/**
|
||
|
******************************************************************************
|
||
|
* @file nt35510.c
|
||
|
* @author MCD Application Team
|
||
|
* @brief This file provides the LCD Driver for Frida Techshine 3K138 (WVGA)
|
||
|
* DSI LCD Display NT35510.
|
||
|
******************************************************************************
|
||
|
* @attention
|
||
|
*
|
||
|
* <h2><center>© Copyright (c) 2020 STMicroelectronics.
|
||
|
* All rights reserved.</center></h2>
|
||
|
*
|
||
|
* This software component is licensed by ST under BSD 3-Clause license,
|
||
|
* the "License"; You may not use this file except in compliance with the
|
||
|
* License. You may obtain a copy of the License at:
|
||
|
* opensource.org/licenses/BSD-3-Clause
|
||
|
*
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
|
||
|
/* Includes ------------------------------------------------------------------*/
|
||
|
#include "nt35510.h"
|
||
|
#include <stdio.h>
|
||
|
#include <stdarg.h>
|
||
|
|
||
|
|
||
|
/** @addtogroup BSP
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup Components
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @defgroup NT35510 NT35510
|
||
|
* @brief This file provides a set of functions needed to drive the
|
||
|
* NT35510 IC display driver.
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/* Private types -------------------------------------------------------------*/
|
||
|
/* Private variables ---------------------------------------------------------*/
|
||
|
/* Private constants ---------------------------------------------------------*/
|
||
|
/** @defgroup NT35510_Private_Constants NT35510 Private Constants
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* @brief Constant tables of register settings used to transmit DSI
|
||
|
* command packets as power up initialization sequence of the Frida 3K138
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Private macros ------------------------------------------------------------*/
|
||
|
/* Private functions ---------------------------------------------------------*/
|
||
|
/** @defgroup NT35510_Exported_Variables
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/* Exported functions ---------------------------------------------------------*/
|
||
|
/** @defgroup NT35510_Exported_Functions OTM8009A Exported Functions
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @brief Initializes the LCD Frida display part by communication in DSI mode in Video Mode
|
||
|
* with IC Display Driver NT35510 (see IC Driver specification for more information).
|
||
|
* @param hdsi_eval : pointer on DSI configuration structure
|
||
|
* @param hdsivideo_handle : pointer on DSI video mode configuration structure
|
||
|
* @retval Status
|
||
|
*/
|
||
|
uint8_t NT35510_Init(uint32_t ColorCoding, uint32_t orientation)
|
||
|
{
|
||
|
NT35510_IO_Delay(120);
|
||
|
|
||
|
/* ************************************************************************** */
|
||
|
/* Proprietary Initialization */
|
||
|
/* ************************************************************************** */
|
||
|
const uint8_t nt35510_reg[] = {0x55, 0xAA, 0x52, 0x08, 0x01, 0xF0};
|
||
|
const uint8_t nt35510_reg1[] = {0x03, 0x03, 0x03, 0xB0};
|
||
|
const uint8_t nt35510_reg2[] = {0x46, 0x46, 0x46, 0xB6};
|
||
|
const uint8_t nt35510_reg3[] = {0x03, 0x03, 0x03, 0xB1};
|
||
|
const uint8_t nt35510_reg4[] = {0x36, 0x36, 0x36, 0xB7};
|
||
|
const uint8_t nt35510_reg5[] = {0x00, 0x00, 0x02, 0xB2};
|
||
|
const uint8_t nt35510_reg6[] = {0x26, 0x26, 0x26, 0xB8};
|
||
|
const uint8_t nt35510_reg7[] = {0xBF, 0x01};
|
||
|
const uint8_t nt35510_reg8[] = {0x09, 0x09, 0x09, 0xB3};
|
||
|
const uint8_t nt35510_reg9[] = {0x36, 0x36, 0x36, 0xB9};
|
||
|
const uint8_t nt35510_reg10[] = {0x08, 0x08, 0x08, 0xB5};
|
||
|
const uint8_t nt35510_reg12[] = {0x26, 0x26, 0x26, 0xBA};
|
||
|
const uint8_t nt35510_reg13[] = {0x00, 0x80, 0x00, 0xBC};
|
||
|
const uint8_t nt35510_reg14[] = {0x00, 0x80, 0x00, 0xBD};
|
||
|
const uint8_t nt35510_reg15[] = {0x00, 0x50, 0xBE};
|
||
|
const uint8_t nt35510_reg16[] = {0x55, 0xAA, 0x52, 0x08, 0x00, 0xF0};
|
||
|
const uint8_t nt35510_reg17[] = {0xFC, 0x00, 0xB1};
|
||
|
const uint8_t nt35510_reg18[] = {0xB6, 0x03};
|
||
|
const uint8_t nt35510_reg19[] = {0xB5, 0x51};
|
||
|
const uint8_t nt35510_reg20[] = {0x00, 0x00, 0xB7};
|
||
|
const uint8_t nt35510_reg21[] = {0x01, 0x02, 0x02, 0x02, 0xB8};
|
||
|
const uint8_t nt35510_reg22[] = {0x00, 0x00, 0x00, 0xBC};
|
||
|
const uint8_t nt35510_reg23[] = {0x03, 0x00, 0x00, 0xCC};
|
||
|
const uint8_t nt35510_reg24[] = {0xBA, 0x01};
|
||
|
const uint8_t nt35510_madctl_portrait[] = {NT35510_CMD_MADCTL ,0x00};
|
||
|
const uint8_t nt35510_caset_portrait[] = {0x00, 0x00, 0x01, 0xDF ,NT35510_CMD_CASET};
|
||
|
const uint8_t nt35510_raset_portrait[] = {0x00, 0x00, 0x03, 0x1F ,NT35510_CMD_RASET};
|
||
|
const uint8_t nt35510_madctl_landscape[] = {NT35510_CMD_MADCTL, 0x60};
|
||
|
const uint8_t nt35510_caset_landscape[] = {0x00, 0x00, 0x03, 0x1F ,NT35510_CMD_CASET};
|
||
|
const uint8_t nt35510_raset_landscape[] = {0x00, 0x00, 0x01, 0xDF ,NT35510_CMD_RASET};
|
||
|
const uint8_t nt35510_reg26[] = {NT35510_CMD_TEEON, 0x00}; /* Tear on */
|
||
|
const uint8_t nt35510_reg27[] = {NT35510_CMD_SLPOUT, 0x00}; /* Sleep out */
|
||
|
const uint8_t nt35510_reg30[] = {NT35510_CMD_DISPON, 0x00};
|
||
|
|
||
|
const uint8_t nt35510_reg31[] = {NT35510_CMD_WRDISBV, 0x7F};
|
||
|
const uint8_t nt35510_reg32[] = {NT35510_CMD_WRCTRLD, 0x2C};
|
||
|
const uint8_t nt35510_reg33[] = {NT35510_CMD_WRCABC, 0x02};
|
||
|
const uint8_t nt35510_reg34[] = {NT35510_CMD_WRCABCMB, 0xFF};
|
||
|
const uint8_t nt35510_reg35[] = {NT35510_CMD_RAMWR, 0x00};
|
||
|
const uint8_t nt35510_reg36[] = {NT35510_CMD_COLMOD, NT35510_COLMOD_RGB565};
|
||
|
const uint8_t nt35510_reg37[] = {NT35510_CMD_COLMOD, NT35510_COLMOD_RGB888};
|
||
|
|
||
|
DSI_IO_WriteCmd(5, (uint8_t *)nt35510_reg); /* LV2: Page 1 enable */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg1);/* AVDD: 5.2V */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg2);/* AVDD: Ratio */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg3);/* AVEE: -5.2V */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg4);/* AVEE: Ratio */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg5);/* VCL: -2.5V */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg6);/* VCL: Ratio */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg7);/* VGH: 15V (Free Pump) */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg8);
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg9);/* VGH: Ratio */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg10);/* VGL_REG: -10V */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg12);/* VGLX: Ratio */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg13);/* VGMP/VGSP: 4.5V/0V */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg14);/* VGMN/VGSN:-4.5V/0V */
|
||
|
DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg15);/* VCOM: -1.325V */
|
||
|
|
||
|
/* ************************************************************************** */
|
||
|
/* Proprietary DCS Initialization */
|
||
|
/* ************************************************************************** */
|
||
|
DSI_IO_WriteCmd(5, (uint8_t *)nt35510_reg16);/* LV2: Page 0 enable */
|
||
|
DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg17);/* Display control */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg18);/* Src hold time */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg19);
|
||
|
DSI_IO_WriteCmd(2, (uint8_t *)nt35510_reg20);/* Gate EQ control */
|
||
|
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_reg21);/* Src EQ control(Mode2) */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg22);/* Inv. mode(2-dot) */
|
||
|
DSI_IO_WriteCmd(3, (uint8_t *)nt35510_reg23);
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg24);
|
||
|
/* Tear on */
|
||
|
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg26);
|
||
|
/* Set Pixel color format to RGB888 */
|
||
|
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg37);
|
||
|
|
||
|
/* ************************************************************************** */
|
||
|
/* Standard DCS Initialization */
|
||
|
/* ************************************************************************** */
|
||
|
|
||
|
/* Add a delay, otherwise MADCTL not taken */
|
||
|
NT35510_IO_Delay(200);
|
||
|
|
||
|
/* Configure orientation */
|
||
|
if(orientation == NT35510_ORIENTATION_PORTRAIT)
|
||
|
{
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_madctl_portrait);
|
||
|
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_caset_portrait);
|
||
|
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_raset_portrait);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_madctl_landscape);
|
||
|
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_caset_landscape);
|
||
|
DSI_IO_WriteCmd(4, (uint8_t *)nt35510_raset_landscape);
|
||
|
}
|
||
|
|
||
|
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg27);
|
||
|
/* Wait for sleep out exit */
|
||
|
NT35510_IO_Delay(120);
|
||
|
|
||
|
switch(ColorCoding)
|
||
|
{
|
||
|
case NT35510_FORMAT_RBG565 :
|
||
|
/* Set Pixel color format to RGB565 */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg36);
|
||
|
break;
|
||
|
case NT35510_FORMAT_RGB888 :
|
||
|
/* Set Pixel color format to RGB888 */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg37);
|
||
|
break;
|
||
|
default :
|
||
|
/* Set Pixel color format to RGB888 */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg37);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
/** CABC : Content Adaptive Backlight Control section start >> */
|
||
|
/* Note : defaut is 0 (lowest Brightness), 0xFF is highest Brightness, try 0x7F : intermediate value */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg31);
|
||
|
/* defaut is 0, try 0x2C - Brightness Control Block, Display Dimming & BackLight on */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg32);
|
||
|
/* defaut is 0, try 0x02 - image Content based Adaptive Brightness [Still Picture] */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg33);
|
||
|
/* defaut is 0 (lowest Brightness), 0xFF is highest Brightness */
|
||
|
DSI_IO_WriteCmd(1, (uint8_t *)nt35510_reg34);
|
||
|
/** CABC : Content Adaptive Backlight Control section end << */
|
||
|
|
||
|
/* Display on */
|
||
|
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg30);
|
||
|
|
||
|
/* Send Command GRAM memory write (no parameters) : this initiates frame write via other DSI commands sent by */
|
||
|
/* DSI host from LTDC incoming pixels in video mode */
|
||
|
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg35);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
uint8_t NT35510_DeInit(void)
|
||
|
{
|
||
|
const uint8_t nt35510_reg30b[] = {NT35510_CMD_DISPOFF, 0x00};
|
||
|
const uint8_t nt35510_reg27b[] = {NT35510_CMD_SLPIN, 0x00};
|
||
|
/* Display off */
|
||
|
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg30b);
|
||
|
NT35510_IO_Delay(120);
|
||
|
/* Sleep in */
|
||
|
DSI_IO_WriteCmd(0, (uint8_t *)nt35510_reg27b);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|