用于实时操作系统LCM移植指南的MediaTek Linkit™开发平台-mt2503 LinkIt_for_RTOS_LCM_Porting_Guide
用于实时操作系统的MediaTek Linkit™开发平台允许在LinkitHDK中添加一个液晶模块(Lcm)。MediaTek MT 2523和MT 2533芯片组支持三种不同的背光类型iSink,显示PWM和LCM亮度,和两个显示输出接口-显示总线接口(DBI)和显示串行接口(DSI)。正式的LCM子板ST 7789H2使用iSink作为背光,DBI用于d。isplay输出接口。RM 69032子板采用LCM亮度和DSI作为显示输出接口。
本指南提供关于LCM移植的详细说明,包括LCM驱动程序的创建和背光控制。背光显示板支撑包(BSP)层的改造分别在第3节“背光”和第4节“显示”中进行描述。
2. Creating a New LCM Driver
本节描述如何为新的LCM设备自定义具有DBI和DSI接口的现有LCM驱动程序。LCM驱动程序示例如图1所示
2.1. Create a DBI LCM driver
要创建基于ST7789H2的DBI接口LCM驱动程序:
1) 创建LCM驱动程序(ST 7789H2文件夹)的副本,并将其命名为所需的LCM名称,例如MyDbiLCM。
2) 用新名称(MyDbiLCM)替换复制的LCM源文件中的所有ST7789H2。
3) 在lcm_config_part结构下为DBI接口修改LCM设置,如下所示:
#define MAIN_LCD_CMD_ADDR LCD_SERIAL0_A0_LOW_ADDR
#define MAIN_LCD_DATA_ADDR LCD_SERIAL0_A0_HIGH_ADDR
static lcm_config_para_t MyDbiLCM_para =
{
.type = LCM_INTERFACE_TYPE_DBI,
.backlight_type = BACKLIGHT_TYPE_ISINK,
.main_command_address = LCD_SERIAL0_A0_LOW_ADDR,
.main_data_address = LCD_SERIAL0_A0_HIGH_ADDR,
.main_lcd_output = LCM_16BIT_16_BPP_RGB565_1,
.output_pixel_width = 16,
};
a)修改main_lcd_cmd_addr和main_lcd_data_addr的宏定义。
b)Backlight_type可以定义为以下选项之一
BACKLIGHT_TYPE_ISINK/BACKLIGHT_TYPE_DISPLAY_PWM/ BACKLIGHT_TYPE_LCM_BRIGHTNESS
c)主命令地址应为lcd_SERIAL0_A0_HERE_ADDR,如果LCM在A0处于高位时传输命令,则将其定义为LCD_SERIAL0_A0_Low_ADDR。
d)主_数据地址应为lcd_SERIAL0_A0_HERE_ADDR,如果LCM在A0处于高位时传输数据,则将其定义为LCD_SERIAL0_A0_Low_ADDR。
e)Main_LCD_Output(以像素为单位)定义为LCM_16位_16_BPP_RGB 565_1
如果启用了2-数据通道,并且输出颜色格式为RGB 565,则Main_LCD_Output应为LCM_16位_BPP_RGB 565_1。
如果禁用了2-数据通道,并且输出颜色格式为RGB 565,则主_LCD_Output应为LCM_8位_16_BPP_RGB 565_1。
有关输出颜色格式的更多信息,请参见<sdk_root>\driver\board\component\common\bsp_lcd.h
4)初始化LCM并配置设置。表1描述了这些函数(原型名称)
a)在LCD_Init_MyDbiLCM()函数中实现LCM驱动IC供应商提供的初始序列。将示例代码中的初始序列替换为LCM驱动IC供应商
void LCD_Init_MyDbiLCM(uint32_t bkground)
{
hal_display_lcd_toggle_reset(10, 120); /* toogle reset pin */
/* Implment the initial code here */
...
/* Clear all screen to the same color */
LCD_ClearAll_MyDbiLCM(bkground);
}
(B)配置LCD_Init_Interface_MyDbiLCM()中DBI接口的输出时序和模式设置,如下面的示例代码所示。
void LCD_Init_Interface_MyDbiLCM(void)
{
hal_display_lcd_interface_mode_t mode_settings;
hal_display_lcd_interface_timing_t timing_settings;
mode_settings.port_number = HAL_DISPLAY_LCD_INTERFACE_SERIAL_0;
mode_settings.three_wire_mode = 1;
mode_settings.cs_stay_low_mode = 0;
mode_settings.driving_current = HAL_DISPLAY_LCD_DRIVING_CURRENT_16MA;
mode_settings.single_a0_mode = 0;
mode_settings.read_from_SDI = 0;
mode_settings.width = HAL_DISPLAY_LCD_INTERFACE_WIDTH_8;
mode_settings.hw_cs = 1;
mode_settings.power_domain = HAL_DISPLAY_LCD_POWER_DOMAIN_1V8;
mode_settings.start_byte_mode = 0;
hal_display_lcd_set_interface_mode(mode_settings);
timing_settings.port_number = HAL_DISPLAY_LCD_INTERFACE_SERIAL_0;
timing_settings.csh = 0;
timing_settings.css = 0;
timing_settings.wr_low= 0;
timing_settings.wr_high= 0;
timing_settings.rd_low= 7;
timing_settings.rd_high= 7;
timing_settings.clock_freq= HAL_DISPLAY_LCD_INTERFACE_CLOCK_124MHZ;
hal_display_lcd_set_interface_timing(timing_settings);
}
模式_设置中的配置设置和时间设置中的定时持续时间设置在LinkitSDKv4.1API参考手册中进行了描述。
时序参数的示例计算描述如下。
MyDbiLCM的CSS/CSH/WR_low/WR_He的最小值为6ns,RD_low和RD_How的最小值为60 ns。输入时钟被设置为HAL_Display_LCD_Interface_Clock_124 MHZ,从而获得输入周期的持续时间。n为1/124 MHz≈8ns。CSS/CSH/WRlow/WRHigh的最小时间为6ns,小于(8ns*1)。Hal_Display_LCD_Interface_TIME_t中的定时计数器从1开始。所以CSS的参数CSH/WR_LOW/WR_How应设置为1-1=0.
RD_low和RD_High的最小时间为60 ns<(8ns*8),因此RD_low和RD_High应设置为8-1=7。
c)实现lcd_BlockW区_MyDbiLCM()函数,如下面所示的示例代码所示
LCD_BlockWrite_MyDbiLCM
{
LCD_CtrlWrite_MyDbiLCM(0x2A);
LCD_DataWrite_MyDbiLCM((startx&0xFF00)>>8);
LCD_DataWrite_MyDbiLCM(startx&0xFF);
LCD_DataWrite_MyDbiLCM((endx&0xFF00)>>8);
LCD_DataWrite_MyDbiLCM(endx&0xFF);
LCD_CtrlWrite_MyDbiLCM(0x2B);
LCD_DataWrite_MyDbiLCM((starty&0xFF00)>>8);
LCD_DataWrite_MyDbiLCM(starty&0xFF);
LCD_DataWrite_MyDbiLCM((endy&0xFF00)>>8);
LCD_DataWrite_MyDbiLCM(endy&0xFF);
LCD_CtrlWrite_MyDbiLCM(0x2C);
hal_display_lcd_start_dma(1);
}
用L提供的(LCD_CtrlW区_MyDbiLCM(0x2A)、LCD_CtrlW区_MyDbiLCM(0x2B)和内存写入(0x2C)命令替换(0x2A,0x2B)的区域设置(LCD_CtrlW区_MyDbiLCM(0x2A)和内存写入(0x2C)司机,如果需要的话。其余的设置也可以基于LCM数据表进行配置。
如果TE引脚连接到Linkit 2523 HDK,则应将Hal_Display_lcd_start_dma()函数的输入参数设置为1,因此当同步信号发出后,LCD引擎将开始传输数据。从LCM驱动器IC接收L。如果没有连接TE引脚,则输入参数应设置为0,以避免lcd引擎传输失败。
d)替换LCD_EnterSleepMode_MyDbiLCM()/LCD_ExitSleepMode_MyDbiLCM()/LCD_EnterIdleMod
e_MyDbiLCM()/LCD_ExitIdleMode_MyDbiLCM() to the correct command, if necessar
e)修改LCD_IOCTRL_MyDbiLCM()到当前LCM设置的返回值。
f)为LCM驱动芯片实现具有读取ID功能的LCD_CheckID_MyDbiLCM()函数
5)在代码库中添加LCM驱动程序。修改驱动器/board/mt25x3_hdk/module.mk上的makefile以包括以下内容
C_FILES = $(BOARD_SRC)/lcd/mt25x3_hdk_lcd.c
C_FILES += $(COMPONENT_SRC)/lcm/ST7789H2/lcd.c
#Add the LCM driver source here
C_FILES += $(BOARD_SRC)/backlight/mt25x3_hdk_backlight.c
6)修改BSP背光,显示码流。参见第3节“背光”以修改背光驱动程序,第4节“显示”修改显示驱动程序。
注:资料来自一牛网论坛
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529038/viewspace-2375420/,如需转载,请注明出处,否则将追究法律责任。