日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

天马3.5寸TFT屏调试文档

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天马3.5寸TFT屏调试文档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

天馬 3.5 TFT 屏調試文檔

王小濤 2009 年 6 月 12 日

修訂版

1 、坐標定位

觸摸屏點擊時驅動讀入的是ADC值,也就是電壓值(AD后),一個是x坐標的ADC值,一個是y坐標的ADC值。一個點的x坐標和y坐標的ADC值存放在變量LogicNumber[presstimes]中,高16位是x坐標的ADC值,低16位是y坐標的ADC值,而ADC值也就是屏幕的邏輯坐標值,因此在變量LogicNumber[presstimes]中存儲的實際上也是屏的邏輯坐標值。

ADC值是通過函數LogicNumber[presstimes] = WRTAmuse.Common.getStoredNumber();來讀取的。

我們的坐標定位程序設置了五個基準點(屏幕坐標),五個基準點(屏幕坐標)分別如下:

PointPX[0] = 30; //第一個基準點的屏幕坐標

PointPY[0] = 30;

PointPX[1] = 290; //第二個基準點的屏幕坐標

PointPY[1] = 30;

PointPX[2] = 30; //第三個基準點的屏幕坐標

PointPY[2] = 210;

PointPX[3] = 290; //第四個基準點的屏幕坐標

PointPY[3] = 210;

PointPX[4] = 160; //第五個基準點的屏幕坐標

PointPY[4] = 120;

通過依次點擊這五個基準點分別得到五個點的邏輯坐標值,并判斷用戶是否對準五個點依次點擊。當用戶操作正確后,我們的坐標定位程序會將用戶依次點擊的五個基準點的邏輯坐標記錄下來。然后通過線性回歸公式計算得出LCD屏的屏幕坐標系與邏輯坐標系之間的比例關系(即計算出參數KX和KY)。而事實上我們的坐標定位程序需要六個參數,其中有四個參數是直接得到的,有兩個是需要計算出來的(即KX和KY)。六個參數如下:

XLC(第一個點的邏輯x坐標,即x方向的ADC值)、

YLC(第一個點的邏輯y坐標,即y方向的ADC值)、

XC(第一個點的屏幕x坐標,這里是30)、

YC(第一個點的屏幕y坐標,這里是30)、

KX(邏輯坐標系和屏幕坐標系的x軸比例關系)、

KY(邏輯坐標系和屏幕坐標系的y軸比例關系)。

其中XLC和YLC可以通過函數

LogicNumber[presstimes] = WRTAmuse.Common.getStoredNumber();讀取,而XC和YC是我們自己預先設置好的屏幕坐標,KX和KY的計算公式如下:

我們運行我們的坐標定位程序,并通過程序將坐標信息打印出來。結果如下:

_xmouse = 30

_ymouse = 29

1presstimes =0

_xmouse = 288

_ymouse = 30

1presstimes =1

Math.abs(tmpLogicNum_2 - tmpLogicNum_1) =6

Math.abs(tmpLogicNum_3 - tmpLogicNum_4) =3046

_xmouse = 29

_ymouse = 207

1presstimes =2

_xmouse = 288

_ymouse = 209

1presstimes =3

Math.abs(tmpLogicNum_2 - tmpLogicNum_1)=20

(Math.abs(tmpLogicNum_3 - tmpLogicNum_4)=3054

_xmouse = 160

_ymouse = 119

1presstimes =4

PointLX[0] = 461

PointLY[0] = 3279

PointLX[1] = 3507

PointLY[1] = 3285

PointLX[2] = 465

PointLY[2] = 621

PointLX[3] = 3519

PointLY[3] = 601

PointLX[4] = 1991

PointLY[4] = 1941

XLC = 461

YLC = 3279

YC = 30

XC = 30

KX = 11730.76923076923

KY = -14838.888888888889

//剛開始調試大屏的時候,坐標不準,是因為硬件上x和y兩根線反了,調過來就ok了。

2 、天馬屏的時序

一般來說,液晶屏或者是ssd1926在上電復位后,其寄存器會有一個默認的參數。一般來說我們可以選擇屏復位后的默認參數,然后通過設置ssd1926的寄存器來匹配屏的那些默認參數。而我們的調試正是通過設置ssd1926的寄存器來配合屏的默認參數的。

我們先看看天馬屏的默認參數:

其中大部分寄存器都可以采用默認參數,只有少數需要進行修改。下面將介紹那部分需要修改的寄存器:

R03h:一般來說,DEN都是為高有效,CLKIN上升沿鎖存數據,HSD為低有效,VSD為低有效,24-bit digital RGB input format HV Mode,6.4M。

R0eh:當時出現屏閃的現象,實際上就是這個寄存器參數的問題。我們將這個寄存器值設置為0x6A后,屏閃的現象就消失了。我們在設置這個寄存器的時候,主要是改變VCOMDC的值。但我們在寫入寄存器的時候,記得Bit[6](即OTP_BYPS)要設置為1。否則VCOMDC的值不會被寫入。

R04h:設置Source Timing delay control register,默認為:70,實際上就是SSD1926中的HDPS

R05h:設置Gate Timing delay control register,默認為:13,實際上就是SSD1926中的VDPS

雖然這里我們是采用天馬屏的默認參數來用,但有時候我們需要對屏的一些參數進行一些調整,這里先介紹下如何設置屏的參數。

一般來說設置屏的參數是通過SPI,I2C或者是串口等方式來實現的,一般來說SPI和I2C用得比較多,而我們的天馬屏正是SPI接口來設置屏參數的。所以我們要在天馬屏的手冊中找到屏的SPI時序,如下圖:

注意:不同屏的SPI時序可能有所不同,詳細應該參見屏的技術手冊。

可以看到,其SPI時序,SDI是串行數據,高6位是寄存器的地址,接下來是一個讀寫標志位,然后一個高阻位,接下來就是數據了。可以看到,時序是先發高位,再發低位。因此我們的SPI程序(詳見2137/case/drivers/lcm/SSD1926.c)。我們的SPI接口電路如下:

3 SSD1926 TFT 屏的時序控制

接下來我們看看SSD1926中對TFT屏的時序控制:

其中對TFT屏的時序控制涉及到幾個參數的設置:

HT:Horizontal Total

VT:Vertical Total

HDP:Horizontal Display Period

VDP:Vertical Display Period

HDPS:Horizontal Display Period Start Position、

VDPS:Vertical Display Period Start Position

HPW:LLINE Pulse Width

VPW:LFRAME Pulse Width

HPS:LLINE Pulse Start Position

VPS:LFRAME Pulse Start Position

我們從天馬屏的資料中可以看到天馬屏的時序圖和一些參數表

從時序圖中我們可以看到了:HSYNC、VSYNC為低有效,而DEN為高有效,且在DCLK上升沿鎖存數據。這與屏的寄存器R03h的默認參數一致。

我們先來設置SSD1926是輸出時鐘PCLK(Pixel CLK),使得SSD1926提供給屏的DCLK剛好的6.4M,我們從原理圖中可以看出,SSD1926的外部晶振為4M。

其中M=[R127_7-0],N=[R126_4-0]。

設置PLL_CLK的時序如下,(SSD1926文檔中的示例程序)

Program sequence (example input clock frequency = 2MHz) :

1. Write the N value (REG[126h] = 0x05)

2. Write the M value (REG[127h] = 0xC8)

3. Write the PLL Conf value (REG[12Bh] = 0xAE)

4. Enable the PLL (REG[126h] = 0x85)

Then, the PLL output clock frequency = Input clock frequency * (M / N) = 80MHz

Maximum output clock frequency = 85MHz

而我們的程序中,

SSD_REGWB(0x126,0x0A);

SSD_REGWB(0x127,0xC8);

SSD_REGWB(0x12B,0xAE);

SSD_REGWB(0x126,0x8A);

則我們的輸出的PLL_CLK= 4M*(0xC8/0x0A)=80M

而MCLK Frequency = PLL output frequency / (MCLK divide value + 1)

MCLK divide value=[R04h_4-0]。

在我們的程序中我們用的是R04h的默認值,即0。所以MCLK=64M/1=80M

我們僅使用PCLK(Pixel CLK,即液晶屏的DCLK),而SD_CLK引腳我們尚未使用。

我們現在配置PCKK的頻率為6.4M

PCLK frequency = MCLK frequency * (PCLK Frequency Ratio + 1) / (2^20)

PCLK Frequency Ratio=[R15Ah_3-0,R159h_7-0,R158h_7-0]

為了使得PCLK=6.4M,

我們必須使PCLK Frequency Ratio=6.4M*2^20/80M-1=83385.08=0x147AD

至此,我們已經將PCLK設置完畢

{REG_PCLK_FREQ_RATIO_0 ,0xad}, //R158h

{REG_PCLK_FREQ_RATIO_1 ,0x47}, //R159h

{REG_PCLK_FREQ_RATIO_2 ,0x01}, //R15Ah

從參數表中我們可以看到屏的DCLK的頻率是6.4M,我們在前面已經將SSD1926的PCLK設置為6.4M了。而HT=408、VT=263*HT、HDP=320、VDP=240*HT、HDPS=70、VDPS=13*HT、HPW=1、VPW=1*HT、HPS=1、VPS=1*HT。單位全部為pixel。

根據以上天馬屏的默認參數,我們對SSD1926的寄存器設置如下,以匹配天馬屏的參數。

/******************************************/

/* TFT Panel Timing Control,共10個參數 */

/******************************************/

//HT = [((R12h_7-0) + 1) x 8 + (R13h_2-0)] pixels

//天馬屏HT=408 比亞迪屏HT=408

{REG_HORIZ_TOTAL_0 ,0x32}, //R12h

{REG_HORIZ_TOTAL_1 ,0x00}, //R13h

//HDP = [((R14h_6-0) + 1) x 8] pixels

//天馬屏HDP=320 比亞迪屏HDP=320

{REG_HDP ,0x27}, //R14h

//HDPS = [(R17h_2-0, R16h_7-0) + 5] pixels

//天馬屏HDPS=70 比亞迪屏=68

{REG_HDP_START_POS0 ,0x41}, //R16h

{REG_HDP_START_POS1 ,0x00}, //R17h

//VT = [(R19h_2-0, R18h_7-0) + 1] lines

//天馬屏VT=263 比亞迪屏=262

{REG_VERT_TOTAL0 ,0x06}, //R18h

{REG_VERT_TOTAL1 ,0x01}, //R19h

//VDP = [(R1Dh_1-0,R1Ch_7-0)+ 1] lines

//天馬屏VDP=240 比亞迪屏VDP=240

{REG_VDP0 ,0xef}, //R1Ch

{REG_VDP1 ,0x00}, //R1Dh

//VDPS = [(R1Fh_2-0,R1Eh_7-0)] lines

//天馬屏VDPS=13 比亞迪屏VDPS=18

{REG_VDP_START_POS0 ,0x0d}, //R1Eh

{REG_VDP_START_POS1 ,0x00}, //R1Fh

//HPW = [(R20h_6-0)+ 1] pixels

//天馬屏HPW=1 比亞迪屏HPW=2

{REG_HSYNC_PULSE_WIDTH ,0x00}, //R20h

//HPS = [(R23h_2-0, R22h_7-0) + 1] pixels

//天馬屏HPS=1 比亞迪屏HPS=1

{REG_HSYNC_PULSE_START_POS0 ,0x00}, //R22h

{REG_HSYNC_PULSE_START_POS1 ,0x00}, //R23h

//VPW = [(R24h_2-0)+ 1] x HT + (R35h_2-0, RE34h_7-0) – (R31h_2-0, R30h_7-0) pixels

//天馬屏VPW=HT 比亞迪屏VPW=2*HT

{REG_VSYNC_PULSE_WIDTH ,0x00}, //R24h

{REG_FPFRAME_START_OFFSET0 ,0x00}, //R30h

{REG_FPFRAME_START_OFFSET1 ,0x00}, //R31h

{REG_FPFRAME_STOP_OFFSET0 ,0x00}, //R34h

{REG_FPFRAME_STOP_OFFSET1 ,0x00}, //R35h

//VPS = [(R27h_2-0, R26h_7-0)] x HT + (R31h_2-0, R30h_7-0) pixels

//天馬屏VPS=HT 比亞迪屏VPS=HT

{REG_VSYNC_PULSE_START_POS0 ,0x00}, //R26h

{REG_VSYNC_PULSE_START_POS1 ,0x00}, //R27h

4 SSD1926 的其他設置

(1)、 Panel Type Register:R10h

{REG_PANEL_TYPE ,0x71}, // Color LCD, 24 bits Data Width, TFT

(2)、Modulation Rate Register:R11h

{REG_MOD_RATE ,0x00}, // here: the MOD output signal (LDEN) toggles every LFRAME

(3)、Display Mode Register:R70h

{REG_DISPLAY_MODE ,0x84}, //here: Display Blank, 16 bpp

(4)、Power Up Registers:RA0h

{REG_POWER_SAVE_CONFIG ,0x00},

// all MCLK will be on、MCLK for display SRAM will be on、Power Saving mode is disabled.

(5)、RGB Setting Register:R1A4h

{REG_DV_OFORMAT ,0xC0}, //Floating Window RGB、Main Window RGB

(6)、LCD Power Control Register:RADh

{REG_GPIO_STATUS_CONTROL1 ,0x00}, //Writing a 0 to this bit drives LPOWER to low.

//Many implementations use the LPOWER pin to control the LCD bias power (see Section

“LCD Power Sequencing” in datasheet).

(7)、LSHIFT Polarity Register:R38h

{REG_HRTFT_SPECIAL_OUTPUT ,0x01}, //Bit_0=1 LSHIFT signal is falling trigger.

(9)、RGB sequence Register:R42h

{REG_LCD_SUBPIXEL_ALIGNMENT ,0x00}, // odd line RGB

1926設置中還有一部分是關于橫屏和豎屏的,以下為設置的寄存器

豎屏設置:

(10)、Special Effects Register :R71h

{REG_SPECIAL_EFFECTS ,0x41},

//Byte Swap,Floating Window disable,Eable 90 Display Rotate Mode

選擇了旋轉角度后,下面兩個寄存器是通過計算算出來的,具體公式詳見SSD1926文檔。注意不同旋轉角度的計算公式不同。

(11)、Main Window Display Start Address Register 0:R74h

{REG_MAIN_WIN_DISP_START_ADDR0 ,(MAIN_WIN_START_ADDR+(((LCD_HEIGHT)*ssd_bpp)/8))>>2-1},

// Main Window Display Start Address bits 16-0 = ((Image address + (panel height x bpp ÷ 8)) ÷ 4) –1

(12)、Main Window Line Address Offset Register 0:R78h

{REG_MAIN_WIN_ADDR_OFFSET0 ,0xa0},

// Main Window Line Address Offset bits 9-0 = Display width in pixels ÷ (32 ÷ bpp) = 320/(32/16) = 160 = 0xa0

橫屏設置:

{REG_SPECIAL_EFFECTS ,0x40},

//Byte Swap,Floating Window disable,Eable 0 Display Rotate Mode(Normal)

{REG_MAIN_WIN_DISP_START_ADDR0 ,(MAIN_WIN_START_ADDR)>>2},

// Main Window Display Start Address Bits 16:0 = Image address ÷ 4 (valid only for Display Rotate Mode 0°)

{REG_MAIN_WIN_ADDR_OFFSET0 ,0xa0},

// Main Window Line Address Offset bits 9-0 = Display Width in pixels ÷ (32 ÷ bpp) = 320/(32/16) = 160 = 0xa0

(13)、Main Window Display Start Address Register:R75h、R76h

{REG_MAIN_WIN_DISP_START_ADDR1 ,0x00}, //R75h

{REG_MAIN_WIN_DISP_START_ADDR2 ,0x00}, //R76h

//Main Window Display Start Address Bits 16:0 = Image address ÷ 4 (valid only for Display Rotate Mode 0°)

(14)、Cursor1 Memory Start Register 0

{REG_CURSOR1_MEM_START0,(cursor1_win_addr) >>2},

// Cursor1 Memory Start Bits 16:0 = Cursor Image address ÷ 4 (valid only for Display Rotate Mode 0°)

(15)、Cursor1 Horizontal Size Register 0:RD8h

{REG_CURSOR1_HORIZ_SIZE_0,(LCD_WIDTH/16)-1},

//cursor horz size = panel width, see P102

(16)、 Cursor1 Vertical Size Register 0:RDCh

{REG_CURSOR1_VERT_SIZE_0,LCD_HEIGHT-1}, //cursor vert size = panel height,see P103

(17)、Cursor1 Color Index1 Register 0:RE0h

{REG_CURSOR1_COL_IND1_0, (0<<11)|(0<<5)|0 & 0x0000ffff}, //(R<<11)|(G<<5)|B

1926還有部分寄存器采用默認的設置,其功能詳見SSD1926說明文檔,這里不一一詳述了!

需要改變的代碼:

1 、工程配置

在LCD_TIANMA/2137/case/include/目錄下,有一個工程配置文件“prj_config.h”,打開它,在第15行處有個#define CONFIG_PRJ_JK2801,我們的工程選用這個配置,其他的Project name全部已經被我刪除掉了,以后要是選用其他配置,就要從2137提供的源代碼把這些宏定義找回來。

1.1 、橫屏豎屏宏、屏寬屏高定義

在Configurantion of project JK2801中(第102行),有個橫屏和豎屏的選項,而我們這里選擇的是橫屏,代碼如下:

#if 1 //橫屏屏定義

#define IS_UPRIGHT 0 //橫屏顯示

#define VIDEO_TYPE_0x11

#else //豎屏定義

#define IS_UPRIGHT 1 //豎屏顯示

#define VIDEO_TYPE_0x12

#endif

還有就是屏寬和屏高的選擇,我們使用的是320*240的顯示屏,因此代碼如下:

#define SCREEN_WIDTH 320

#define SCREEN_HEIGHT 240

1.2 LCD 驅動類型宏定義

我們的驅動芯片是SSD1926,因此我們定義一個宏來表示(第140行):

#define LCD_DRIVER LCD_DRIVER_SSD1926//LCD_DRIVER_CPT5408//屏驅動類型

#define SSD1926_GPIO_INIT 1

1.3 、觸摸屏參數配置

然后在這個工程的配置中,還有一個Touch panel configuration(246行),我們將最前面計算好的觸摸屏坐標的參數寫進來就可以了:

// Modified by Shi 2009/05/31

//天馬屏觸摸屏的參數

#define TP_XLC 461

#define TP_YLC 3279

#define TP_YC 30

#define TP_XC 30

#define TP_KX 11765

#define TP_KY -14905

2 、SSD1926初始化和天馬屏初始化

LCD_TIANMA/2137/case/drivers/lcm/SSD1926.c 中包含了SSD1926的初始化和屏的初始化代碼

2.1 、SSD1926初始化

(1) 、TFT時序設置: (第56行)

/******************************************/

/* TFT Panel Timing Control,共10個參數 */

/******************************************/

//Horizontal Total

//HT = [((R12h_7-0) + 1) x 8 + (R13h_2-0)] pixels

//天馬屏HT=408 比亞迪屏HT=408

{REG_HORIZ_TOTAL_0 ,0x32}, //R12h

{REG_HORIZ_TOTAL_1 ,0x00}, //R13h

//Horizontal Display Period

//HDP = [((R14h_6-0) + 1) x 8] pixels

//天馬屏HDP=320 比亞迪屏HDP=320

{REG_HDP ,0x27}, //R14h

//Horizontal Display Period Start Position

//HDPS = [(R17h_2-0, R16h_7-0) + 5] pixels

//天馬屏HDPS=70 比亞迪屏=68

{REG_HDP_START_POS0 ,0x41}, //R16h

{REG_HDP_START_POS1 ,0x00}, //R17h

//Vertical Total

//VT = [(R19h_2-0, R18h_7-0) + 1] lines

//天馬屏VT=263 比亞迪屏=262

{REG_VERT_TOTAL0 ,0x06}, //R18h

{REG_VERT_TOTAL1 ,0x01}, //R19h

//Vertical Display Period

//VDP = [(R1Dh_1-0,R1Ch_7-0)+ 1] lines

//天馬屏VDP=240 比亞迪屏VDP=240

{REG_VDP0 ,0xef}, //R1Ch

{REG_VDP1 ,0x00}, //R1Dh

//Vertical Display Period Start Position

//VDPS = [(R1Fh_2-0,R1Eh_7-0)] lines

//天馬屏VDPS=13 比亞迪屏VDPS=18

{REG_VDP_START_POS0 ,0x0d}, //R1Eh

{REG_VDP_START_POS1 ,0x00}, //R1Fh

//LLINE Pulse Width

//HPW = [(R20h_6-0)+ 1] pixels

//天馬屏HPW=1 比亞迪屏HPW=2

{REG_HSYNC_PULSE_WIDTH ,0x00}, //R20h

//LLINE Pulse Start Position

//HPS = [(R23h_2-0, R22h_7-0) + 1] pixels

//天馬屏HPS=1 比亞迪屏HPS=1

{REG_HSYNC_PULSE_START_POS0 ,0x00}, //R22h

{REG_HSYNC_PULSE_START_POS1 ,0x00}, //R23h

//LFRAME Pulse Width

//VPW = [(R24h_2-0)+ 1] x HT + (R35h_2-0, RE34h_7-0) – (R31h_2-0, R30h_7-0) pixels

//天馬屏VPW=HT 比亞迪屏VPW=2*HT

{REG_VSYNC_PULSE_WIDTH ,0x00}, //R24h

{REG_FPFRAME_START_OFFSET0 ,0x00}, //R30h

{REG_FPFRAME_START_OFFSET1 ,0x00}, //R31h

{REG_FPFRAME_STOP_OFFSET0 ,0x00}, //R34h

{REG_FPFRAME_STOP_OFFSET1 ,0x00}, //R35h

//LFRAME Pulse Start Position

//VPS = [(R27h_2-0, R26h_7-0)] x HT + (R31h_2-0, R30h_7-0) pixels

//天馬屏VPS=HT 比亞迪屏VPS=HT

{REG_VSYNC_PULSE_START_POS0 ,0x00}, //R26h

{REG_VSYNC_PULSE_START_POS1 ,0x00}, //R27h

這里有一個需要注意的地方,盡管我們參照天馬屏提供的資料來設置參數,但是發現顯示圖片相對屏幕可顯示區域有點向左偏移了,我們通過調試更改參數HDPS=75,有了一個比較好的參數,如下:

{REG_HDP_START_POS0 ,0x46}, //R16h

(2) 、屏的DCLK頻率設置:(第40行和第164行)

//PCLK frequency = MCLK frequency * (PCLK Frequency Ratio + 1) / (2^20)

//PCLK Frequency Ratio = [R15Ah_3-0,R159h_7-0,R158h_7-0]

//here we have PCLK = MCLK * 0.08

{REG_PCLK_FREQ_RATIO_0 ,0xad}, //R158h

{REG_PCLK_FREQ_RATIO_1 ,0x47}, //R159h

{REG_PCLK_FREQ_RATIO_2 ,0x01}, //R15Ah

//PLL clocks setting , 80Mhz

SSD_REGWB(0x126,0x0A); //0x0a for 80Mhz

SSD_REGWB(0x127,0xC8);

SSD_REGWB(0x12B,0xAE);

SSD_REGWB(0x126,0x8A);//enable the PLL //0x8a for 80Mhz

(3) 、屏的初始化( 設置天馬屏的寄存器) :( 第194 行)

// 初始化NT39016

#define NT39016_SPI_WRITE(reg, data) spi_in(2, ((reg << 10) |(1 << 9) |data))

//初始化SPI

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x0F);//pull high 3 wire , Reset

msdelay(150);

NT39016_SPI_WRITE(0x00,0x07);

msdelay(150);

NT39016_SPI_WRITE(0x01,0x00);

msdelay(150);

NT39016_SPI_WRITE(0x02,0x03);

msdelay(150);

NT39016_SPI_WRITE(0x03,0xcc);

msdelay(150);

NT39016_SPI_WRITE(0x04,0x46);

msdelay(150);

NT39016_SPI_WRITE(0x05,0x0d);

msdelay(150);

NT39016_SPI_WRITE(0x06,0x00);

msdelay(150);

NT39016_SPI_WRITE(0x07,0x00);

msdelay(150);

NT39016_SPI_WRITE(0x08,0x08);

msdelay(150);

NT39016_SPI_WRITE(0x09,0x40);

msdelay(150);

NT39016_SPI_WRITE(0x0a,0x88);

msdelay(150);

NT39016_SPI_WRITE(0x0b,0x88);

msdelay(150);

NT39016_SPI_WRITE(0x0c,0x30);

msdelay(150);

NT39016_SPI_WRITE(0x0d,0x20);

msdelay(150);

NT39016_SPI_WRITE(0x0e,0x6a);

msdelay(150);

NT39016_SPI_WRITE(0x0f,0xa4);

msdelay(150);

NT39016_SPI_WRITE(0x10,0x04);

msdelay(150);

NT39016_SPI_WRITE(0x11,0x24);

msdelay(150);

NT39016_SPI_WRITE(0x12,0x24);

msdelay(150);

NT39016_SPI_WRITE(0x1e,0x00);

msdelay(150);

NT39016_SPI_WRITE(0x20,0x00);

msdelay(150);

事實上,我們采用了屏初始化后寄存器自己的默認參數,所以我們這里沒必要每個寄存器再寫入一次值,因為廠家提供的默認參數基本上是可以用的了,這里我們只需要修改寄存器R0eh,因為我們的屏有點閃,將這個寄存器的值改為0x6a后屏閃的現象就好了。所以只需要下面這幾條語句就夠了:

// 初始化NT39016

#define NT39016_SPI_WRITE(reg, data) spi_in(2, ((reg << 10) |(1 << 9) |data))

//初始化SPI

NT39016_SPI_WRITE(0x0e,0x6a);

msdelay(150);

(4) 、SPI 函數的修改:( 第260 行)

2137提供的spi初始化似乎有點問題,我將它改了,程序如下

#if SSD1926_GPIO_INIT

void spi_in (INT8U type, INT32U content) // 3-wire SPI

{

INT8U Bit;

INT32U compare;

INT8U cmd=0x70,data=0x72;

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x0f);//pull high 3 wire , Reset

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x0e); //GPIO0,SPENA set to low

switch(type)

{

case 0: //command

for (Bit=0; Bit<=7; Bit++)

{

compare = 1<<(7 - Bit);

if ((cmd & compare) > 0)

{

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x02|SSD2116_nReset_Hi); //1

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x06|SSD2116_nReset_Hi);

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x02|SSD2116_nReset_Hi);

}

else

{

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x00|SSD2116_nReset_Hi); //0

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x04|SSD2116_nReset_Hi);

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x00|SSD2116_nReset_Hi);

}

}

break;

case 1: //Data

for (Bit=0; Bit<=7; Bit++)

{

compare = 1<<(7 - Bit);

if ((data & compare) > 0)

{

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x02|SSD2116_nReset_Hi); // 1

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x06|SSD2116_nReset_Hi);

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x02|SSD2116_nReset_Hi);

}

else

{

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x00|SSD2116_nReset_Hi); // 0

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x04|SSD2116_nReset_Hi);

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x00|SSD2116_nReset_Hi);

}

}

break;

case 2: // 天馬屏初始化spi

for (Bit=0; Bit<=15; Bit++)

{

compare = 1<<(15 - Bit);

if ((content & compare) > 0)

{ SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x02|SSD2116_nReset_Hi); // 1

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x06|SSD2116_nReset_Hi); SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x02|SSD2116_nReset_Hi);

}

else

{

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x00|SSD2116_nReset_Hi); // 0

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x04|SSD2116_nReset_Hi);

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x00|SSD2116_nReset_Hi);

}

}

break;

case 3: // 比亞迪屏初始化spi

for (Bit=0; Bit<=23; Bit++)

{

compare = 1<<(23 - Bit);

if ((content & compare) > 0)

{

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x02|SSD2116_nReset_Hi); // 1

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x06|SSD2116_nReset_Hi);

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x02|SSD2116_nReset_Hi);

}

else

{

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x00|SSD2116_nReset_Hi); // 0

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x04|SSD2116_nReset_Hi);

SSD_REGWB(REG_GPIO_STATUS_CONTROL0,0x00|SSD2116_nReset_Hi);

}

}

break;

default:

break;

}

SSD_REGWB( REG_GPIO_STATUS_CONTROL0,0x0f);//pull high 3 wire , Reset

}

3 、需要更新的文件

除了以上的修改之外,還有需要更新一部分文件,需要更新的文件列表如下:

?

修改完畢后,將整個工程重新編譯再打包就可以生成固件了,然后就可以下載了,下載后你會看到一個已經調試完好的天馬屏上顯示的完美圖像了!

重新編譯整個工程:打開Cygwin,在LCD_TIANMA/2137/case/makefile/路徑下,輸入命令:

./case.bat

然后回車,就會重新編譯整個工程了,但編譯過程中會有模塊camera會報錯,不管它,編譯完了之后在模塊camera中(LCD_TIANMA/2137/case/apps/camera)單獨再編譯(make)這個模塊就OK了。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Linruin/archive/2009/10/13/4665749.aspx

總結

以上是生活随笔為你收集整理的天马3.5寸TFT屏调试文档的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产无限资源 | 亚洲综合影院 | 另类少妇人与禽zozz0性伦 | 欧美精品18videosex性欧美 | 三级国产在线 | 国产精品久久久精品三级 | 牛人盗摄一区二区三区视频 | 中文字幕国产亚洲 | 久操综合 | 影音先锋久久久久av综合网成人 | 色天使亚洲| 欧美精品黑人 | 国产精品主播一区二区 | 爱豆国产剧免费观看大全剧集 | 日日涩 | 中文字幕在线观看你懂的 | 日本视频在线观看免费 | 最近的中文字幕在线看视频 | 欧美丰满老熟妇xxxxx性 | 成人午夜sm精品久久久久久久 | 清纯粉嫩极品夜夜嗨av | 亚洲av无码一区二区乱子伦as | 国产精品综合久久久 | 国产国语对白 | 六月丁香婷婷综合 | 国产精品久久777777 | 精品国产无码一区二区 | 九九热视频精品在线观看 | 嫩草影院中文字幕 | 五月天婷婷在线视频 | 欧美大片xxxx | 亚洲春色另类 | 国产成a人亚洲精v品在线观看 | 奇米影视四色7777 | 日韩毛片在线播放 | 亚洲色图14p| 日本美女性高潮 | 爽爽影院在线 | 99re在线视频| 99精品视频在线看 | 亚洲午夜久久久 | 亚洲天堂网一区 | 亚洲熟女乱色一区二区三区 | 精品一区二区三区在线观看 | 日日综合网 | 国产淫片av片久久久久久 | 日本中文字幕在线看 | 欧美一级黄色网 | 日韩av在线电影 | 天天爱综合 | 国产免费啪啪 | 国产手机精品视频 | 成人在线播放视频 | 欧美视频一区二区三区四区在线观看 | 亚洲成人一区在线观看 | 日韩高清不卡一区 | 色婷婷激情五月 | 久久天| 国产精品无码专区av在线播放 | 国产精品美女久久久网av | 男生坤坤放进女生坤坤里 | 青青操操| 国产精品手机在线 | 综合久久av| av资源网在线 | 九色91porny | jizz中国少妇| 国产-第1页-浮力影院 | 饥渴少妇色诱水电工 | 日韩精品久久久久久久的张开腿让 | 日韩在线视频网 | 无码aⅴ精品一区二区三区浪潮 | 69久久夜色精品国产69 | 色爽视频 | 久久久久亚洲av无码专区首jn | 日韩欧美理论 | 国产成人啪精品 | 久草视频播放 | 亚洲女女做受ⅹxx高潮 | 伊人22综合 | 黄色刺激视频 | 欧美人与动牲交xxxxbbbb | 黄色精品视频在线观看 | 麻豆国产尤物av尤物在线观看 | 欧美另类视频在线观看 | 欧美日韩在线视频 | 熟妇人妻一区二区三区四区 | 明日花绮罗高潮无打码 | 国产日韩欧美91 | 伊人影视在线 | 国产jizz18女人高潮 | 少妇99| 美女黄色一级片 | 成年人在线免费 | 欧美另类极品videosbest最新版本 | 欧美一区二区三区免费看 | 日本在线视频一区 | 白俄罗斯毛片 | 国产毛片视频 |