Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
tft_interface/cy8ckit_028_tft.cpp
- Committer:
- reedas
- Date:
- 2019-08-09
- Revision:
- 0:4ad2c16b6e43
- Child:
- 1:cf461b359823
File content as of revision 0:4ad2c16b6e43:
/***************************************************************************//**
* \file DisplayInterface.h
* \version 1.0
*
* \brief
* Objective:
* This is display software i8080 interface source file
*
********************************************************************************
* \copyright
* Copyright 2018-2019 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
#include "cy8ckit_028_tft.h"
#include <mbed_wait_api.h>
/*******************************************************************************
* Function Name: DataWrite
****************************************************************************//**
*
* \brief
* Writes one byte of data to the software i8080 interface.
*
* \details
* This function:
* - Writes data to the data bus
* - Sends low pulse to the LCD_NWR line to write data
*
* \todo
* All this should be replaced with a udb register to save all the shifting
* and individual bit writing.
*
*******************************************************************************/
void DataWrite(U8 data)
{
LCD_REG0 = (data & 0x01);
LCD_REG1 = ((data>>1) & 0x01);
LCD_REG2 = ((data>>2) & 0x01);
LCD_REG3 = ((data>>3) & 0x01);
LCD_REG4 = ((data>>4) & 0x01);
LCD_REG5 = ((data>>5) & 0x01);
LCD_REG6 = ((data>>6) & 0x01);
LCD_REG7 = ((data>>7) & 0x01);
LCD_NWR = 0u;
LCD_NWR = 1u;
}
/*******************************************************************************
* Function Name: DataRead
****************************************************************************//**
*
* \brief
* Reads one byte of data from the software i8080 interface.
*
* \details
* This function:
* - Changes data bus GPIO pins drive mode to digital Hi-Z with enabled input
* buffer
* - Sends low pulse to LCD_NRD line to read data
* - Reads data from the data bus
* - Sends low pulse to the LCD_NWR line to write data
* - Changes data bus GPIO pins drive mode back to to Strong Drive mode
*
* \todo
* All this should be replaced with a udb register to save all the shifting
* and individual bit reading.
*
*******************************************************************************/
U8 DataRead(void)
{
U8 data = 0u;
/* enable input */
LCD_REG0.input();
LCD_REG1.input();
LCD_REG2.input();
LCD_REG3.input();
LCD_REG4.input();
LCD_REG5.input();
LCD_REG6.input();
LCD_REG7.input();
LCD_NRD = 0u; // Pulse read line low then read the data port
data = (U8)LCD_REG0.read();
data |= (U8)LCD_REG1.read()<<1;
data |= (U8)LCD_REG2.read()<<2;
data |= (U8)LCD_REG3.read()<<3;
data |= (U8)LCD_REG4.read()<<4;
data |= (U8)LCD_REG5.read()<<5;
data |= (U8)LCD_REG6.read()<<6;
data |= (U8)LCD_REG7.read()<<7;
LCD_NRD = 1u; // Raise the read line and then go back to output port
LCD_REG0.output();
LCD_REG1.output();
LCD_REG2.output();
LCD_REG3.output();
LCD_REG4.output();
LCD_REG5.output();
LCD_REG6.output();
LCD_REG7.output();
return data;
}
/*******************************************************************************
* Function Name: DisplayIntf_Init
****************************************************************************//**
*
* \brief
* Initializes software i8080 interface.
*
* \details
* This function:
* - Initializes interface GPIO pins
*
*******************************************************************************/
void DisplayIntf_Init(void)
{
/* All pins are initialized by the Device Configurator. */
LCD_RESET = 1u;
LCD_NRD = 1u;
LCD_NWR = 1u;
LCD_DC = 0u;
LCD_REG0.output();
LCD_REG1.output();
LCD_REG2.output();
LCD_REG3.output();
LCD_REG4.output();
LCD_REG5.output();
LCD_REG6.output();
LCD_REG7.output();
wait_ms(20);
LCD_RESET = 0u;
wait_ms(100);
LCD_RESET = 1u;
wait_ms(100);
DisplayIntf_Write8_A0(0x28);
DisplayIntf_Write8_A0(0x11); /* Exit Sleep mode */
wait_ms(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 */
wait_ms(10);
DisplayIntf_Write8_A0(0x29);
}
/*******************************************************************************
* Function Name: DisplayIntf_Write8_A0
****************************************************************************//**
*
* \brief
* Writes one byte of data to the software i8080 interface with the LCD_DC pin
* set to 0
*
* \details
* This function:
* - Sets LCD_DC pin to 0
* - Writes one data byte
*
*******************************************************************************/
void DisplayIntf_Write8_A0(U8 data)
{
LCD_DC = 0u;
DataWrite(data);
}
/*******************************************************************************
* Function Name: DisplayIntf_Write8_A1
****************************************************************************//**
*
* \brief
* Writes one byte of data to the software i8080 interface with the LCD_DC pin
* set to 1
*
* \details
* This function:
* - Sets LCD_DC pin to 1
* - Writes one data byte
*
*******************************************************************************/
void DisplayIntf_Write8_A1(U8 data)
{
LCD_DC = 1u;
DataWrite(data);
}
/*******************************************************************************
* Function Name: DisplayIntf_WriteM8_A1
****************************************************************************//**
*
* \brief
* Writes multiple bytes of data to the software i8080 interface with the LCD_DC
* pin set to 1
*
* \details
* This function:
* - Sets LCD_DC pin to 1
* - Writes data bytes
*
*******************************************************************************/
void DisplayIntf_WriteM8_A1(U8 data[], int num)
{
int i = 0;
LCD_DC = 1u;
for(i = 0; i < num; i++)
{
DataWrite(data[i]);
}
}
/*******************************************************************************
* Function Name: DisplayIntf_Read8_A1
****************************************************************************//**
*
* \brief
* Reads one byte of data from the software i8080 interface with the LCD_DC pin
* set to 1
*
* \details
* This function:
* - Sets LCD_DC pin to 1
* - Reads one data byte
*
*******************************************************************************/
U8 DisplayIntf_Read8_A1(void)
{
LCD_DC = 1u;
return DataRead();
}
/*******************************************************************************
* Function Name: DisplayIntf_ReadM8_A1
****************************************************************************//**
*
* \brief
* Reads multiple bytes of data from the software i8080 interface with the LCD_DC
* pin set to 1
*
* \details
* This function:
* - Sets LCD_DC pin to 1
* - Reads data bytes
*
*******************************************************************************/
void DisplayIntf_ReadM8_A1(U8 data[], int num)
{
int i = 0;
LCD_DC = 1u;
for(i = 0; i < num; i++)
{
data[i] = DataRead();
}
}
/* [] END OF FILE */