上兩篇已經(jīng)總結(jié)和分享了RGB接口TFT-LCD觸摸屏的相關(guān)內(nèi)容。 本篇使用Verilog語言實(shí)現(xiàn)RGB的驅(qū)動(dòng)時(shí)序。
前面描述了很多關(guān)于時(shí)序的內(nèi)容,但其實(shí)在FPGA中實(shí)現(xiàn)RGB接口的LCD屏驅(qū)動(dòng)時(shí)序還是很簡(jiǎn)單的。 只需要實(shí)現(xiàn)行掃描、列掃描的時(shí)鐘周期控制,并且在有效區(qū)域輸出對(duì)應(yīng)像素點(diǎn)的RGB數(shù)據(jù)便可。 實(shí)現(xiàn)控制時(shí)序和測(cè)試驗(yàn)證難度不大,主要還是要在實(shí)際的項(xiàng)目中應(yīng)用,例如:實(shí)時(shí)顯示攝像頭的圖像信息等。 由于文字篇幅原因, 本篇僅對(duì)RGB接口驅(qū)動(dòng)時(shí)序的實(shí)現(xiàn)思想以及Verilog語言代碼進(jìn)行說明。
下面正式進(jìn)入本章推送的內(nèi)容。
01 時(shí)序參數(shù)
常用的TFT-LCD屏(幀率為60Hz)時(shí)序參數(shù)如下圖所示,其中,行同步信號(hào)時(shí)序的單位是時(shí)鐘脈沖,而場(chǎng)同步信號(hào)時(shí)序的單位是行周期。
對(duì)于驅(qū)動(dòng)時(shí)序而言,最重要的是確定幀率和像素時(shí)鐘,其他參數(shù)由廠商提供。本示例使用的是分辨率為800*480 的4.3寸TFT-LCD屏,使用的幀率為60Hz(每秒60幀圖像),時(shí)序參參數(shù)以及相關(guān)計(jì)算公式如下表所示:
02 時(shí)序?qū)崿F(xiàn)
對(duì)于幀率和分辨率固定的LCD屏幕驅(qū)動(dòng)時(shí)序(RGB接口),有以下特點(diǎn):
- 圖像輸出的行掃描、列掃描是周期性的邏輯
- 同步時(shí)序(SYNC)、有效信號(hào)(DE)的脈沖固定
設(shè)計(jì)思路
FPGA設(shè)計(jì)周期性的時(shí)序,可以通過計(jì)數(shù)器來控制,在計(jì)數(shù)器的對(duì)應(yīng)count數(shù)執(zhí)行相對(duì)應(yīng)的邏輯; 對(duì)于邏輯而言,需要考慮的是同步信號(hào)、數(shù)據(jù)有效信號(hào)的范圍脈沖數(shù)、以及掃描周期; 行掃描、列掃描對(duì)應(yīng)的設(shè)計(jì)思路如下(800*480 @60 TFT-LCD屏示例):
時(shí)序 | 設(shè)計(jì)思路描述 |
---|---|
行掃描 | 設(shè)計(jì)場(chǎng)掃描脈沖計(jì)數(shù)器,對(duì)PCLK脈沖計(jì)數(shù); 計(jì)數(shù)的最大值 = 行掃描周期; 計(jì)數(shù)自增條件為時(shí)鐘脈沖高電平(PCLK); 當(dāng)cnt>H Pulse width時(shí), HSYNC=1,否則為HSYNC=0; |
場(chǎng)掃描 | 設(shè)計(jì)場(chǎng)掃描脈沖計(jì)數(shù)器,對(duì)行掃描周期計(jì)數(shù); 場(chǎng)掃描計(jì)數(shù)最大值 = 場(chǎng)掃描周期; 計(jì)數(shù)自增條件為行掃描周期; 當(dāng)cnt>V Pulsewidth時(shí),VSYNC=1,否則為VSYNC=0; |
行掃描時(shí)序?qū)崿F(xiàn)
由于FPGA設(shè)計(jì)計(jì)數(shù)器時(shí),一般從0開始計(jì)數(shù),因此行掃描邏輯控制參數(shù)需要減去1,如下表所示:
邏輯控制參數(shù) | 說明 | 數(shù)值(單位:PCLK) |
---|---|---|
H_SYNC | 行同步持續(xù)時(shí)間 | 128-1 |
H_DATA_START | 行數(shù)據(jù)開始 | 216-1 |
H_DATA_END | 行數(shù)據(jù)結(jié)束 | 1016-1 |
H_PERIOD | 行掃描周期 | 1055-1 |
Verilog實(shí)現(xiàn)代碼如下:
parameter H_SYNC = 11'd127 ;
parameter H_DATA_START = 11'd215 ;
parameter H_DATA_END = 11'd1015 ;
parameter H_PERIOD = 11'd1055 ;
//行掃描控制時(shí)序
reg [10:0] h_cnt;
always @(posedge pclk) begin
if(rst_n == 1'b0) begin
h_cnt <= 11'd0;
end
else if(h_cnt == H_PERIOD) begin
h_cnt <= 11'd0;
end
else begin
h_cnt <= h_cnt + 1'b1;
end
end
assign hsync = (h_cnt > H_SYNC) ? 1'b1 : 1'b0;
assign h_index = (h_cnt > H_DATA_START) ? (h_cnt - H_DATA_START) : 11'd0;
場(chǎng)掃描時(shí)序?qū)崿F(xiàn)
由于FPGA設(shè)計(jì)計(jì)數(shù)器時(shí),一般從0開始計(jì)數(shù),因此行掃描邏輯控制參數(shù)需要減去1,如下表所示:
參數(shù) | 說明 | 數(shù)值(單位:PCLK) |
---|---|---|
V_SYNC | 行同步持續(xù)時(shí)間 | 2-1 |
V_DATA_START | 行數(shù)據(jù)開始 | 216-1 |
V_DATA_END | 行數(shù)據(jù)結(jié)束 | 1016-1 |
V_PERIOD | 行掃描周期 | 1055-1 |
Verilog實(shí)現(xiàn)代碼如下:
parameter v_SYNC = 11'd1 ;
parameter v_DATA_START = 11'd34 ;
parameter v_DATA_END = 11'd514 ;
parameter v_PERIOD = 11'd524 ;
//場(chǎng)掃描控制時(shí)序
reg [10:0] v_cnt;
always @(posedge pclk) begin
if(rst_n == 1'b0) begin
v_cnt <= 11'd0;
end
else if(v_cnt == v_PERIOD) begin
v_cnt <= 11'd0;
end
else if(h_cnt == H_PERIOD) begin
v_cnt <= v_cnt + 1'b1;
end
else begin
v_cnt <= v_cnt;
end
end
assign vsync = (v_cnt > v_SYNC) ? 1'b1 : 1'b0;
assign v_index = (v_cnt > v_DATA_START) ? (v_cnt - v_DATA_START) : 11'd0;
完整Verilog代碼如下:
module parallel_rgb_control
#
(
parameter H_SYNC = 11'd127 ,
parameter H_DATA_START = 11'd215 ,
parameter H_DATA_END = 11'd1015 ,
parameter H_PERIOD = 11'd1055 ,
parameter v_SYNC = 11'd1 ,
parameter v_DATA_START = 11'd34 ,
parameter v_DATA_END = 11'd514 ,
parameter v_PERIOD = 11'd524
)
(
input wire pclk ,
input wire rst_n ,
output wire hsync ,
output wire [10:0] h_index ,
output wire vsync ,
output wire [10:0] v_index ,
output wire de
);
//行掃描控制時(shí)序
reg [10:0] h_cnt;
always @(posedge pclk) begin
if(rst_n == 1'b0) begin
h_cnt <= 11'd0;
end
else if(h_cnt == H_PERIOD) begin
h_cnt <= 11'd0;
end
else begin
h_cnt <= h_cnt + 1'b1;
end
end
assign hsync = (h_cnt > H_SYNC) ? 1'b1 : 1'b0;
assign h_index = (h_cnt > H_DATA_START) ? (h_cnt - H_DATA_START) : 11'd0;
//場(chǎng)掃描控制時(shí)序
reg [10:0] v_cnt;
always @(posedge pclk) begin
if(rst_n == 1'b0) begin
v_cnt <= 11'd0;
end
else if(v_cnt == v_PERIOD) begin
v_cnt <= 11'd0;
end
else if(h_cnt == H_PERIOD) begin
v_cnt <= v_cnt + 1'b1;
end
else begin
v_cnt <= v_cnt;
end
end
assign vsync = (v_cnt > v_SYNC) ? 1'b1 : 1'b0;
assign v_index = (v_cnt > v_DATA_START) ? (v_cnt - v_DATA_START) : 11'd0;
assign de = ( (h_cnt >= H_DATA_START) && (h_cnt < H_DATA_END) ) && ( (v_cnt >= v_DATA_START) && (v_cnt < v_DATA_END) );
endmodule
05 文章總結(jié)
對(duì)于RGB接口的TFT-LCD屏的時(shí)序驅(qū)動(dòng)代碼還是較為簡(jiǎn)單的。 使用文字描述實(shí)際的應(yīng)用并且讓人容易理解,還是很困難的。 基于此,本篇僅僅只是分享了RGB接口周期時(shí)序的實(shí)現(xiàn),對(duì)于具體的數(shù)據(jù)輸出顯示的應(yīng)用并未說明。 倘若有兄弟想了解實(shí)際應(yīng)用,可以添加杰克的微信號(hào)來交流。
-
lcd
+關(guān)注
關(guān)注
34文章
4520瀏覽量
171647 -
接口
+關(guān)注
關(guān)注
33文章
9005瀏覽量
153782 -
觸摸屏
+關(guān)注
關(guān)注
42文章
2387瀏覽量
118583 -
RGB
+關(guān)注
關(guān)注
4文章
807瀏覽量
59955 -
時(shí)序
+關(guān)注
關(guān)注
5文章
398瀏覽量
37971
發(fā)布評(píng)論請(qǐng)先 登錄
怎樣通過STM32的普通IO口模擬8080總線來控制TFT-LCD的顯示
TFT-LCD的8080并口時(shí)序簡(jiǎn)析
TFT-lcd液晶屏接口類型之ttl接口相關(guān)資料分享
TFT-LCD驅(qū)動(dòng)IC設(shè)計(jì)

S3C2440A 驅(qū)動(dòng)RGB 接口TFT LCD的研究
TFT-LCD系統(tǒng)時(shí)序控制模塊的設(shè)計(jì)
LCD控制及觸摸屏接口設(shè)計(jì)

微雪電子7寸電容觸摸彩色LCD顯示模塊簡(jiǎn)介
微雪電子10.1寸 電容觸摸 彩色 LCD 顯示模塊簡(jiǎn)介
ATK-7 TFT LCD電容觸摸屏模塊測(cè)試實(shí)驗(yàn)的工程文件免費(fèi)下載
如何使用STM32 HAL庫驅(qū)動(dòng)TFT-LCD實(shí)現(xiàn)手畫板功能

LCD | TFT LCD 觸摸屏的選擇

評(píng)論