diff --git a/bsp/renesas/libraries/HAL_Drivers/SConscript b/bsp/renesas/libraries/HAL_Drivers/SConscript index 37e7359d95..9bafea86cf 100644 --- a/bsp/renesas/libraries/HAL_Drivers/SConscript +++ b/bsp/renesas/libraries/HAL_Drivers/SConscript @@ -33,12 +33,10 @@ if GetDepend(['BSP_USING_I2C', 'BSP_USING_HW_I2C']): src += ['drv_i2c.c'] if GetDepend(['BSP_USING_SPI']): - 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'] + src += ['drv_spi.c'] + +if GetDepend(['BSP_USING_SCI_SPI']): + src += ['drv_sci_spi.c'] if GetDepend(['BSP_USING_ADC']): src += ['drv_adc.c'] diff --git a/bsp/renesas/libraries/HAL_Drivers/drv_sci_spi.c b/bsp/renesas/libraries/HAL_Drivers/drv_sci_spi.c index 0136685eb1..6609e53d2d 100644 --- a/bsp/renesas/libraries/HAL_Drivers/drv_sci_spi.c +++ b/bsp/renesas/libraries/HAL_Drivers/drv_sci_spi.c @@ -113,7 +113,7 @@ static rt_err_t ra_wait_complete(rt_event_t event, const char bus_name[RT_NAME_M { rt_uint32_t recved = 0x00; - switch (bus_name[6]) + switch (bus_name[4]) { case '0': return SCI_SPIx_EVENT_RECV(0); @@ -155,7 +155,6 @@ static spi_bit_width_t ra_width_shift(rt_uint8_t data_width) static rt_err_t ra_write_message(struct rt_spi_device *device, const void *send_buf, const rt_size_t len) { RT_ASSERT(device != NULL); - RT_ASSERT(device->parent.user_data != NULL); RT_ASSERT(send_buf != NULL); RT_ASSERT(len > 0); rt_err_t err = RT_EOK; @@ -177,7 +176,6 @@ static rt_err_t ra_write_message(struct rt_spi_device *device, const void *send_ static rt_err_t ra_read_message(struct rt_spi_device *device, void *recv_buf, const rt_size_t len) { RT_ASSERT(device != NULL); - RT_ASSERT(device->parent.user_data != NULL); RT_ASSERT(recv_buf != NULL); RT_ASSERT(len > 0); rt_err_t err = RT_EOK; @@ -226,7 +224,6 @@ static rt_err_t ra_hw_spi_configure(struct rt_spi_device *device, rt_err_t err = RT_EOK; struct ra_sci_spi *spi_dev = rt_container_of(device->bus, struct ra_sci_spi, bus); - spi_dev->cs_pin = (rt_uint32_t)device->parent.user_data; /**< data_width : 1 -> 8 bits , 2 -> 16 bits, 4 -> 32 bits, default 32 bits*/ rt_uint8_t data_width = configuration->data_width / 8; @@ -237,7 +234,7 @@ static rt_err_t ra_hw_spi_configure(struct rt_spi_device *device, sci_spi_extended_cfg_t *spi_cfg = (sci_spi_extended_cfg_t *)spi_dev->ra_spi_handle_t->spi_cfg_t->p_extend; /**< Configure Select Line */ - rt_pin_write(spi_dev->cs_pin, PIN_HIGH); + rt_pin_write(device->cs_pin, PIN_HIGH); /**< config bitrate */ R_SCI_SPI_CalculateBitrate(spi_dev->rt_spi_cfg_t->max_hz, &spi_cfg->clk_div, false); @@ -257,22 +254,20 @@ static rt_err_t ra_hw_spi_configure(struct rt_spi_device *device, return RT_EOK; } -static rt_uint32_t ra_spixfer(struct rt_spi_device *device, struct rt_spi_message *message) +static rt_ssize_t ra_spixfer(struct rt_spi_device *device, struct rt_spi_message *message) { RT_ASSERT(device != RT_NULL); RT_ASSERT(device->bus != RT_NULL); RT_ASSERT(message != RT_NULL); rt_err_t err = RT_EOK; - struct ra_sci_spi *spi_dev = rt_container_of(device->bus, struct ra_sci_spi, bus); - spi_dev->cs_pin = (rt_uint32_t)device->parent.user_data; - if (message->cs_take && !(device->config.mode & RT_SPI_NO_CS)) + if (message->cs_take && !(device->config.mode & RT_SPI_NO_CS) && (device->cs_pin != PIN_NONE)) { if (device->config.mode & RT_SPI_CS_HIGH) - rt_pin_write(spi_dev->cs_pin, PIN_HIGH); + rt_pin_write(device->cs_pin, PIN_HIGH); else - rt_pin_write(spi_dev->cs_pin, PIN_LOW); + rt_pin_write(device->cs_pin, PIN_LOW); } if (message->length > 0) @@ -294,12 +289,12 @@ static rt_uint32_t ra_spixfer(struct rt_spi_device *device, struct rt_spi_messag } } - if (message->cs_release && !(device->config.mode & RT_SPI_NO_CS)) + if (message->cs_release && !(device->config.mode & RT_SPI_NO_CS) && (device->cs_pin != PIN_NONE)) { if (device->config.mode & RT_SPI_CS_HIGH) - rt_pin_write(spi_dev->cs_pin, PIN_LOW); + rt_pin_write(device->cs_pin, PIN_LOW); else - rt_pin_write(spi_dev->cs_pin, PIN_HIGH); + rt_pin_write(device->cs_pin, PIN_HIGH); } return err; } @@ -333,4 +328,30 @@ int ra_hw_sci_spi_init(void) return RT_EOK; } INIT_BOARD_EXPORT(ra_hw_sci_spi_init); + +/** + * Attach the spi device to SPI bus, this function must be used after initialization. + */ +rt_err_t rt_hw_sci_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin) +{ + RT_ASSERT(bus_name != RT_NULL); + RT_ASSERT(device_name != RT_NULL); + + rt_err_t result; + struct rt_spi_device *spi_device; + + /* attach the device to spi bus*/ + spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); + RT_ASSERT(spi_device != RT_NULL); + + result = rt_spi_bus_attach_device_cspin(spi_device, device_name, bus_name, cs_pin, RT_NULL); + if (result != RT_EOK) + { + LOG_E("%s attach to %s faild, %d\n", device_name, bus_name, result); + } + + LOG_D("%s attach to %s done", device_name, bus_name); + + return result; +} #endif /* RT_USING_SPI */ diff --git a/bsp/renesas/libraries/HAL_Drivers/drv_sci_spi.h b/bsp/renesas/libraries/HAL_Drivers/drv_sci_spi.h index e1a3aa5189..3f55275b09 100644 --- a/bsp/renesas/libraries/HAL_Drivers/drv_sci_spi.h +++ b/bsp/renesas/libraries/HAL_Drivers/drv_sci_spi.h @@ -41,6 +41,8 @@ struct ra_sci_spi }; #endif +rt_err_t rt_hw_sci_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin); + #ifdef __cplusplus } #endif diff --git a/bsp/renesas/libraries/HAL_Drivers/drv_spi.c b/bsp/renesas/libraries/HAL_Drivers/drv_spi.c index b8e4a36d2d..9ace5591ba 100644 --- a/bsp/renesas/libraries/HAL_Drivers/drv_spi.c +++ b/bsp/renesas/libraries/HAL_Drivers/drv_spi.c @@ -122,7 +122,6 @@ static rt_err_t ra_write_message(struct rt_spi_device *device, const void *send_ static rt_err_t ra_read_message(struct rt_spi_device *device, void *recv_buf, const rt_size_t len) { RT_ASSERT(device != NULL); - RT_ASSERT(device->parent.user_data != NULL); RT_ASSERT(recv_buf != NULL); RT_ASSERT(len > 0); rt_err_t err = RT_EOK; @@ -204,7 +203,6 @@ static rt_ssize_t ra_spixfer(struct rt_spi_device *device, struct rt_spi_message RT_ASSERT(message != RT_NULL); rt_err_t err = RT_EOK; - struct ra_spi *spi_dev = rt_container_of(device->bus, struct ra_spi, bus); if (message->cs_take && !(device->config.mode & RT_SPI_NO_CS) && (device->cs_pin != PIN_NONE)) { @@ -236,9 +234,9 @@ static rt_ssize_t ra_spixfer(struct rt_spi_device *device, struct rt_spi_message if (message->cs_release && !(device->config.mode & RT_SPI_NO_CS) && (device->cs_pin != PIN_NONE)) { if (device->config.mode & RT_SPI_CS_HIGH) - rt_pin_write(spi_dev->cs_pin, PIN_LOW); + rt_pin_write(device->cs_pin, PIN_LOW); else - rt_pin_write(spi_dev->cs_pin, PIN_HIGH); + rt_pin_write(device->cs_pin, PIN_HIGH); } return err; } @@ -276,7 +274,7 @@ INIT_BOARD_EXPORT(ra_hw_spi_init); /** * Attach the spi device to SPI bus, this function must be used after initialization. */ -rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin, void *user_data) +rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin) { RT_ASSERT(bus_name != RT_NULL); RT_ASSERT(device_name != RT_NULL); @@ -288,7 +286,7 @@ rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); RT_ASSERT(spi_device != RT_NULL); - result = rt_spi_bus_attach_device_cspin(spi_device, device_name, bus_name, cs_pin, user_data); + result = rt_spi_bus_attach_device_cspin(spi_device, device_name, bus_name, cs_pin, RT_NULL); if (result != RT_EOK) { LOG_E("%s attach to %s faild, %d\n", device_name, bus_name, result); diff --git a/bsp/renesas/libraries/HAL_Drivers/drv_spi.h b/bsp/renesas/libraries/HAL_Drivers/drv_spi.h index c310b96617..249b1b71d6 100644 --- a/bsp/renesas/libraries/HAL_Drivers/drv_spi.h +++ b/bsp/renesas/libraries/HAL_Drivers/drv_spi.h @@ -40,7 +40,7 @@ struct ra_spi }; #endif -rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin, void *user_data); +rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin); #ifdef __cplusplus } diff --git a/bsp/renesas/ra6m3-ek/board/Kconfig b/bsp/renesas/ra6m3-ek/board/Kconfig index 2f4d29bb9d..0e9f77599a 100644 --- a/bsp/renesas/ra6m3-ek/board/Kconfig +++ b/bsp/renesas/ra6m3-ek/board/Kconfig @@ -94,6 +94,35 @@ menu "Hardware Drivers Config" select BSP_USING_GPIO default n + menuconfig BSP_USING_SCI_SPI + bool "Enable SCI SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SCI_SPI + config BSP_USING_SCI_SPI0 + bool "Enable SCI SPI0 BUS" + default n + config BSP_USING_SCI_SPI3 + bool "Enable SCI SPI3 BUS" + default n + config BSP_USING_SCI_SPI6 + bool "Enable SCI SPI6 BUS" + default n + 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 + config BSP_USING_SPI_LCD bool "Enable SPI LCD" select BSP_USING_GPIO @@ -108,6 +137,7 @@ menu "Hardware Drivers Config" if BSP_USING_LVGL config BSP_USING_LCD_ILI9431 bool "Enable LVGL for LCD_ILI9431" + select PKG_USING_ILI9341 select BSP_USING_SPI_LCD default n config BSP_USING_LCD_RGB diff --git a/bsp/renesas/ra6m3-ek/board/lvgl/lv_port_disp.c b/bsp/renesas/ra6m3-ek/board/lvgl/lv_port_disp.c index 90090d0184..ed55596715 100644 --- a/bsp/renesas/ra6m3-ek/board/lvgl/lv_port_disp.c +++ b/bsp/renesas/ra6m3-ek/board/lvgl/lv_port_disp.c @@ -34,17 +34,6 @@ static struct rt_device_graphic_info info; __attribute__((section(".ARM.__at_0x1FFE0000"))) lv_color_t buf_1[COLOR_BUFFER]; #if !DLG_LVGL_USE_GPU_RA6M3 -void _ra_port_display_callback(display_callback_args_t * p_args) -{ - /* enter interrupt */ - rt_interrupt_enter(); - - /* TODO */ - - /* leave interrupt */ - rt_interrupt_leave(); -} - static void color_to16_maybe(lv_color16_t *dst, lv_color_t *src) { #if (LV_COLOR_DEPTH == 16) @@ -112,7 +101,7 @@ static void disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_ void lv_port_disp_init(void) { #ifdef BSP_USING_SPI_LCD - spi_lcd_init(); + spi_lcd_init(20); #else static rt_device_t device; /* LCD Device Init */ diff --git a/bsp/renesas/ra6m3-ek/board/ports/ili9341/SConscript b/bsp/renesas/ra6m3-ek/board/ports/ili9341/SConscript deleted file mode 100644 index 93f268ba02..0000000000 --- a/bsp/renesas/ra6m3-ek/board/ports/ili9341/SConscript +++ /dev/null @@ -1,22 +0,0 @@ - -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') diff --git a/bsp/renesas/ra6m3-ek/board/ports/ili9341/lcd_ili9341.c b/bsp/renesas/ra6m3-ek/board/ports/ili9341/lcd_ili9341.c deleted file mode 100644 index e67c48256b..0000000000 --- a/bsp/renesas/ra6m3-ek/board/ports/ili9341/lcd_ili9341.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * 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 - */ -#include - -#ifdef BSP_USING_SPI_LCD -#include "lcd_ili9341.h" -#include "drivers/spi.h" - -/* 2.8 inch LCD module */ -/* res pin -> P4_14 */ -/* d/c pin -> P4_13 */ -/* cs pin -> P4_05 */ -/* sda pin -> p4_11 */ -/* scl pin -> p4_12 */ - -_lcd_dev lcddev; -static struct rt_spi_device *lcd_dev; - -rt_err_t spi_lcd_init(void) -{ - rt_err_t res = RT_EOK; - - rt_hw_spi_device_attach("spi0", "spi30", LCD_CS_PIN, RT_NULL); - lcd_dev = (struct rt_spi_device *)rt_device_find("spi30"); - if (lcd_dev != RT_NULL) - { - struct rt_spi_configuration spi_config; - spi_config.data_width = 8; - spi_config.max_hz = 20 * 1000 * 1000; - spi_config.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB; - rt_spi_configure(lcd_dev, &spi_config); - } - else - { - res = -RT_ERROR; - } - - LCD_Init(); - - return res; -} - -void LCD_RESET(void) -{ - LCD_RES_CLR; - DELAY(100); - LCD_RES_SET; - DELAY(100); -} - -void LCD_WR_REG(uint8_t reg) -{ - LCD_DC_CLR; - rt_spi_send(lcd_dev, ®, 1); - LCD_DC_SET; -} - -void LCD_WR_DATA(uint8_t data) -{ - LCD_DC_SET; - rt_spi_send(lcd_dev, &data, 1); -} - -void LCD_ReadData(uint8_t *data, uint16_t length) -{ - LCD_DC_SET; - rt_spi_transfer(lcd_dev, RT_NULL, &data, length); -} - -void LCD_WriteReg(uint8_t reg, uint16_t regdata) -{ - LCD_WR_REG(reg); - LCD_WR_DATA(regdata); -} - -void LCD_WriteRAM_Prepare(void) -{ - LCD_WR_REG(lcddev.wramcmd); -} - -void LCD_WriteData_16Bit(uint16_t Data) -{ - uint8_t buf[2]; - LCD_DC_SET; - buf[0] = Data >> 8; - buf[1] = Data & 0xff; - rt_spi_send(lcd_dev, buf, 2); -} - -void LCD_direction(uint8_t direction) -{ - lcddev.setxcmd = 0x2A; - lcddev.setycmd = 0x2B; - lcddev.wramcmd = 0x2C; - switch (direction) - { - case 0: - lcddev.width = LCD_W; - lcddev.height = LCD_H; - LCD_WriteReg(0x36, (1 << 3) | (0 << 6) | (0 << 7)); /* BGR==1,MY==0,MX==0,MV==0 */ - break; - case 1: - lcddev.width = LCD_H; - lcddev.height = LCD_W; - LCD_WriteReg(0x36, (1 << 3) | (0 << 7) | (1 << 6) | (1 << 5)); /* BGR==1,MY==1,MX==0,MV==1 */ - break; - case 2: - lcddev.width = LCD_W; - lcddev.height = LCD_H; - LCD_WriteReg(0x36, (1 << 3) | (1 << 6) | (1 << 7)); /* BGR==1,MY==0,MX==0,MV==0 */ - break; - case 3: - lcddev.width = LCD_H; - lcddev.height = LCD_W; - LCD_WriteReg(0x36, (1 << 3) | (1 << 7) | (1 << 5)); /* BGR==1,MY==1,MX==0,MV==1 */ - break; - default: - break; - } -} - -void LCD_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd) -{ - LCD_WR_REG(lcddev.setxcmd); - LCD_WR_DATA(xStar >> 8); - LCD_WR_DATA(0x00FF & xStar); - LCD_WR_DATA(xEnd >> 8); - LCD_WR_DATA(0x00FF & xEnd); - - LCD_WR_REG(lcddev.setycmd); - LCD_WR_DATA(yStar >> 8); - LCD_WR_DATA(0x00FF & yStar); - LCD_WR_DATA(yEnd >> 8); - LCD_WR_DATA(0x00FF & yEnd); - - LCD_WriteRAM_Prepare(); -} - -void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos) -{ - LCD_SetWindows(Xpos, Ypos, Xpos, Ypos); -} - -void LCD_Clear(uint16_t Color) -{ - unsigned int i, m; - uint8_t buf[80]; - - for (i = 0; i < 40; i++) - { - buf[2 * i] = Color >> 8; - buf[2 * i + 1] = Color & 0xff; - } - - LCD_SetWindows(0, 0, lcddev.width - 1, lcddev.height - 1); - - LCD_DC_SET; - for (i = 0; i < lcddev.height; i++) - { - for (m = 0; m < lcddev.width;) - { - m += 40; - rt_spi_send(lcd_dev, buf, 80); - } - } -} - -void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) -{ - uint16_t i, j; - LCD_SetWindows(xsta, ysta, xend - 1, yend - 1); - for (i = ysta; i < yend; i++) - { - for (j = xsta; j < xend; j++) - { - LCD_WriteData_16Bit(color); - } - } -} - -void lcd_fill_array_spi(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, void *Image) -{ - rt_uint32_t size = 0; - - size = (Xend - Xstart + 1) * (Yend - Ystart + 1) * 2;/*16bit*/ - LCD_SetWindows(Xstart, Ystart, Xend, Yend); - LCD_DC_SET; - - rt_spi_send(lcd_dev, Image, size); -} - -static void _ili9341_init(void) -{ - LCD_WR_REG(0xCF); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0X83); - LCD_WR_DATA(0X30); - - LCD_WR_REG(0xED); - LCD_WR_DATA(0x64); - LCD_WR_DATA(0x03); - LCD_WR_DATA(0X12); - LCD_WR_DATA(0X81); - - LCD_WR_REG(0xE8); - LCD_WR_DATA(0x85); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0x79); - - LCD_WR_REG(0xCB); - LCD_WR_DATA(0x39); - LCD_WR_DATA(0x2C); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0x34); - LCD_WR_DATA(0x02); - - LCD_WR_REG(0xF7); - LCD_WR_DATA(0x20); - - LCD_WR_REG(0xEA); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0x00); - - LCD_WR_REG(0xC0); /* Power control */ - LCD_WR_DATA(0x26); /* VRH[5:0] */ - - LCD_WR_REG(0xC1); /* Power control */ - LCD_WR_DATA(0x11); /* SAP[2:0];BT[3:0] */ - - LCD_WR_REG(0xC5); /* VCM control */ - LCD_WR_DATA(0x35); - LCD_WR_DATA(0x3E); - - LCD_WR_REG(0xC7); /* VCM control2 */ - LCD_WR_DATA(0XBE); - - LCD_WR_REG(0x36); /* Memory Access Control */ - LCD_WR_DATA(0x28); - - LCD_WR_REG(0x3A); - LCD_WR_DATA(0x55); - - LCD_WR_REG(0xB1); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0x1B); - - LCD_WR_REG(0xB6); /* Display Function Control */ - LCD_WR_DATA(0x0A); - LCD_WR_DATA(0xA2); - - LCD_WR_REG(0xF2); /* 3Gamma Function Disable */ - LCD_WR_DATA(0x08); - - LCD_WR_REG(0x26); /* Gamma curve selected */ - LCD_WR_DATA(0x01); - - LCD_WR_REG(0xE0); /* set Gamma */ - LCD_WR_DATA(0X1F); - LCD_WR_DATA(0X1A); - LCD_WR_DATA(0X18); - LCD_WR_DATA(0X0A); - LCD_WR_DATA(0X0F); - LCD_WR_DATA(0X06); - LCD_WR_DATA(0X45); - LCD_WR_DATA(0X87); - LCD_WR_DATA(0X32); - LCD_WR_DATA(0X0A); - LCD_WR_DATA(0X07); - LCD_WR_DATA(0X02); - LCD_WR_DATA(0X07); - LCD_WR_DATA(0X05); - LCD_WR_DATA(0X00); - - LCD_WR_REG(0xE1); /* set Gamma */ - LCD_WR_DATA(0X00); - LCD_WR_DATA(0X25); - LCD_WR_DATA(0X27); - LCD_WR_DATA(0X05); - LCD_WR_DATA(0X10); - LCD_WR_DATA(0X09); - LCD_WR_DATA(0X3A); - LCD_WR_DATA(0X78); - LCD_WR_DATA(0X4D); - LCD_WR_DATA(0X05); - LCD_WR_DATA(0X18); - LCD_WR_DATA(0X0D); - LCD_WR_DATA(0X38); - LCD_WR_DATA(0X3A); - LCD_WR_DATA(0X2F); - - LCD_WR_REG(0x29); -} - -void LCD_Init(void) -{ - LCD_RESET(); /* LCD Hardware Reset */ - LCD_WR_REG(0x11); /* Sleep out */ - DELAY(120); /* Delay 120ms */ - _ili9341_init(); - - LCD_direction(USE_HORIZONTAL); -} - -static uint16_t color_array[] = -{ - WHITE, BLACK, BLUE, BRED, - GRED, GBLUE, RED, YELLOW -}; - -static rt_err_t lcd_spi_test() -{ - uint8_t index = 0; - for (index = 0; index < sizeof(color_array) / sizeof(color_array[0]); index++) - { - LCD_Clear(color_array[index]); - DELAY(200); - } - - return RT_EOK; -} -MSH_CMD_EXPORT(lcd_spi_test, lcd_spi_test); -#endif diff --git a/bsp/renesas/ra6m3-ek/board/ports/ili9341/lcd_ili9341.h b/bsp/renesas/ra6m3-ek/board/ports/ili9341/lcd_ili9341.h deleted file mode 100644 index 009dd83424..0000000000 --- a/bsp/renesas/ra6m3-ek/board/ports/ili9341/lcd_ili9341.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 -#include - -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 diff --git a/bsp/renesas/ra6m4-cpk/board/Kconfig b/bsp/renesas/ra6m4-cpk/board/Kconfig index 50359fa430..693136394c 100644 --- a/bsp/renesas/ra6m4-cpk/board/Kconfig +++ b/bsp/renesas/ra6m4-cpk/board/Kconfig @@ -329,19 +329,30 @@ menu "Hardware Drivers Config" endif endif + menuconfig BSP_USING_SCI_SPI + bool "Enable SCI SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SCI_SPI + config BSP_USING_SCI_SPI0 + bool "Enable SCI SPI0 BUS" + default n + config BSP_USING_SCI_SPI3 + bool "Enable SCI SPI3 BUS" + default n + config BSP_USING_SCI_SPI6 + bool "Enable SCI SPI6 BUS" + default n + endif + menuconfig BSP_USING_SPI bool "Enable SPI BUS" default n select RT_USING_SPI - if BSP_USING_SPI - config BSP_SPI_USING_DTC_DMA - bool "Enable SPI DTC transfers data without using the CPU." - default n - + if BSP_USING_SPI config BSP_USING_SPI0 bool "Enable SPI0 BUS" default n - config BSP_USING_SPI1 bool "Enable SPI1 BUS" default n @@ -462,6 +473,7 @@ menu "Hardware Drivers Config" if BSP_USING_LVGL config BSP_USING_LCD_ILI9431 bool "Enable LVGL for LCD_ILI9431" + select PKG_USING_ILI9341 select BSP_USING_SPI_LCD default n endif diff --git a/bsp/renesas/ra6m4-cpk/board/lvgl/lv_port_disp.c b/bsp/renesas/ra6m4-cpk/board/lvgl/lv_port_disp.c index aa871077f1..3ed47e59c8 100644 --- a/bsp/renesas/ra6m4-cpk/board/lvgl/lv_port_disp.c +++ b/bsp/renesas/ra6m4-cpk/board/lvgl/lv_port_disp.c @@ -38,7 +38,7 @@ static void disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_ void lv_port_disp_init(void) { #ifdef BSP_USING_SPI_LCD - spi_lcd_init(); + spi_lcd_init(20); #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, buf_2, COLOR_BUFFER); diff --git a/bsp/renesas/ra6m4-cpk/board/ports/ili9341/SConscript b/bsp/renesas/ra6m4-cpk/board/ports/ili9341/SConscript deleted file mode 100644 index 93f268ba02..0000000000 --- a/bsp/renesas/ra6m4-cpk/board/ports/ili9341/SConscript +++ /dev/null @@ -1,22 +0,0 @@ - -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') diff --git a/bsp/renesas/ra6m4-cpk/board/ports/ili9341/lcd_ili9341.c b/bsp/renesas/ra6m4-cpk/board/ports/ili9341/lcd_ili9341.c deleted file mode 100644 index aacc3fca67..0000000000 --- a/bsp/renesas/ra6m4-cpk/board/ports/ili9341/lcd_ili9341.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * 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 - */ -#include - -#ifdef BSP_USING_SPI_LCD -#include "lcd_ili9341.h" -#include "drv_spi.h" - -/* 2.8 inch LCD module */ -/* res pin -> P6_11 */ -/* d/c pin -> P4_15 */ -/* cs pin -> P4_13 */ -/* sda pin -> p4_11 */ -/* scl pin -> p4_12 */ - -_lcd_dev lcddev; -static struct rt_spi_device *lcd_dev; - -rt_err_t spi_lcd_init(void) -{ - rt_err_t res = RT_EOK; - - rt_hw_spi_device_attach("spi1", "spi30", LCD_CS_PIN, RT_NULL); - lcd_dev = (struct rt_spi_device *)rt_device_find("spi30"); - if (lcd_dev != RT_NULL) - { - struct rt_spi_configuration spi_config; - spi_config.data_width = 8; - spi_config.max_hz = 25 * 1000 * 1000; - spi_config.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB; - rt_spi_configure(lcd_dev, &spi_config); - } - else - { - res = -RT_ERROR; - } - - LCD_Init(); - - return res; -} - -void LCD_RESET(void) -{ - LCD_RES_CLR; - DELAY(100); - LCD_RES_SET; - DELAY(100); -} - -void LCD_WR_REG(uint8_t reg) -{ - LCD_DC_CLR; - rt_spi_send(lcd_dev, ®, 1); - LCD_DC_SET; -} - -void LCD_WR_DATA(uint8_t data) -{ - LCD_DC_SET; - rt_spi_send(lcd_dev, &data, 1); -} - -void LCD_ReadData(uint8_t *data, uint16_t length) -{ - LCD_DC_SET; - rt_spi_transfer(lcd_dev, RT_NULL, &data, length); -} - -void LCD_WriteReg(uint8_t reg, uint16_t regdata) -{ - LCD_WR_REG(reg); - LCD_WR_DATA(regdata); -} - -void LCD_WriteRAM_Prepare(void) -{ - LCD_WR_REG(lcddev.wramcmd); -} - -void LCD_WriteData_16Bit(uint16_t Data) -{ - uint8_t buf[2]; - LCD_DC_SET; - buf[0] = Data >> 8; - buf[1] = Data & 0xff; - rt_spi_send(lcd_dev, buf, 2); -} - -void LCD_direction(uint8_t direction) -{ - lcddev.setxcmd = 0x2A; - lcddev.setycmd = 0x2B; - lcddev.wramcmd = 0x2C; - switch (direction) - { - case 0: - lcddev.width = LCD_W; - lcddev.height = LCD_H; - LCD_WriteReg(0x36, (1 << 3) | (0 << 6) | (0 << 7)); /* BGR==1,MY==0,MX==0,MV==0 */ - break; - case 1: - lcddev.width = LCD_H; - lcddev.height = LCD_W; - LCD_WriteReg(0x36, (1 << 3) | (0 << 7) | (1 << 6) | (1 << 5)); /* BGR==1,MY==1,MX==0,MV==1 */ - break; - case 2: - lcddev.width = LCD_W; - lcddev.height = LCD_H; - LCD_WriteReg(0x36, (1 << 3) | (1 << 6) | (1 << 7)); /* BGR==1,MY==0,MX==0,MV==0 */ - break; - case 3: - lcddev.width = LCD_H; - lcddev.height = LCD_W; - LCD_WriteReg(0x36, (1 << 3) | (1 << 7) | (1 << 5)); /* BGR==1,MY==1,MX==0,MV==1 */ - break; - default: - break; - } -} - -void LCD_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd) -{ - LCD_WR_REG(lcddev.setxcmd); - LCD_WR_DATA(xStar >> 8); - LCD_WR_DATA(0x00FF & xStar); - LCD_WR_DATA(xEnd >> 8); - LCD_WR_DATA(0x00FF & xEnd); - - LCD_WR_REG(lcddev.setycmd); - LCD_WR_DATA(yStar >> 8); - LCD_WR_DATA(0x00FF & yStar); - LCD_WR_DATA(yEnd >> 8); - LCD_WR_DATA(0x00FF & yEnd); - - LCD_WriteRAM_Prepare(); -} - -void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos) -{ - LCD_SetWindows(Xpos, Ypos, Xpos, Ypos); -} - -void LCD_Clear(uint16_t Color) -{ - unsigned int i, m; - uint8_t buf[80]; - - for (i = 0; i < 40; i++) - { - buf[2 * i] = Color >> 8; - buf[2 * i + 1] = Color & 0xff; - } - - LCD_SetWindows(0, 0, lcddev.width - 1, lcddev.height - 1); - - LCD_DC_SET; - for (i = 0; i < lcddev.height; i++) - { - for (m = 0; m < lcddev.width;) - { - m += 40; - rt_spi_send(lcd_dev, buf, 80); - } - } -} - -void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) -{ - uint16_t i, j; - LCD_SetWindows(xsta, ysta, xend - 1, yend - 1); - for (i = ysta; i < yend; i++) - { - for (j = xsta; j < xend; j++) - { - LCD_WriteData_16Bit(color); - } - } -} - -void lcd_fill_array_spi(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, void *Image) -{ - rt_uint32_t size = 0; - - size = (Xend - Xstart + 1) * (Yend - Ystart + 1) * 2;/*16bit*/ - LCD_SetWindows(Xstart, Ystart, Xend, Yend); - LCD_DC_SET; - - rt_spi_send(lcd_dev, Image, size); -} - -static void _ili9341_init(void) -{ - LCD_WR_REG(0xCF); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0X83); - LCD_WR_DATA(0X30); - - LCD_WR_REG(0xED); - LCD_WR_DATA(0x64); - LCD_WR_DATA(0x03); - LCD_WR_DATA(0X12); - LCD_WR_DATA(0X81); - - LCD_WR_REG(0xE8); - LCD_WR_DATA(0x85); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0x79); - - LCD_WR_REG(0xCB); - LCD_WR_DATA(0x39); - LCD_WR_DATA(0x2C); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0x34); - LCD_WR_DATA(0x02); - - LCD_WR_REG(0xF7); - LCD_WR_DATA(0x20); - - LCD_WR_REG(0xEA); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0x00); - - LCD_WR_REG(0xC0); /* Power control */ - LCD_WR_DATA(0x26); /* VRH[5:0] */ - - LCD_WR_REG(0xC1); /* Power control */ - LCD_WR_DATA(0x11); /* SAP[2:0];BT[3:0] */ - - LCD_WR_REG(0xC5); /* VCM control */ - LCD_WR_DATA(0x35); - LCD_WR_DATA(0x3E); - - LCD_WR_REG(0xC7); /* VCM control2 */ - LCD_WR_DATA(0XBE); - - LCD_WR_REG(0x36); /* Memory Access Control */ - LCD_WR_DATA(0x28); - - LCD_WR_REG(0x3A); - LCD_WR_DATA(0x55); - - LCD_WR_REG(0xB1); - LCD_WR_DATA(0x00); - LCD_WR_DATA(0x1B); - - LCD_WR_REG(0xB6); /* Display Function Control */ - LCD_WR_DATA(0x0A); - LCD_WR_DATA(0xA2); - - LCD_WR_REG(0xF2); /* 3Gamma Function Disable */ - LCD_WR_DATA(0x08); - - LCD_WR_REG(0x26); /* Gamma curve selected */ - LCD_WR_DATA(0x01); - - LCD_WR_REG(0xE0); /* set Gamma */ - LCD_WR_DATA(0X1F); - LCD_WR_DATA(0X1A); - LCD_WR_DATA(0X18); - LCD_WR_DATA(0X0A); - LCD_WR_DATA(0X0F); - LCD_WR_DATA(0X06); - LCD_WR_DATA(0X45); - LCD_WR_DATA(0X87); - LCD_WR_DATA(0X32); - LCD_WR_DATA(0X0A); - LCD_WR_DATA(0X07); - LCD_WR_DATA(0X02); - LCD_WR_DATA(0X07); - LCD_WR_DATA(0X05); - LCD_WR_DATA(0X00); - - LCD_WR_REG(0xE1); /* set Gamma */ - LCD_WR_DATA(0X00); - LCD_WR_DATA(0X25); - LCD_WR_DATA(0X27); - LCD_WR_DATA(0X05); - LCD_WR_DATA(0X10); - LCD_WR_DATA(0X09); - LCD_WR_DATA(0X3A); - LCD_WR_DATA(0X78); - LCD_WR_DATA(0X4D); - LCD_WR_DATA(0X05); - LCD_WR_DATA(0X18); - LCD_WR_DATA(0X0D); - LCD_WR_DATA(0X38); - LCD_WR_DATA(0X3A); - LCD_WR_DATA(0X2F); - - LCD_WR_REG(0x29); -} - -void LCD_Init(void) -{ - LCD_RESET(); /* LCD Hardware Reset */ - LCD_WR_REG(0x11); /* Sleep out */ - DELAY(120); /* Delay 120ms */ - _ili9341_init(); - - LCD_direction(USE_HORIZONTAL); -} - -static uint16_t color_array[] = -{ - WHITE, BLACK, BLUE, BRED, - GRED, GBLUE, RED, YELLOW -}; - -static rt_err_t lcd_spi_test() -{ - uint8_t index = 0; - for (index = 0; index < sizeof(color_array) / sizeof(color_array[0]); index++) - { - LCD_Clear(color_array[index]); - DELAY(200); - } - - return RT_EOK; -} -MSH_CMD_EXPORT(lcd_spi_test, lcd_spi_test); -#endif diff --git a/bsp/renesas/ra6m4-cpk/board/ports/ili9341/lcd_ili9341.h b/bsp/renesas/ra6m4-cpk/board/ports/ili9341/lcd_ili9341.h deleted file mode 100644 index cda1352430..0000000000 --- a/bsp/renesas/ra6m4-cpk/board/ports/ili9341/lcd_ili9341.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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 -#include - -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_15 -#define LCD_RES_PIN BSP_IO_PORT_06_PIN_11 -#define LCD_CS_PIN BSP_IO_PORT_04_PIN_13 - -#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 - -/* res pin -> P6_11 */ -/* d/c pin -> P4_15 */ -/* cs pin -> P4_13 */ - -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