mt2503 LinkIt_for_RTOS_LCM_Porting_Guide

SZX511發表於2019-01-10

用於實時作業系統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/,如需轉載,請註明出處,否則將追究法律責任。