Template project for running EEZ Flow firmware project using STM32F469I-DISCO development board
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

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>&copy; 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****/