Merge pull request #1359 from liu2guang/master
[BSP][RT1050] fix rt1050 bsp bug and update code. | 修复RT1050 BSP bug并…
This commit is contained in:
commit
3365c07c2a
|
@ -317,6 +317,7 @@ CONFIG_LWIP_NETIF_LOOPBACK=0
|
||||||
# CONFIG_PKG_USING_QUICKLZ is not set
|
# CONFIG_PKG_USING_QUICKLZ is not set
|
||||||
# CONFIG_PKG_USING_MULTIBUTTON is not set
|
# CONFIG_PKG_USING_MULTIBUTTON is not set
|
||||||
# CONFIG_PKG_USING_SAMPLES is not set
|
# CONFIG_PKG_USING_SAMPLES is not set
|
||||||
|
# CONFIG_PKG_USING_CANFESTIVAL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# example package: hello
|
# example package: hello
|
||||||
|
@ -343,14 +344,14 @@ CONFIG_RT_USING_UART1=y
|
||||||
# CONFIG_RT_USING_UART8 is not set
|
# CONFIG_RT_USING_UART8 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Select spi bus drivers
|
# Select spi bus and dev drivers
|
||||||
#
|
#
|
||||||
CONFIG_LPSPI_CLK_SOURCE_FROM_PLL3PFD1=y
|
CONFIG_LPSPI_CLK_SOURCE_FROM_PLL3PFD1=y
|
||||||
# CONFIG_LPSPI_CLK_SOURCE_FROM_PLL3PFD0 is not set
|
# CONFIG_LPSPI_CLK_SOURCE_FROM_PLL3PFD0 is not set
|
||||||
# CONFIG_LPSPI_CLK_SOURCE_FROM_PLL2 is not set
|
# CONFIG_LPSPI_CLK_SOURCE_FROM_PLL2 is not set
|
||||||
# CONFIG_LPSPI_CLK_SOURCE_FROM_PLL2PFD2 is not set
|
# CONFIG_LPSPI_CLK_SOURCE_FROM_PLL2PFD2 is not set
|
||||||
CONFIG_LPSPI_CLK_SOURCE=0
|
CONFIG_LPSPI_CLK_SOURCE=0
|
||||||
CONFIG_LPSPI_CLK_SOURCE_DIVIDER=7
|
CONFIG_LPSPI_CLK_SOURCE_DIVIDER=8
|
||||||
# CONFIG_RT_USING_SPIBUS1 is not set
|
# CONFIG_RT_USING_SPIBUS1 is not set
|
||||||
# CONFIG_RT_USING_SPIBUS2 is not set
|
# CONFIG_RT_USING_SPIBUS2 is not set
|
||||||
# CONFIG_RT_USING_SPIBUS3 is not set
|
# CONFIG_RT_USING_SPIBUS3 is not set
|
||||||
|
@ -361,5 +362,35 @@ CONFIG_LPSPI4_SDO_GPIO_1=y
|
||||||
# CONFIG_LPSPI4_SDO_GPIO_2 is not set
|
# CONFIG_LPSPI4_SDO_GPIO_2 is not set
|
||||||
CONFIG_LPSPI4_SDI_GPIO_1=y
|
CONFIG_LPSPI4_SDI_GPIO_1=y
|
||||||
# CONFIG_LPSPI4_SDI_GPIO_2 is not set
|
# CONFIG_LPSPI4_SDI_GPIO_2 is not set
|
||||||
|
# CONFIG_RT_USING_SPI_FLASH is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Select i2c bus drivers
|
||||||
|
#
|
||||||
|
CONFIG_LPI2C_CLOCK_SOURCE_DIVIDER=4
|
||||||
|
CONFIG_RT_USING_I2C1=y
|
||||||
|
# CONFIG_RT_USING_I2C1_BITOPS is not set
|
||||||
|
# CONFIG_RT_USING_I2C2 is not set
|
||||||
|
# CONFIG_RT_USING_I2C3 is not set
|
||||||
|
# CONFIG_RT_USING_I2C4 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Select lcd driver
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Notice: Evk Board para: 480*272 4 4 8 2 40 10 106 45
|
||||||
|
#
|
||||||
|
CONFIG_RT_USING_LCD=y
|
||||||
|
CONFIG_LCD_WIDTH=480
|
||||||
|
CONFIG_LCD_HEIGHT=272
|
||||||
|
CONFIG_LCD_HFP=4
|
||||||
|
CONFIG_LCD_VFP=4
|
||||||
|
CONFIG_LCD_HBP=8
|
||||||
|
CONFIG_LCD_VBP=2
|
||||||
|
CONFIG_LCD_HSW=40
|
||||||
|
CONFIG_LCD_VSW=10
|
||||||
|
CONFIG_LCD_BL_PIN=106
|
||||||
|
CONFIG_LCD_RST_PIN=45
|
||||||
CONFIG_RT_USING_SDRAM=y
|
CONFIG_RT_USING_SDRAM=y
|
||||||
CONFIG_RT_USING_RTC_HP=y
|
CONFIG_RT_USING_RTC_HP=y
|
||||||
|
|
|
@ -70,7 +70,7 @@ menu "Select uart drivers"
|
||||||
default n
|
default n
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "Select spi bus drivers"
|
menu "Select spi bus and dev drivers"
|
||||||
choice
|
choice
|
||||||
prompt "SPI bus clock source"
|
prompt "SPI bus clock source"
|
||||||
default LPSPI_CLK_SOURCE_FROM_PLL3PFD1
|
default LPSPI_CLK_SOURCE_FROM_PLL3PFD1
|
||||||
|
@ -94,7 +94,7 @@ menu "Select spi bus drivers"
|
||||||
config LPSPI_CLK_SOURCE_DIVIDER
|
config LPSPI_CLK_SOURCE_DIVIDER
|
||||||
int "SPI bus clock source divider"
|
int "SPI bus clock source divider"
|
||||||
range 1 8
|
range 1 8
|
||||||
default 7
|
default 8
|
||||||
|
|
||||||
config RT_USING_SPIBUS1
|
config RT_USING_SPIBUS1
|
||||||
bool "Using spi1 bus"
|
bool "Using spi1 bus"
|
||||||
|
@ -223,9 +223,51 @@ menu "Select spi bus drivers"
|
||||||
config LPSPI4_SDI_GPIO_2
|
config LPSPI4_SDI_GPIO_2
|
||||||
bool "GPIO_B1_05"
|
bool "GPIO_B1_05"
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
config RT_USING_SPI_FLASH
|
||||||
|
bool "Using spi flash with sfud"
|
||||||
|
default n
|
||||||
|
select RT_USING_SPI
|
||||||
|
select RT_USING_SFUD
|
||||||
|
select RT_USING_PIN
|
||||||
|
choice
|
||||||
|
prompt "SPI flash using spibus"
|
||||||
|
default SPI_FLASH_USING_SPIBUS4
|
||||||
|
depends on RT_USING_SPI_FLASH
|
||||||
|
|
||||||
|
config SPI_FLASH_USING_SPIBUS1
|
||||||
|
bool "spi1"
|
||||||
|
select RT_USING_SPIBUS1
|
||||||
|
config SPI_FLASH_USING_SPIBUS2
|
||||||
|
bool "spi2"
|
||||||
|
select RT_USING_SPIBUS2
|
||||||
|
config SPI_FLASH_USING_SPIBUS3
|
||||||
|
bool "spi3"
|
||||||
|
select RT_USING_SPIBUS3
|
||||||
|
config SPI_FLASH_USING_SPIBUS4
|
||||||
|
bool "spi4"
|
||||||
|
select RT_USING_SPIBUS4
|
||||||
|
endchoice
|
||||||
|
config SPI_FLASH_USING_SPIBUS_NAME
|
||||||
|
string
|
||||||
|
default "spi1" if SPI_FLASH_USING_SPIBUS1
|
||||||
|
default "spi2" if SPI_FLASH_USING_SPIBUS2
|
||||||
|
default "spi3" if SPI_FLASH_USING_SPIBUS3
|
||||||
|
default "spi4" if SPI_FLASH_USING_SPIBUS4
|
||||||
|
|
||||||
|
config SPI_FLASH_NAME
|
||||||
|
string "SPI flash device name"
|
||||||
|
default "flash0"
|
||||||
|
depends on RT_USING_SPI_FLASH
|
||||||
|
|
||||||
|
config SPI_FLASH_USING_CS_PIN
|
||||||
|
int "SPI flash cs pin index"
|
||||||
|
default 79
|
||||||
|
range 1 127
|
||||||
|
depends on RT_USING_SPI_FLASH
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "Select iic drivers"
|
menu "Select i2c bus drivers"
|
||||||
|
|
||||||
config LPI2C_CLOCK_SOURCE_DIVIDER
|
config LPI2C_CLOCK_SOURCE_DIVIDER
|
||||||
int "lpi2c bus clock source divider"
|
int "lpi2c bus clock source divider"
|
||||||
|
@ -277,13 +319,78 @@ menu "Select iic drivers"
|
||||||
endif
|
endif
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
#menu "SDRAM driver support"
|
menu "Select lcd driver"
|
||||||
|
if RT_USING_LCD && BOARD_RT1050_EVK
|
||||||
|
comment "Notice: Evk Board para: 480*272 4 4 8 2 40 10 106 45"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if RT_USING_LCD && BOARD_RT1050_FIRE
|
||||||
|
comment "Notice: Fire Board para: 800*480 4 4 8 2 40 10 58 45"
|
||||||
|
endif
|
||||||
|
|
||||||
|
config RT_USING_LCD
|
||||||
|
bool "Using lcd"
|
||||||
|
default n
|
||||||
|
|
||||||
|
config LCD_WIDTH
|
||||||
|
int "Width pixel num"
|
||||||
|
default 480 if BOARD_RT1050_EVK
|
||||||
|
default 800 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_HEIGHT
|
||||||
|
int "Height pixel num"
|
||||||
|
default 272 if BOARD_RT1050_EVK
|
||||||
|
default 480 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_HFP
|
||||||
|
int "HFP"
|
||||||
|
default 4 if BOARD_RT1050_EVK
|
||||||
|
default 4 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_VFP
|
||||||
|
int "VFP"
|
||||||
|
default 4 if BOARD_RT1050_EVK
|
||||||
|
default 4 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_HBP
|
||||||
|
int "HBP"
|
||||||
|
default 8 if BOARD_RT1050_EVK
|
||||||
|
default 8 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_VBP
|
||||||
|
int "VBP"
|
||||||
|
default 2 if BOARD_RT1050_EVK
|
||||||
|
default 2 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_HSW
|
||||||
|
int "HSW"
|
||||||
|
default 40 if BOARD_RT1050_EVK
|
||||||
|
default 40 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_VSW
|
||||||
|
int "VSW"
|
||||||
|
default 10 if BOARD_RT1050_EVK
|
||||||
|
default 10 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_BL_PIN
|
||||||
|
int "Backlight pin index"
|
||||||
|
default 106 if BOARD_RT1050_EVK
|
||||||
|
default 58 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
config LCD_RST_PIN
|
||||||
|
int "Reset pin index"
|
||||||
|
default 45 if BOARD_RT1050_EVK
|
||||||
|
default 45 if BOARD_RT1050_FIRE
|
||||||
|
depends on RT_USING_LCD
|
||||||
|
endmenu
|
||||||
|
|
||||||
|
#menu "Select SDRAM driver"
|
||||||
config RT_USING_SDRAM
|
config RT_USING_SDRAM
|
||||||
bool "Using sdram"
|
bool "Using sdram"
|
||||||
default y
|
default y
|
||||||
#endmenu
|
#endmenu
|
||||||
|
|
||||||
#menu "RTC driver support"
|
#menu "Select RTC driver"
|
||||||
config RT_USING_RTC_HP
|
config RT_USING_RTC_HP
|
||||||
bool "Using hp rtc"
|
bool "Using hp rtc"
|
||||||
select RT_USING_RTC
|
select RT_USING_RTC
|
||||||
|
|
|
@ -6,6 +6,10 @@ from building import *
|
||||||
|
|
||||||
cwd = GetCurrentDir()
|
cwd = GetCurrentDir()
|
||||||
src = Glob('drivers/*.c')
|
src = Glob('drivers/*.c')
|
||||||
|
|
||||||
|
if GetDepend('BOARD_RT1050_FIRE'):
|
||||||
|
SrcRemove(src, r'drivers\fsl_enet.c')
|
||||||
|
|
||||||
SrcRemove(src, 'drivers/dataqueue.c')
|
SrcRemove(src, 'drivers/dataqueue.c')
|
||||||
src += Glob('common/chip/*.c')
|
src += Glob('common/chip/*.c')
|
||||||
src += [cwd + '/system_MIMXRT1052.c']
|
src += [cwd + '/system_MIMXRT1052.c']
|
||||||
|
|
|
@ -16,7 +16,7 @@ CPPDEFINES = []
|
||||||
|
|
||||||
# add sdram driver code
|
# add sdram driver code
|
||||||
if GetDepend('RT_USING_SDRAM'):
|
if GetDepend('RT_USING_SDRAM'):
|
||||||
src = src + ['./drv_sdram.c']
|
src = src + ['drv_sdram.c']
|
||||||
|
|
||||||
# add pin driver code
|
# add pin driver code
|
||||||
if GetDepend('RT_USING_PIN'):
|
if GetDepend('RT_USING_PIN'):
|
||||||
|
@ -24,16 +24,28 @@ if GetDepend('RT_USING_PIN'):
|
||||||
|
|
||||||
# add rtc driver code
|
# add rtc driver code
|
||||||
if GetDepend('RT_USING_RTC_HP'):
|
if GetDepend('RT_USING_RTC_HP'):
|
||||||
src = src + ['./drv_rtc.c']
|
src = src + ['drv_rtc.c']
|
||||||
|
|
||||||
# add spibus driver code
|
# add spibus driver code
|
||||||
if GetDepend('RT_USING_SPI'):
|
if GetDepend('RT_USING_SPI'):
|
||||||
src += ['drv_spi_bus.c']
|
src += ['drv_spi_bus.c']
|
||||||
|
|
||||||
|
# add spi flash driver code
|
||||||
|
if GetDepend('RT_USING_SPI_FLASH'):
|
||||||
|
src += ['drv_spi_flash.c']
|
||||||
|
|
||||||
# add i2cbus driver code
|
# add i2cbus driver code
|
||||||
if GetDepend('RT_USING_I2C'):
|
if GetDepend('RT_USING_I2C'):
|
||||||
src += ['drv_i2c.c']
|
src += ['drv_i2c.c']
|
||||||
|
|
||||||
|
# add lcd driver code
|
||||||
|
if GetDepend('RT_USING_LCD'):
|
||||||
|
src += ['drv_lcd.c']
|
||||||
|
|
||||||
|
# add sdio driver code
|
||||||
|
if GetDepend('RT_USING_SDIO'):
|
||||||
|
src += ['drv_sdio.c']
|
||||||
|
|
||||||
if GetDepend('BOARD_RT1050_EVK'):
|
if GetDepend('BOARD_RT1050_EVK'):
|
||||||
src += ['hyper_flash_boot.c']
|
src += ['hyper_flash_boot.c']
|
||||||
|
|
||||||
|
@ -41,9 +53,6 @@ if GetDepend('BOARD_RT1050_EVK'):
|
||||||
src += ['drv_eth.c', 'fsl_phy.c']
|
src += ['drv_eth.c', 'fsl_phy.c']
|
||||||
CPPDEFINES += ['FSL_FEATURE_PHYKSZ8081_USE_RMII50M_MODE']
|
CPPDEFINES += ['FSL_FEATURE_PHYKSZ8081_USE_RMII50M_MODE']
|
||||||
|
|
||||||
if GetDepend('RT_USING_SDIO'):
|
|
||||||
src += ['drv_sdio.c']
|
|
||||||
|
|
||||||
if GetDepend('RT_USING_USB_DEVICE'):
|
if GetDepend('RT_USING_USB_DEVICE'):
|
||||||
src += Glob('usb/phy/*.c')
|
src += Glob('usb/phy/*.c')
|
||||||
CPPDEFINES += ['ENDIANNESS']
|
CPPDEFINES += ['ENDIANNESS']
|
||||||
|
@ -52,9 +61,6 @@ if GetDepend('BOARD_RT1050_EVK'):
|
||||||
src += ['drv_usbd.c']
|
src += ['drv_usbd.c']
|
||||||
src += Glob('usb/device/*.c')
|
src += Glob('usb/device/*.c')
|
||||||
|
|
||||||
if GetDepend('RT_USING_RTGUI') or GetDepend('PKG_USING_GUIENGINE'):
|
|
||||||
src += ['drv_lcd.c', 'drv_ft5406.c', 'drv_i2c.c']
|
|
||||||
|
|
||||||
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES)
|
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|
|
@ -202,24 +202,4 @@ void rt_hw_board_init()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PKG_USING_GUIENGINE
|
|
||||||
#include <rtgui/driver.h>
|
|
||||||
#include "drv_lcd.h"
|
|
||||||
|
|
||||||
/* initialize for gui driver */
|
|
||||||
int rtgui_lcd_init(void)
|
|
||||||
{
|
|
||||||
rt_device_t device;
|
|
||||||
|
|
||||||
imxrt_hw_lcd_init();
|
|
||||||
|
|
||||||
device = rt_device_find("lcd");
|
|
||||||
/* set graphic device */
|
|
||||||
rtgui_graphic_set_device(device);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
INIT_DEVICE_EXPORT(rtgui_lcd_init);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
|
|
||||||
#define BSP_TOUCH_SAMPLE_HZ 30
|
#define BSP_TOUCH_SAMPLE_HZ 30
|
||||||
|
|
||||||
#define I2CBUS_NAME "i2c0"
|
#define I2CBUS_NAME "i2c1"
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#define FTDEBUG rt_kprintf
|
#define FTDEBUG rt_kprintf
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* File : usart.c
|
* File : drv_lcd.c
|
||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2009, RT-Thread Development Team
|
* COPYRIGHT (C) 2006-2013, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* The license and distribution terms for this file may be
|
||||||
* found in the file LICENSE in this distribution or at
|
* found in the file LICENSE in this distribution or at
|
||||||
|
@ -10,510 +10,164 @@
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2017-10-30 Tanek the first version
|
* 2017-10-30 Tanek the first version
|
||||||
|
* 2018-04-05 Liu2guang export LCD config parameters.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <board.h>
|
#include "drv_lcd.h"
|
||||||
#include <rtthread.h>
|
|
||||||
|
|
||||||
#include "fsl_common.h"
|
#include "fsl_common.h"
|
||||||
|
#include "fsl_iomuxc.h"
|
||||||
#include "fsl_elcdif.h"
|
#include "fsl_elcdif.h"
|
||||||
#include "fsl_gpio.h"
|
|
||||||
|
|
||||||
//#define LCD_DEBUG
|
#if !defined(LCD_WIDTH) || !defined(LCD_HEIGHT)
|
||||||
|
#error "Please config lcd pixel parameters."
|
||||||
#ifdef PKG_USING_GUIENGINE
|
|
||||||
|
|
||||||
#define APP_HSW 41
|
|
||||||
#define APP_HFP 4
|
|
||||||
#define APP_HBP 8
|
|
||||||
#define APP_VSW 10
|
|
||||||
#define APP_VFP 4
|
|
||||||
#define APP_VBP 2
|
|
||||||
#define APP_POL_FLAGS \
|
|
||||||
(kELCDIF_DataEnableActiveHigh | kELCDIF_VsyncActiveLow | kELCDIF_HsyncActiveLow | kELCDIF_DriveDataOnRisingClkEdge)
|
|
||||||
|
|
||||||
#define FRAME_BUFFER_ALIGN 64
|
|
||||||
|
|
||||||
#define LCD_PIXEL_T uint16_t
|
|
||||||
#define LCD_BITS_PER_PIXEL (sizeof(LCD_PIXEL_T) * 8)
|
|
||||||
|
|
||||||
#define LCD_INIT_DATA (0x00)
|
|
||||||
|
|
||||||
|
|
||||||
/* Display. */
|
|
||||||
#define LCD_DISP_GPIO GPIO1
|
|
||||||
#define LCD_DISP_GPIO_PIN 2
|
|
||||||
/* Back light. */
|
|
||||||
#define LCD_BL_GPIO GPIO2
|
|
||||||
#define LCD_BL_GPIO_PIN 31
|
|
||||||
|
|
||||||
#define APP_ELCDIF LCDIF
|
|
||||||
#define APP_LCDIF_DATA_BUS kELCDIF_DataBus16Bit
|
|
||||||
#define FRAME_BUFFER_COUNT 2
|
|
||||||
|
|
||||||
#define RT_HW_LCD_WIDTH ((uint16_t)800) /* LCD PIXEL WIDTH */
|
|
||||||
#define RT_HW_LCD_HEIGHT ((uint16_t)480) /* LCD PIXEL HEIGHT */
|
|
||||||
|
|
||||||
ALIGN(FRAME_BUFFER_ALIGN)
|
|
||||||
static LCD_PIXEL_T lcdif_frame_buffer[FRAME_BUFFER_COUNT][RT_HW_LCD_HEIGHT][RT_HW_LCD_WIDTH] SECTION("NonCacheable");
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef LCD_DEBUG
|
|
||||||
static volatile bool s_frameDone = false;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct imxrt_lcd_t
|
#if !defined(LCD_HFP) || !defined(LCD_HBP) || !defined(LCD_HSW) || \
|
||||||
|
!defined(LCD_VFP) || !defined(LCD_VBP) || !defined(LCD_VSW)
|
||||||
|
#error "Please config lcd timing parameters."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(LCD_BL_PIN) || !defined(LCD_RST_PIN)
|
||||||
|
#error "Please config lcd backlight or reset pin."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct rt1050_lcd
|
||||||
{
|
{
|
||||||
struct rt_device_graphic_info lcd_info;
|
struct rt_device device;
|
||||||
struct rt_device lcd;
|
struct rt_device_graphic_info info;
|
||||||
struct rt_semaphore lcd_sem;
|
|
||||||
rt_uint32_t index; //lcd buffer
|
|
||||||
LCD_PIXEL_T * framebuffer;
|
|
||||||
bool update;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct imxrt_lcd_t imxrt_lcd;
|
static struct rt1050_lcd lcd;
|
||||||
|
ALIGN(64) static uint16_t frame_buffer[LCD_HEIGHT][LCD_WIDTH] SECTION("NonCacheable");
|
||||||
|
|
||||||
static void _lcd_gpio_config(void)
|
static rt_err_t rt1050_lcd_init(rt_device_t device)
|
||||||
{
|
{
|
||||||
CLOCK_EnableClock(kCLOCK_Iomuxc); /* iomuxc clock (iomuxc_clk_enable): 0x03u */
|
RT_ASSERT(device != RT_NULL);
|
||||||
|
|
||||||
IOMUXC_SetPinMux(
|
rt_memset(frame_buffer, 0x00, sizeof(frame_buffer));
|
||||||
IOMUXC_GPIO_AD_B0_02_GPIO1_IO02, /* GPIO_AD_B0_02 is configured as GPIO1_IO02 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_00_LCD_CLK, /* GPIO_B0_00 is configured as LCD_CLK */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_01_LCD_ENABLE, /* GPIO_B0_01 is configured as LCD_ENABLE */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_02_LCD_HSYNC, /* GPIO_B0_02 is configured as LCD_HSYNC */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_03_LCD_VSYNC, /* GPIO_B0_03 is configured as LCD_VSYNC */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_04_LCD_DATA00, /* GPIO_B0_04 is configured as LCD_DATA00 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_05_LCD_DATA01, /* GPIO_B0_05 is configured as LCD_DATA01 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_06_LCD_DATA02, /* GPIO_B0_06 is configured as LCD_DATA02 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_07_LCD_DATA03, /* GPIO_B0_07 is configured as LCD_DATA03 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_08_LCD_DATA04, /* GPIO_B0_08 is configured as LCD_DATA04 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_09_LCD_DATA05, /* GPIO_B0_09 is configured as LCD_DATA05 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_10_LCD_DATA06, /* GPIO_B0_10 is configured as LCD_DATA06 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_11_LCD_DATA07, /* GPIO_B0_11 is configured as LCD_DATA07 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_12_LCD_DATA08, /* GPIO_B0_12 is configured as LCD_DATA08 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_13_LCD_DATA09, /* GPIO_B0_13 is configured as LCD_DATA09 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_14_LCD_DATA10, /* GPIO_B0_14 is configured as LCD_DATA10 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B0_15_LCD_DATA11, /* GPIO_B0_15 is configured as LCD_DATA11 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B1_00_LCD_DATA12, /* GPIO_B1_00 is configured as LCD_DATA12 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B1_01_LCD_DATA13, /* GPIO_B1_01 is configured as LCD_DATA13 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B1_02_LCD_DATA14, /* GPIO_B1_02 is configured as LCD_DATA14 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B1_03_LCD_DATA15, /* GPIO_B1_03 is configured as LCD_DATA15 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinMux(
|
|
||||||
IOMUXC_GPIO_B1_15_GPIO2_IO31, /* GPIO_B1_15 is configured as GPIO2_IO31 */
|
|
||||||
0U); /* Software Input On Field: Input Path is determined by functionality */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_AD_B0_02_GPIO1_IO02, /* GPIO_AD_B0_02 PAD functional properties : */
|
|
||||||
0x10B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Keeper
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Down
|
|
||||||
Hyst. Enable Field: Hysteresis Disabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_00_LCD_CLK, /* GPIO_B0_00 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_01_LCD_ENABLE, /* GPIO_B0_01 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_02_LCD_HSYNC, /* GPIO_B0_02 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_03_LCD_VSYNC, /* GPIO_B0_03 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_04_LCD_DATA00, /* GPIO_B0_04 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_05_LCD_DATA01, /* GPIO_B0_05 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_06_LCD_DATA02, /* GPIO_B0_06 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_07_LCD_DATA03, /* GPIO_B0_07 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_08_LCD_DATA04, /* GPIO_B0_08 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_09_LCD_DATA05, /* GPIO_B0_09 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_10_LCD_DATA06, /* GPIO_B0_10 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_11_LCD_DATA07, /* GPIO_B0_11 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_12_LCD_DATA08, /* GPIO_B0_12 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_13_LCD_DATA09, /* GPIO_B0_13 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_14_LCD_DATA10, /* GPIO_B0_14 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B0_15_LCD_DATA11, /* GPIO_B0_15 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B1_00_LCD_DATA12, /* GPIO_B1_00 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B1_01_LCD_DATA13, /* GPIO_B1_01 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B1_02_LCD_DATA14, /* GPIO_B1_02 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B1_03_LCD_DATA15, /* GPIO_B1_03 PAD functional properties : */
|
|
||||||
0x01B0B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Pull
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Up
|
|
||||||
Hyst. Enable Field: Hysteresis Enabled */
|
|
||||||
IOMUXC_SetPinConfig(
|
|
||||||
IOMUXC_GPIO_B1_15_GPIO2_IO31, /* GPIO_B1_15 PAD functional properties : */
|
|
||||||
0x10B0u); /* Slew Rate Field: Slow Slew Rate
|
|
||||||
Drive Strength Field: R0/6
|
|
||||||
Speed Field: medium(100MHz)
|
|
||||||
Open Drain Enable Field: Open Drain Disabled
|
|
||||||
Pull / Keep Enable Field: Pull/Keeper Enabled
|
|
||||||
Pull / Keep Select Field: Keeper
|
|
||||||
Pull Up / Down Config. Field: 100K Ohm Pull Down
|
|
||||||
Hyst. Enable Field: Hysteresis Disabled */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void _lcd_clock_config(void)
|
/* CLK */
|
||||||
{
|
clock_video_pll_config_t pll_config;
|
||||||
/*
|
|
||||||
* The desired output frame rate is 60Hz. So the pixel clock frequency is:
|
|
||||||
* (480 + 41 + 4 + 18) * (272 + 10 + 4 + 2) * 60 = 9.2M.
|
|
||||||
* Here set the LCDIF pixel clock to 9.3M.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
pll_config.loopDivider = 43;
|
||||||
* Initialize the Video PLL.
|
pll_config.postDivider = 4;
|
||||||
* Video PLL output clock is OSC24M * (loopDivider + (denominator / numerator)) / postDivider = 93MHz.
|
pll_config.numerator = 0;
|
||||||
*/
|
pll_config.denominator = 0;
|
||||||
clock_video_pll_config_t config = {
|
|
||||||
.loopDivider = 31, .postDivider = 8, .numerator = 0, .denominator = 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
CLOCK_InitVideoPll(&config);
|
CLOCK_InitVideoPll(&pll_config);
|
||||||
|
|
||||||
/*
|
|
||||||
* 000 derive clock from PLL2
|
|
||||||
* 001 derive clock from PLL3 PFD3
|
|
||||||
* 010 derive clock from PLL5
|
|
||||||
* 011 derive clock from PLL2 PFD0
|
|
||||||
* 100 derive clock from PLL2 PFD1
|
|
||||||
* 101 derive clock from PLL3 PFD1
|
|
||||||
*/
|
|
||||||
CLOCK_SetMux(kCLOCK_Lcdif1PreMux, 2);
|
CLOCK_SetMux(kCLOCK_Lcdif1PreMux, 2);
|
||||||
|
|
||||||
CLOCK_SetDiv(kCLOCK_Lcdif1PreDiv, 4);
|
CLOCK_SetDiv(kCLOCK_Lcdif1PreDiv, 4);
|
||||||
|
CLOCK_SetMux(kCLOCK_Lcdif1Mux, 0);
|
||||||
CLOCK_SetDiv(kCLOCK_Lcdif1Div, 1);
|
CLOCK_SetDiv(kCLOCK_Lcdif1Div, 1);
|
||||||
|
|
||||||
/*
|
/* GPIO */
|
||||||
* 000 derive clock from divided pre-muxed lcdif1 clock
|
CLOCK_EnableClock(kCLOCK_Iomuxc);
|
||||||
* 001 derive clock from ipp_di0_clk
|
|
||||||
* 010 derive clock from ipp_di1_clk
|
|
||||||
* 011 derive clock from ldb_di0_clk
|
|
||||||
* 100 derive clock from ldb_di1_clk
|
|
||||||
*/
|
|
||||||
CLOCK_SetMux(kCLOCK_Lcdif1Mux, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize the LCD_DISP. */
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_04_LCD_DATA00, 0U);
|
||||||
static void _lcd_hardware_reset(void)
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_04_LCD_DATA00, 0x01B0B0U); /* LCD_B3 */
|
||||||
{
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_05_LCD_DATA01, 0U);
|
||||||
volatile uint32_t i = 0x100U;
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_05_LCD_DATA01, 0x01B0B0U); /* LCD_B4 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_06_LCD_DATA02, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_06_LCD_DATA02, 0x01B0B0U); /* LCD_B5 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_07_LCD_DATA03, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_07_LCD_DATA03, 0x01B0B0U); /* LCD_B6 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_08_LCD_DATA04, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_08_LCD_DATA04, 0x01B0B0U); /* LCD_B7 */
|
||||||
|
|
||||||
gpio_pin_config_t config = {
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_09_LCD_DATA05, 0U);
|
||||||
kGPIO_DigitalOutput, 0,
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_09_LCD_DATA05, 0x01B0B0U); /* LCD_G2 */
|
||||||
};
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_10_LCD_DATA06, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_10_LCD_DATA06, 0x01B0B0U); /* LCD_G3 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_11_LCD_DATA07, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_11_LCD_DATA07, 0x01B0B0U); /* LCD_G4 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_12_LCD_DATA08, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_12_LCD_DATA08, 0x01B0B0U); /* LCD_G5 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_13_LCD_DATA09, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_13_LCD_DATA09, 0x01B0B0U); /* LCD_G6 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_14_LCD_DATA10, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_14_LCD_DATA10, 0x01B0B0U); /* LCD_G7 */
|
||||||
|
|
||||||
/* Reset the LCD. */
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_15_LCD_DATA11, 0U);
|
||||||
GPIO_PinInit(LCD_DISP_GPIO, LCD_DISP_GPIO_PIN, &config);
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_15_LCD_DATA11, 0x01B0B0U); /* LCD_R3 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B1_00_LCD_DATA12, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_00_LCD_DATA12, 0x01B0B0U); /* LCD_R4 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B1_01_LCD_DATA13, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_01_LCD_DATA13, 0x01B0B0U); /* LCD_R5 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B1_02_LCD_DATA14, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_02_LCD_DATA14, 0x01B0B0U); /* LCD_R6 */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B1_03_LCD_DATA15, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_03_LCD_DATA15, 0x01B0B0U); /* LCD_R7 */
|
||||||
|
|
||||||
GPIO_PinWrite(LCD_DISP_GPIO, LCD_DISP_GPIO_PIN, 0);
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_00_LCD_CLK, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_00_LCD_CLK, 0x01B0B0u); /* LCD_CLK */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_02_LCD_HSYNC, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_02_LCD_HSYNC, 0x01B0B0u); /* LCD_HSYNC */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_03_LCD_VSYNC, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_03_LCD_VSYNC, 0x01B0B0u); /* LCD_VSYNC */
|
||||||
|
IOMUXC_SetPinMux (IOMUXC_GPIO_B0_01_LCD_ENABLE, 0U);
|
||||||
|
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_01_LCD_ENABLE, 0x01B0B0u); /* LCD_ENABLE */
|
||||||
|
|
||||||
while (i--)
|
rt_pin_mode(LCD_RST_PIN, PIN_MODE_OUTPUT); /* LCD_RESET */
|
||||||
{
|
rt_pin_write(LCD_RST_PIN, PIN_LOW);
|
||||||
}
|
rt_thread_delay(RT_TICK_PER_SECOND/100);
|
||||||
|
rt_pin_write(LCD_RST_PIN, PIN_HIGH);
|
||||||
|
|
||||||
GPIO_PinWrite(LCD_DISP_GPIO, LCD_DISP_GPIO_PIN, 1);
|
rt_pin_mode (LCD_BL_PIN, PIN_MODE_OUTPUT); /* LCD_BL */
|
||||||
|
rt_pin_write(LCD_BL_PIN, PIN_HIGH);
|
||||||
|
|
||||||
/* Backlight. */
|
/* LCD */
|
||||||
config.outputLogic = 1;
|
elcdif_rgb_mode_config_t lcd_config;
|
||||||
GPIO_PinInit(LCD_BL_GPIO, LCD_BL_GPIO_PIN, &config);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void _lcdif_init(void)
|
lcd_config.hfp = LCD_HFP;
|
||||||
{
|
lcd_config.vfp = LCD_VFP;
|
||||||
const elcdif_rgb_mode_config_t config = {
|
lcd_config.hbp = LCD_HBP;
|
||||||
.panelWidth = RT_HW_LCD_WIDTH,
|
lcd_config.vbp = LCD_VBP;
|
||||||
.panelHeight = RT_HW_LCD_HEIGHT,
|
lcd_config.hsw = LCD_HSW;
|
||||||
.hsw = APP_HSW,
|
lcd_config.vsw = LCD_VSW;
|
||||||
.hfp = APP_HFP,
|
|
||||||
.hbp = APP_HBP,
|
|
||||||
.vsw = APP_VSW,
|
|
||||||
.vfp = APP_VFP,
|
|
||||||
.vbp = APP_VBP,
|
|
||||||
.polarityFlags = APP_POL_FLAGS,
|
|
||||||
.bufferAddr = (uint32_t)lcdif_frame_buffer[0],
|
|
||||||
.pixelFormat = kELCDIF_PixelFormatRGB565,
|
|
||||||
.dataBus = APP_LCDIF_DATA_BUS,
|
|
||||||
};
|
|
||||||
|
|
||||||
ELCDIF_RgbModeInit(LCDIF, &config);
|
lcd_config.polarityFlags = kELCDIF_DataEnableActiveHigh |
|
||||||
}
|
kELCDIF_VsyncActiveHigh |
|
||||||
|
kELCDIF_HsyncActiveLow |
|
||||||
|
kELCDIF_DriveDataOnRisingClkEdge;
|
||||||
|
|
||||||
static void _lcd_interrupt_init(void)
|
lcd_config.panelWidth = LCD_WIDTH;
|
||||||
{
|
lcd_config.panelHeight = LCD_HEIGHT;
|
||||||
EnableIRQ(LCDIF_IRQn);
|
lcd_config.pixelFormat = kELCDIF_PixelFormatRGB565;
|
||||||
ELCDIF_EnableInterrupts(LCDIF, kELCDIF_CurFrameDoneInterruptEnable);
|
lcd_config.dataBus = kELCDIF_DataBus16Bit;
|
||||||
}
|
lcd_config.bufferAddr = (uint32_t)frame_buffer;
|
||||||
|
|
||||||
static void _lcd_start(void)
|
ELCDIF_RgbModeInit (LCDIF, &lcd_config);
|
||||||
{
|
|
||||||
ELCDIF_RgbModeStart(LCDIF);
|
ELCDIF_RgbModeStart(LCDIF);
|
||||||
|
|
||||||
|
/* LCD DEVICE */
|
||||||
|
lcd.info.width = LCD_WIDTH;
|
||||||
|
lcd.info.height = LCD_HEIGHT;
|
||||||
|
lcd.info.pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB565;
|
||||||
|
lcd.info.bits_per_pixel = 16;
|
||||||
|
lcd.info.framebuffer = (void *)frame_buffer;
|
||||||
|
|
||||||
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LCDIF_IRQHandler(void)
|
static rt_err_t rt1050_lcd_control(rt_device_t device, int cmd, void *args)
|
||||||
{
|
{
|
||||||
uint32_t intStatus;
|
switch(cmd)
|
||||||
|
|
||||||
intStatus = ELCDIF_GetInterruptStatus(LCDIF);
|
|
||||||
|
|
||||||
ELCDIF_ClearInterruptStatus(LCDIF, intStatus);
|
|
||||||
|
|
||||||
if (intStatus & kELCDIF_CurFrameDone)
|
|
||||||
{
|
|
||||||
#ifdef LCD_DEBUG
|
|
||||||
s_frameDone = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (imxrt_lcd.update)
|
|
||||||
{
|
|
||||||
ELCDIF_SetNextBufferAddr(LCDIF, (uint32_t)lcdif_frame_buffer[imxrt_lcd.index]);
|
|
||||||
imxrt_lcd.update = false;
|
|
||||||
rt_sem_release(&imxrt_lcd.lcd_sem);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static rt_err_t rt_lcd_control(rt_device_t dev, int cmd, void *args)
|
|
||||||
{
|
|
||||||
switch (cmd)
|
|
||||||
{
|
{
|
||||||
case RTGRAPHIC_CTRL_RECT_UPDATE:
|
case RTGRAPHIC_CTRL_RECT_UPDATE:
|
||||||
{
|
|
||||||
if(rt_sem_take(&imxrt_lcd.lcd_sem, RT_TICK_PER_SECOND/20) != RT_EOK)
|
|
||||||
{
|
|
||||||
rt_kprintf("lcdtimeout!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
imxrt_lcd.index = (imxrt_lcd.index + 1) % FRAME_BUFFER_COUNT;
|
|
||||||
memcpy(lcdif_frame_buffer[imxrt_lcd.index], imxrt_lcd.framebuffer,
|
|
||||||
sizeof(LCD_PIXEL_T) * RT_HW_LCD_WIDTH * RT_HW_LCD_HEIGHT);
|
|
||||||
imxrt_lcd.update = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RTGRAPHIC_CTRL_POWERON:
|
case RTGRAPHIC_CTRL_POWERON:
|
||||||
|
rt_pin_write(LCD_BL_PIN, PIN_HIGH);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RTGRAPHIC_CTRL_POWEROFF:
|
case RTGRAPHIC_CTRL_POWEROFF:
|
||||||
|
rt_pin_write(LCD_BL_PIN, PIN_LOW);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RTGRAPHIC_CTRL_GET_INFO:
|
case RTGRAPHIC_CTRL_GET_INFO:
|
||||||
memcpy(args, &imxrt_lcd.lcd_info, sizeof(imxrt_lcd.lcd_info));
|
rt_memcpy(args, &lcd.info, sizeof(lcd.info));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RTGRAPHIC_CTRL_SET_MODE:
|
case RTGRAPHIC_CTRL_SET_MODE:
|
||||||
|
@ -523,166 +177,22 @@ static rt_err_t rt_lcd_control(rt_device_t dev, int cmd, void *args)
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int imxrt_hw_lcd_init(void)
|
int rt_hw_lcd_init(void)
|
||||||
{
|
{
|
||||||
LCD_PIXEL_T * framebuffer;
|
rt_err_t ret;
|
||||||
|
|
||||||
framebuffer = rt_malloc_align(sizeof(LCD_PIXEL_T) * RT_HW_LCD_WIDTH * RT_HW_LCD_HEIGHT, FRAME_BUFFER_ALIGN);
|
lcd.device.type = RT_Device_Class_Graphic;
|
||||||
if(!framebuffer)
|
lcd.device.init = rt1050_lcd_init;
|
||||||
{
|
lcd.device.open = RT_NULL;
|
||||||
rt_kprintf("malloc framebuffer fail\n");
|
lcd.device.close = RT_NULL;
|
||||||
return -1;
|
lcd.device.read = RT_NULL;
|
||||||
}
|
lcd.device.write = RT_NULL;
|
||||||
imxrt_lcd.framebuffer = framebuffer;
|
lcd.device.control = rt1050_lcd_control;
|
||||||
|
|
||||||
memset(framebuffer, LCD_INIT_DATA, sizeof(LCD_PIXEL_T) * RT_HW_LCD_WIDTH * RT_HW_LCD_HEIGHT);
|
lcd.device.user_data = (void *)&lcd.info;
|
||||||
memset(lcdif_frame_buffer, LCD_INIT_DATA, sizeof(lcdif_frame_buffer));
|
|
||||||
|
|
||||||
rt_kprintf("framebuffer: %p, lcdif_frame_buffer: %p, lcdif_frame_buffer[0]: %p, lcdif_frame_buffer[1]: %p\n", \
|
ret = rt_device_register(&lcd.device, "lcd", RT_DEVICE_FLAG_RDWR);
|
||||||
framebuffer, lcdif_frame_buffer, lcdif_frame_buffer[0], lcdif_frame_buffer[1]);
|
|
||||||
|
|
||||||
_lcd_gpio_config();
|
return ret;
|
||||||
_lcd_clock_config();
|
|
||||||
_lcd_hardware_reset();
|
|
||||||
_lcdif_init();
|
|
||||||
_lcd_interrupt_init();
|
|
||||||
_lcd_start();
|
|
||||||
|
|
||||||
imxrt_lcd.index = 0;
|
|
||||||
imxrt_lcd.update = false;
|
|
||||||
|
|
||||||
imxrt_lcd.lcd_info.bits_per_pixel = LCD_BITS_PER_PIXEL;
|
|
||||||
imxrt_lcd.lcd_info.pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB565;
|
|
||||||
imxrt_lcd.lcd_info.framebuffer = (void *)framebuffer;
|
|
||||||
imxrt_lcd.lcd_info.width = RT_HW_LCD_WIDTH;
|
|
||||||
imxrt_lcd.lcd_info.height = RT_HW_LCD_HEIGHT;
|
|
||||||
|
|
||||||
imxrt_lcd.lcd.type = RT_Device_Class_Graphic;
|
|
||||||
imxrt_lcd.lcd.init = NULL;
|
|
||||||
imxrt_lcd.lcd.open = NULL;
|
|
||||||
imxrt_lcd.lcd.close = NULL;
|
|
||||||
imxrt_lcd.lcd.read = NULL;
|
|
||||||
imxrt_lcd.lcd.write = NULL;
|
|
||||||
imxrt_lcd.lcd.control = rt_lcd_control;
|
|
||||||
imxrt_lcd.lcd.user_data = (void *)&imxrt_lcd.lcd_info;
|
|
||||||
|
|
||||||
rt_sem_init(&imxrt_lcd.lcd_sem, "lcd_sem", 1, RT_IPC_FLAG_FIFO);
|
|
||||||
|
|
||||||
/* register lcd device to RT-Thread */
|
|
||||||
rt_device_register(&imxrt_lcd.lcd, "lcd", RT_DEVICE_FLAG_RDWR);
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
//INIT_DEVICE_EXPORT(imxrt_hw_lcd_init);
|
INIT_DEVICE_EXPORT(rt_hw_lcd_init);
|
||||||
|
|
||||||
#ifdef LCD_DEBUG
|
|
||||||
#include <finsh.h>
|
|
||||||
|
|
||||||
void APP_FillFrameBuffer(uint32_t frameBuffer[RT_HW_LCD_HEIGHT][RT_HW_LCD_WIDTH])
|
|
||||||
{
|
|
||||||
/* Background color. */
|
|
||||||
static const uint32_t bgColor = 0U;
|
|
||||||
/* Foreground color. */
|
|
||||||
static uint8_t fgColorIndex = 0U;
|
|
||||||
static const uint32_t fgColorTable[] = {0x000000FFU, 0x0000FF00U, 0x0000FFFFU, 0x00FF0000U,
|
|
||||||
0x00FF00FFU, 0x00FFFF00U, 0x00FFFFFFU};
|
|
||||||
uint32_t fgColor = fgColorTable[fgColorIndex];
|
|
||||||
|
|
||||||
/* Position of the foreground rectangle. */
|
|
||||||
static uint16_t upperLeftX = 0U;
|
|
||||||
static uint16_t upperLeftY = 0U;
|
|
||||||
static uint16_t lowerRightX = (RT_HW_LCD_WIDTH - 1U) / 2U;
|
|
||||||
static uint16_t lowerRightY = (RT_HW_LCD_HEIGHT - 1U) / 2U;
|
|
||||||
|
|
||||||
static int8_t incX = 1;
|
|
||||||
static int8_t incY = 1;
|
|
||||||
|
|
||||||
/* Change color in next forame or not. */
|
|
||||||
static bool changeColor = false;
|
|
||||||
|
|
||||||
uint32_t i, j;
|
|
||||||
|
|
||||||
/* Background color. */
|
|
||||||
for (i = 0; i < RT_HW_LCD_HEIGHT; i++)
|
|
||||||
{
|
|
||||||
for (j = 0; j < RT_HW_LCD_WIDTH; j++)
|
|
||||||
{
|
|
||||||
frameBuffer[i][j] = bgColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Foreground color. */
|
|
||||||
for (i = upperLeftY; i < lowerRightY; i++)
|
|
||||||
{
|
|
||||||
for (j = upperLeftX; j < lowerRightX; j++)
|
|
||||||
{
|
|
||||||
frameBuffer[i][j] = fgColor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update the format: color and rectangle position. */
|
|
||||||
upperLeftX += incX;
|
|
||||||
upperLeftY += incY;
|
|
||||||
lowerRightX += incX;
|
|
||||||
lowerRightY += incY;
|
|
||||||
|
|
||||||
changeColor = false;
|
|
||||||
|
|
||||||
if (0U == upperLeftX)
|
|
||||||
{
|
|
||||||
incX = 1;
|
|
||||||
changeColor = true;
|
|
||||||
}
|
|
||||||
else if (RT_HW_LCD_WIDTH - 1 == lowerRightX)
|
|
||||||
{
|
|
||||||
incX = -1;
|
|
||||||
changeColor = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (0U == upperLeftY)
|
|
||||||
{
|
|
||||||
incY = 1;
|
|
||||||
changeColor = true;
|
|
||||||
}
|
|
||||||
else if (RT_HW_LCD_HEIGHT - 1 == lowerRightY)
|
|
||||||
{
|
|
||||||
incY = -1;
|
|
||||||
changeColor = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changeColor)
|
|
||||||
{
|
|
||||||
fgColorIndex++;
|
|
||||||
|
|
||||||
if (ARRAY_SIZE(fgColorTable) == fgColorIndex)
|
|
||||||
{
|
|
||||||
fgColorIndex = 0U;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_test(void)
|
|
||||||
{
|
|
||||||
uint32_t frameBufferIndex = 0;
|
|
||||||
|
|
||||||
APP_FillFrameBuffer(lcdif_frame_buffer[frameBufferIndex]);
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
frameBufferIndex ^= 1U;
|
|
||||||
|
|
||||||
APP_FillFrameBuffer(lcdif_frame_buffer[frameBufferIndex]);
|
|
||||||
|
|
||||||
ELCDIF_SetNextBufferAddr(LCDIF, (uint32_t)lcdif_frame_buffer[frameBufferIndex]);
|
|
||||||
|
|
||||||
s_frameDone = false;
|
|
||||||
/* Wait for previous frame complete. */
|
|
||||||
while (!s_frameDone)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FINSH_FUNCTION_EXPORT(lcd_test, lcd test);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,29 +1,23 @@
|
||||||
/*
|
/*
|
||||||
* File : drv_i2c.c
|
* File : drv_lcd2.c
|
||||||
* COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team
|
* This file is part of RT-Thread RTOS
|
||||||
|
* COPYRIGHT (C) 2006-2013, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* The license and distribution terms for this file may be
|
||||||
* it under the terms of the GNU General Public License as published by
|
* found in the file LICENSE in this distribution or at
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* http://www.rt-thread.org/license/LICENSE
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2017-12-15 Tanek the first version
|
* 2018-04-05 Liuguang the first version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DRV_LCD_H__
|
#ifndef __DRV_LCD_H__
|
||||||
#define __DRV_LCD_H__
|
#define __DRV_LCD_H__
|
||||||
|
|
||||||
extern int imxrt_hw_lcd_init(void);
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
int rt_hw_lcd_init(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -18,7 +18,8 @@
|
||||||
#include "fsl_iomuxc.h"
|
#include "fsl_iomuxc.h"
|
||||||
#include "fsl_lpspi.h"
|
#include "fsl_lpspi.h"
|
||||||
|
|
||||||
#ifdef RT_USING_SPI
|
#if defined(RT_USING_SPIBUS1) || defined(RT_USING_SPIBUS2) || \
|
||||||
|
defined(RT_USING_SPIBUS3) || defined(RT_USING_SPIBUS4)
|
||||||
|
|
||||||
#if defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL
|
#if defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL
|
||||||
#error "Please don't define 'FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL'!"
|
#error "Please don't define 'FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL'!"
|
||||||
|
@ -28,7 +29,7 @@
|
||||||
#define LPSPI_CLK_SOURCE (1U) /* PLL3 PFD0 */
|
#define LPSPI_CLK_SOURCE (1U) /* PLL3 PFD0 */
|
||||||
#endif
|
#endif
|
||||||
#if !defined(LPSPI_CLK_SOURCE_DIVIDER)
|
#if !defined(LPSPI_CLK_SOURCE_DIVIDER)
|
||||||
#define LPSPI_CLK_SOURCE_DIVIDER (7U) /* 8div */
|
#define LPSPI_CLK_SOURCE_DIVIDER (8U) /* 8div */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* LPSPI1 SCK SDO SDI IOMUX Config */
|
/* LPSPI1 SCK SDO SDI IOMUX Config */
|
||||||
|
@ -399,14 +400,10 @@ static struct rt_spi_ops rt1050_spi_ops =
|
||||||
|
|
||||||
int rt_hw_spi_bus_init(void)
|
int rt_hw_spi_bus_init(void)
|
||||||
{
|
{
|
||||||
#if defined(RT_USING_SPIBUS1) || defined(RT_USING_SPIBUS2) || \
|
|
||||||
defined(RT_USING_SPIBUS3) || defined(RT_USING_SPIBUS4)
|
|
||||||
|
|
||||||
CLOCK_SetMux(kCLOCK_LpspiMux, LPSPI_CLK_SOURCE);
|
CLOCK_SetMux(kCLOCK_LpspiMux, LPSPI_CLK_SOURCE);
|
||||||
CLOCK_SetDiv(kCLOCK_LpspiDiv, LPSPI_CLK_SOURCE_DIVIDER);
|
CLOCK_SetDiv(kCLOCK_LpspiDiv, LPSPI_CLK_SOURCE_DIVIDER-1);
|
||||||
|
|
||||||
CLOCK_EnableClock(kCLOCK_Iomuxc);
|
CLOCK_EnableClock(kCLOCK_Iomuxc);
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(RT_USING_SPIBUS1)
|
#if defined(RT_USING_SPIBUS1)
|
||||||
rt_spi_bus_register(&spi1_bus, "spi1", &rt1050_spi_ops);
|
rt_spi_bus_register(&spi1_bus, "spi1", &rt1050_spi_ops);
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* File : drv_spi_flash.c
|
||||||
|
* This file is part of RT-Thread RTOS
|
||||||
|
* COPYRIGHT (C) 2006-2013, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rt-thread.org/license/LICENSE
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-04-02 Liuguang the first version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "drv_spi_flash.h"
|
||||||
|
|
||||||
|
#include "spi_flash.h"
|
||||||
|
#include "spi_flash_sfud.h"
|
||||||
|
|
||||||
|
#ifndef SPI_FLASH_USING_SPIBUS_NAME
|
||||||
|
#define SPI_FLASH_USING_SPIBUS_NAME "spi4"
|
||||||
|
#endif
|
||||||
|
#ifndef SPI_FLASH_NAME
|
||||||
|
#define SPI_FLASH_NAME "flash0"
|
||||||
|
#endif
|
||||||
|
#ifndef SPI_FLASH_USING_CS_PIN
|
||||||
|
#define SPI_FLASH_USING_CS_PIN (79)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int rt_hw_spi_flash_init(void)
|
||||||
|
{
|
||||||
|
rt_err_t ret;
|
||||||
|
|
||||||
|
extern rt_err_t rt1050_spi_bus_attach_device(const char *bus_name,
|
||||||
|
const char *device_name, rt_uint32_t pin);
|
||||||
|
|
||||||
|
ret = rt1050_spi_bus_attach_device(SPI_FLASH_USING_SPIBUS_NAME,
|
||||||
|
SPI_FLASH_USING_SPIBUS_NAME "0", SPI_FLASH_USING_CS_PIN);
|
||||||
|
if(ret != RT_EOK)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(rt_sfud_flash_probe(SPI_FLASH_NAME, SPI_FLASH_USING_SPIBUS_NAME "0") == RT_NULL)
|
||||||
|
{
|
||||||
|
return RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
INIT_DEVICE_EXPORT(rt_hw_spi_flash_init);
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* File : drv_spi_flash.c
|
||||||
|
* This file is part of RT-Thread RTOS
|
||||||
|
* COPYRIGHT (C) 2006-2013, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rt-thread.org/license/LICENSE
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2018-04-02 Liuguang the first version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DRV_SPI_FLASH_H_
|
||||||
|
#define __DRV_SPI_FLASH_H_
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
|
||||||
|
int rt_hw_spi_flash_init(void);
|
||||||
|
|
||||||
|
#endif /* __DRV_SPI_FLASH_H_ */
|
File diff suppressed because it is too large
Load Diff
|
@ -200,20 +200,36 @@
|
||||||
|
|
||||||
#define RT_USING_UART1
|
#define RT_USING_UART1
|
||||||
|
|
||||||
/* Select spi bus drivers */
|
/* Select spi bus and dev drivers */
|
||||||
|
|
||||||
#define LPSPI_CLK_SOURCE_FROM_PLL3PFD1
|
#define LPSPI_CLK_SOURCE_FROM_PLL3PFD1
|
||||||
#define LPSPI_CLK_SOURCE 0
|
#define LPSPI_CLK_SOURCE 0
|
||||||
#define LPSPI_CLK_SOURCE_DIVIDER 7
|
#define LPSPI_CLK_SOURCE_DIVIDER 8
|
||||||
#define RT_USING_SPIBUS4
|
#define RT_USING_SPIBUS4
|
||||||
#define LPSPI4_SCK_GPIO_1
|
#define LPSPI4_SCK_GPIO_1
|
||||||
#define LPSPI4_SDO_GPIO_1
|
#define LPSPI4_SDO_GPIO_1
|
||||||
#define LPSPI4_SDI_GPIO_1
|
#define LPSPI4_SDI_GPIO_1
|
||||||
|
|
||||||
/* Select iic drivers */
|
/* Select i2c bus drivers */
|
||||||
|
|
||||||
#define LPI2C_CLOCK_SOURCE_DIVIDER 4
|
#define LPI2C_CLOCK_SOURCE_DIVIDER 4
|
||||||
#define RT_USING_I2C1
|
#define RT_USING_I2C1
|
||||||
|
|
||||||
|
/* Select lcd driver */
|
||||||
|
|
||||||
|
/* Notice: Evk Board para: 480*272 4 4 8 2 40 10 106 45 */
|
||||||
|
|
||||||
|
#define RT_USING_LCD
|
||||||
|
#define LCD_WIDTH 480
|
||||||
|
#define LCD_HEIGHT 272
|
||||||
|
#define LCD_HFP 4
|
||||||
|
#define LCD_VFP 4
|
||||||
|
#define LCD_HBP 8
|
||||||
|
#define LCD_VBP 2
|
||||||
|
#define LCD_HSW 40
|
||||||
|
#define LCD_VSW 10
|
||||||
|
#define LCD_BL_PIN 106
|
||||||
|
#define LCD_RST_PIN 45
|
||||||
#define RT_USING_SDRAM
|
#define RT_USING_SDRAM
|
||||||
#define RT_USING_RTC_HP
|
#define RT_USING_RTC_HP
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue