[Renesas]Add tft-lcd lvgl support

This commit is contained in:
Rbb666 authored and Man, Jianting (Meco) committed 2023-02-23 13:29:08 -05:00
1 parent 6d4764ad69
commit 96a636f0b5
19 files changed
+590 -87

No files matched your search

+6 -2
View File
@@ -33,8 +33,12 @@ if GetDepend(['BSP_USING_I2C', 'BSP_USING_HW_I2C']):
src += ['drv_i2c.c']
if GetDepend(['BSP_USING_SPI']):
src += ['drv_spi.c']
src += ['drv_sci_spi.c']
if GetDepend('BSP_USING_SCI_SPI0') or GetDepend('BSP_USING_SCI_SPI1') \
or GetDepend('BSP_USING_SCI_SPI2') or GetDepend('BSP_USING_SCI_SPI3') \
or GetDepend('BSP_USING_SCI_SPI4') or GetDepend('BSP_USING_SCI_SPI9'): \
src += ['drv_sci_spi.c']
else:
src += ['drv_spi.c']
if GetDepend(['BSP_USING_ADC']):
src += ['drv_adc.c']
+32 -2
View File
@@ -50,6 +50,20 @@ menu "Hardware Drivers Config"
endif
endif
menuconfig BSP_USING_SPI
bool "Enable SPI BUS"
default n
select RT_USING_SPI
if BSP_USING_SPI
config BSP_USING_SPI0
bool "Enable SPI0 BUS"
default n
config BSP_USING_SPI1
bool "Enable SPI1 BUS"
default n
endif
menuconfig BSP_USING_FS
bool "Enable File System"
select RT_USING_DFS
@@ -80,11 +94,27 @@ menu "Hardware Drivers Config"
select BSP_USING_GPIO
default n
config BSP_USING_LVGL
config BSP_USING_SPI_LCD
bool "Enable SPI LCD"
select BSP_USING_GPIO
select BSP_USING_SPI
select BSP_USING_SPI0
default n
menuconfig BSP_USING_LVGL
bool "Enable LVGL for LCD"
select BSP_USING_LCD
select PKG_USING_LVGL
default n
if BSP_USING_LVGL
config BSP_USING_LCD_ILI9431
bool "Enable LVGL for LCD_ILI9431"
select BSP_USING_SPI_LCD
default n
config BSP_USING_LCD_RGB
bool "Enable LVGL for LCD_RGB565"
select BSP_USING_LCD
default n
endif
if BSP_USING_LVGL
config BSP_USING_LVGL_DEMO
+1 -1
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
+16 -5
View File
@@ -1,16 +1,18 @@
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-18 Meco Man First version
* 2023-02-22 Rbb666 First version
*/
#ifndef LV_CONF_H
#define LV_CONF_H
#include <rtconfig.h>
/* Enable additional color format support */
#define DLG_LVGL_CF 1
@@ -20,10 +22,19 @@
#define LV_USE_PERF_MONITOR 1
#define LV_COLOR_DEPTH 16
#define LV_HOR_RES_MAX 480
#define LV_VER_RES_MAX 272
#define DLG_LVGL_USE_GPU_RA6M3 0
#ifdef BSP_USING_SPI_LCD
#define LV_HOR_RES_MAX 240
#define LV_VER_RES_MAX 320
#define LV_COLOR_16_SWAP 1
#define LV_DPI_DEF 99
#else
#define LV_HOR_RES_MAX 480
#define LV_VER_RES_MAX 272
#define LV_DPI_DEF 89
#endif
#define DLG_LVGL_USE_GPU_RA6M3 0
#ifdef PKG_USING_LV_MUSIC_DEMO
/* music player demo */
+24 -51
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -8,13 +8,18 @@
* 2021-11-24 Rbb666 The first version
*/
#include <lvgl.h>
#include "lcd_port.h"
#include "hal_data.h"
#if DLG_LVGL_USE_GPU_RA6M3
#include "lv_port_gpu.h"
#endif
#ifdef BSP_USING_SPI_LCD
#include "lcd_ili9341.h"
#else
#include "lcd_port.h"
#endif
#define COLOR_BUFFER (LV_HOR_RES_MAX * LV_VER_RES_MAX / 4)
/*A static or global variable to store the buffers*/
@@ -22,42 +27,13 @@ static lv_disp_draw_buf_t disp_buf;
/*Descriptor of a display driver*/
static lv_disp_drv_t disp_drv;
static struct rt_device_graphic_info info;
/*Static or global buffer(s). The second buffer is optional*/
// 0x1FFE0000 0x20040000
__attribute__((section(".ARM.__at_0x1FFE0000"))) lv_color_t buf_1[COLOR_BUFFER];
static uint8_t lvgl_ready_done = RT_EBUSY;
static rt_device_t device;
static struct rt_device_graphic_info info;
static rt_sem_t trans_done_semphr = RT_NULL;
void _ra_port_display_callback(display_callback_args_t *p_args)
{
if (lvgl_ready_done != RT_EOK)
return;
if (DISPLAY_EVENT_LINE_DETECTION == p_args->event)
{
/* enter interrupt */
rt_interrupt_enter();
lv_disp_flush_ready((lv_disp_drv_t *)&disp_drv);
rt_sem_release(trans_done_semphr);
/* exit interrupt */
rt_interrupt_leave();
}
}
// Wait until Vsync is triggered through callback function
void vsync_wait(void)
{
rt_sem_take(trans_done_semphr, RT_WAITING_FOREVER);
}
#if !DLG_LVGL_USE_GPU_RA6M3
static void color_to16_maybe(lv_color16_t *dst, lv_color_t *src)
{
#if (LV_COLOR_DEPTH == 16)
@@ -68,9 +44,15 @@ static void color_to16_maybe(lv_color16_t *dst, lv_color_t *src)
dst->ch.red = src->ch.red;
#endif
}
#endif
static void disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{
#ifdef BSP_USING_SPI_LCD
lcd_fill_array_spi(area->x1, area->y1, area->x2, area->y2, color_p);
#elif DLG_LVGL_USE_GPU_RA6M3
lv_port_gpu_flush();
#else
int x1, x2, y1, y2;
x1 = area->x1;
@@ -98,10 +80,6 @@ static void disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_
uint32_t y;
long int location = 0;
#if DLG_LVGL_USE_GPU_RA6M3
lv_port_gpu_flush();
#endif
/* color_p is a buffer pointer; the buffer is provided by LVGL */
lv_color16_t *fbp16 = (lv_color16_t *)info.framebuffer;
@@ -116,12 +94,16 @@ static void disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_
color_p += x2 - act_x2;
}
vsync_wait();
#endif
lv_disp_flush_ready(disp_drv);
}
void lv_port_disp_init(void)
{
#ifdef BSP_USING_SPI_LCD
spi_lcd_init();
#else
static rt_device_t device;
/* LCD Device Init */
device = rt_device_find("lcd");
RT_ASSERT(device != RT_NULL);
@@ -133,22 +115,15 @@ void lv_port_disp_init(void)
RT_ASSERT(info.bits_per_pixel == 8 || info.bits_per_pixel == 16 ||
info.bits_per_pixel == 24 || info.bits_per_pixel == 32);
trans_done_semphr = rt_sem_create("lvgl_sem", 1, RT_IPC_FLAG_PRIO);
if (trans_done_semphr == RT_NULL)
{
rt_kprintf("create transform done semphr failed.\n");
return;
}
#endif
/*Initialize `disp_buf` with the buffer(s). With only one buffer use NULL instead buf_2 */
lv_disp_draw_buf_init(&disp_buf, buf_1, NULL, COLOR_BUFFER);
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
/*Set the resolution of the display*/
disp_drv.hor_res = LCD_WIDTH;
disp_drv.ver_res = LCD_HEIGHT;
disp_drv.hor_res = LV_HOR_RES_MAX;
disp_drv.ver_res = LV_VER_RES_MAX;
/*Set a display buffer*/
disp_drv.draw_buf = &disp_buf;
@@ -163,6 +138,4 @@ void lv_port_disp_init(void)
/*Finally register the driver*/
lv_disp_drv_register(&disp_drv);
lvgl_ready_done = RT_EOK;
}
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -12,5 +12,4 @@
void lv_port_indev_init(void)
{
static lv_indev_drv_t indev_drv;
}
+8 -18
View File
@@ -1,22 +1,12 @@
import os
from building import *
import rtconfig
cwd = GetCurrentDir()
objs = []
cwd = GetCurrentDir()
src = []
list = os.listdir(cwd)
for item in list:
if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
objs = objs + SConscript(os.path.join(item, 'SConscript'))
if GetDepend(['BSP_USING_RW007']):
src += Glob('drv_rw007.c')
CPPPATH = [cwd]
LOCAL_CFLAGS = ''
if rtconfig.PLATFORM in ['gcc', 'armclang']:
LOCAL_CFLAGS += ' -std=c99'
elif rtconfig.PLATFORM in ['armcc']:
LOCAL_CFLAGS += ' --c99'
group = DefineGroup('Drivers', src, depend = [], CPPPATH = CPPPATH, LOCAL_CFLAGS = LOCAL_CFLAGS)
Return('group')
Return('objs')
+1 -1
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -0,0 +1,22 @@
from building import *
import rtconfig
cwd = GetCurrentDir()
src = []
if GetDepend(['BSP_USING_SPI_LCD']):
src += Glob('lcd_ili9341.c')
CPPPATH = [cwd]
LOCAL_CFLAGS = ''
if rtconfig.PLATFORM in ['gcc', 'armclang']:
LOCAL_CFLAGS += ' -std=c99'
elif rtconfig.PLATFORM in ['armcc']:
LOCAL_CFLAGS += ' --c99'
group = DefineGroup('ili9341', src, depend = [], CPPPATH = CPPPATH, LOCAL_CFLAGS = LOCAL_CFLAGS)
Return('group')
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,85 @@
/*
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2023-02-23 Rbb666 First version
*/
#ifndef __LCD_ILI9341_H__
#define __LCD_ILI9341_H__
#ifdef __cplusplus
extern "C"
{
#endif
#include "hal_data.h"
#include <stdint.h>
#include <rtthread.h>
typedef struct
{
uint16_t width; /* LCD width */
uint16_t height; /* LCD high */
uint32_t id; /* LCD ID */
uint8_t dir; /* 0:Vertical | 1:Vertical */
uint16_t wramcmd; /* gram cmd */
uint16_t setxcmd; /* set x cmd */
uint16_t setycmd; /* set y cmd */
} _lcd_dev;
/* LCD param */
extern _lcd_dev lcddev;
#define USE_HORIZONTAL 0 /* 0-0째|1-90째|2-180째|-270째 */
/* lcd size */
#define LCD_W 240
#define LCD_H 320
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40
#define BRRED 0XFC07
#define GRAY 0X8430
#define LCD_DC_PIN BSP_IO_PORT_04_PIN_13
#define LCD_RES_PIN BSP_IO_PORT_04_PIN_14
#define LCD_CS_PIN BSP_IO_PORT_04_PIN_05
#define LCD_DC_CLR rt_pin_write(LCD_DC_PIN, PIN_LOW)
#define LCD_DC_SET rt_pin_write(LCD_DC_PIN, PIN_HIGH)
#define LCD_RES_CLR rt_pin_write(LCD_RES_PIN, PIN_LOW)
#define LCD_RES_SET rt_pin_write(LCD_RES_PIN, PIN_HIGH)
#define DELAY rt_thread_mdelay
void LCD_RESET(void);
void LCD_WR_REG(uint8_t reg);
void LCD_WR_DATA(uint8_t data);
void LCD_WriteReg(uint8_t reg, uint16_t regdata);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteData_16Bit(uint16_t Data);
void LCD_direction(uint8_t direction);
void LCD_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd);
void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos);
void LCD_Clear(uint16_t Color);
void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color);
void lcd_fill_array_spi(uint16_t x_start, uint16_t y_start, uint16_t x_end, uint16_t y_end, void *pcolor);
void LCD_Init(void);
rt_err_t spi_lcd_init(void);
#ifdef __cplusplus
}
#endif
#endif
+50 -4
View File
@@ -6,9 +6,11 @@
![](picture/lvgl/00.png)
在 `Hardware Drivers Config → On-chip Peripheral Drivers` 中使能 `Enable LVGL for LCD` 选项
## RGB 屏使用配置
![](picture/lvgl/01.png)
在 `Hardware Drivers Config → On-chip Peripheral Drivers → Enable LVGL for LCD` 中使能 `Enable LVGL for LCD_RGB565` 选项
![](picture/lvgl/12.png)
接下来退出菜单界面,输入 `pkgs --update` 命令手动联网获取 lvgl 的软件包到 `packages` 文件夹下
@@ -18,7 +20,7 @@
![](picture/lvgl/03.png)
## fsp 中配置 lcd 外设
### fsp 中配置 GLCDC 外设
点击 mdk 中的 `Tools->RA Smart Configurator` 进入 rasc 配置软件
@@ -48,6 +50,50 @@
![](picture/lvgl/10.png)
退出 rasc 后,在 mdk 中进行编译,下载即可
### 编译烧录
退出 rasc 后,在 mdk 中进行编译,仿真下载即可
![](picture/lvgl/11.png)
## SPI(ILI9431) 屏使用配置
在 `Hardware Drivers Config → On-chip Peripheral Drivers → Enable LVGL for LCD` 中使能 `Enable LVGL for LCD_ILI9431` 选项
![](picture/lvgl/01.png)
接下来退出菜单界面,输入 `pkgs --update` 命令手动联网获取 lvgl 的软件包到 `packages` 文件夹下
![](picture/lvgl/02.png)
接着在env 终端中输入 `scons --target=mdk5` 生成 mdk 工程
![](picture/lvgl/03.png)
### fsp 中配置 SPI 外设
点击 mdk 中的 `Tools->RA Smart Configurator` 进入 rasc 配置软件
![](picture/lvgl/04.png)
点击 New Stack,选择 `Connectivity->SPI(r_spi)`,使能 SPI 外设
![](picture/lvgl/13.png)
在 `Callback` 中,设置中断回调函数,(默认使用SPI0)输入 :`spi0_callback`
![](picture/lvgl/14.png)
接着我们配置 SPI 的引脚属性(默认使用SPI0),进入 Pins 界面按照下图进行配置:
![](picture/lvgl/15.png)
完成以上配置后,点击 `Generate Project Content` 生成配置相关代码
![](picture/lvgl/16.png)
### 编译烧录
退出 rasc 后,在 mdk 中进行编译,仿真下载即可
![](picture/lvgl/11.png)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB