MindSDK_MM32F5270/demo_apps/lvgl/lvgl_v6_basic/lcd.c
Yilin Sun 3977144e90
Initial MM32F527x commit.
Signed-off-by: Yilin Sun <imi415@imi.moe>
2023-03-27 21:54:40 +08:00

175 lines
3.8 KiB
C

/*
* Copyright 2021 MindMotion Microelectronics Co., Ltd.
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "lcd.h"
#include "board_init.h"
extern void LCD_InitHardware(void);
extern void LCD_WriteCmd(uint16_t cmd);
extern void LCD_WriteData(uint16_t dat);
extern uint16_t LCD_ReadData(void);
uint16_t LCD_ReadReg(uint16_t reg);
void LCD_Init(LCD_Init_Type * init)
{
LCD_InitHardware();
GPIO_SetBits(BOARD_LCD_RST_GPIO_PORT, BOARD_LCD_RST_GPIO_PIN);
GPIO_ClearBits(BOARD_LCD_RST_GPIO_PORT, BOARD_LCD_RST_GPIO_PIN);
GPIO_SetBits(BOARD_LCD_RST_GPIO_PORT, BOARD_LCD_RST_GPIO_PIN);
for (uint32_t i = 0u; i < 100000u; i++)
{
__NOP();
}
LCD_WriteCmd(0x11u); /* sleep out. */
LCD_WriteCmd(0xf0);
LCD_WriteData(0xc3);
LCD_WriteCmd(0xf0);
LCD_WriteData(0x96);
LCD_WriteCmd(0x2A);
LCD_WriteData(0x00);
LCD_WriteData(0x00);
LCD_WriteData( ( (BOARD_LCD_WIDTH >> 8u) & 0xffu ) - 1 );
LCD_WriteData( ( (BOARD_LCD_WIDTH >> 0u) & 0xffu ) - 1 );
LCD_WriteCmd(0x2B);
LCD_WriteData(0x00);
LCD_WriteData(0x00);
LCD_WriteData( ( (BOARD_LCD_HEIGHT >> 8u) & 0xffu ) - 1 );
LCD_WriteData( ( (BOARD_LCD_HEIGHT >> 0u) & 0xffu ) - 1 );
LCD_WriteCmd(0x36);
if(LCD_DisplayMode_Landspace == init->DisplayMode)
{
LCD_WriteData(0x48u);
}
else
{
LCD_WriteData(0xE8u);
}
LCD_WriteData(0x48);
LCD_WriteCmd(0x3A);
LCD_WriteData(0x55);
LCD_WriteCmd(0xB4);
LCD_WriteData(0x01);
LCD_WriteCmd(0xB7);
LCD_WriteData(0xC6);
LCD_WriteCmd(0xe8);
LCD_WriteData(0x40);
LCD_WriteData(0x8a);
LCD_WriteData(0x00);
LCD_WriteData(0x00);
LCD_WriteData(0x29);
LCD_WriteData(0x19);
LCD_WriteData(0xa5);
LCD_WriteData(0x33);
LCD_WriteCmd(0xc2);
LCD_WriteData(0xA7);
LCD_WriteCmd(0xc5);
LCD_WriteData(0x3c);
LCD_WriteCmd(0xe0);
LCD_WriteData(0xf0);
LCD_WriteData(0x00);
LCD_WriteData(0x02);
LCD_WriteData(0x0a);
LCD_WriteData(0x0d);
LCD_WriteData(0x1d);
LCD_WriteData(0x35);
LCD_WriteData(0x55);
LCD_WriteData(0x45);
LCD_WriteData(0x3c);
LCD_WriteData(0x17);
LCD_WriteData(0x17);
LCD_WriteData(0x18);
LCD_WriteData(0x1b);
LCD_WriteCmd(0xe1);
LCD_WriteData(0xf0);
LCD_WriteData(0x00);
LCD_WriteData(0x02);
LCD_WriteData(0x07);
LCD_WriteData(0x06);
LCD_WriteData(0x04);
LCD_WriteData(0x2e);
LCD_WriteData(0x44);
LCD_WriteData(0x45);
LCD_WriteData(0x0b);
LCD_WriteData(0x17);
LCD_WriteData(0x16);
LCD_WriteData(0x18);
LCD_WriteData(0x1b);
LCD_WriteCmd(0xf0);
LCD_WriteData(0x3c);
LCD_WriteCmd(0xf0);
LCD_WriteData(0x69);
LCD_WriteCmd(0x29);
}
void LCD_SetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
{
LCD_WriteCmd(0x2a);
LCD_WriteData(x0 >> 8);
LCD_WriteData(x0 & 0xff);
LCD_WriteData(x1 >> 8);
LCD_WriteData(x1 & 0xff);
LCD_WriteCmd(0x2b);
LCD_WriteData(y0 >> 8);
LCD_WriteData(y0 & 0xff);
LCD_WriteData(y1 >> 8);
LCD_WriteData(y1 & 0xff);
}
void LCD_ClearWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
{
LCD_SetWindow(x0, y0, x1, y1);
LCD_WriteCmd(0x2c);
for(uint32_t i = 0; i <= x1 - x0; i++)
{
for(uint32_t j = 0; j <= y1 - y0; j++)
{
LCD_WriteData(color);
}
}
}
void LCD_FillWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t * color)
{
LCD_SetWindow(x0, y0, x1, y1);
LCD_WriteCmd(0x2c);
for(uint32_t i = 0; i <= x1 - x0; i++)
{
for(uint32_t j = 0; j <= y1 - y0; j++)
{
LCD_WriteData((* color++));
}
}
}
void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color)
{
LCD_ClearWindow(x, y, x, y, color);
}
/* EOF. */