ITPub博客

首页 > 移动开发 > ANDROID > mt2503 LinkIt_for_RTOS_LCM_Porting_Guide

mt2503 LinkIt_for_RTOS_LCM_Porting_Guide

ANDROID 作者:SZX511 时间:2019-01-10 15:35:07 0 删除 编辑

用于实时操作系统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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论
一牛网论坛囊括了MTK、高通、射频、PCB、嵌入式、全志、海思等技术,欢迎大家前来学习、讨论

注册时间:2018-03-29

  • 博文量
    153
  • 访问量
    81955