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