简介
前面将了高速ADC并口adc的驱动,理论上应该讲解一下数据的存储、应用等,关于存储方面可以参考我之前的博客,比如写DDR3、写SDRAM,这里的DDR3在我调试过的板卡有双片DDR3和单片DDR3等,分别支持1:2和1:4模式,本篇文章不讲解这部分,主要讲解以下显示的内容,关于RGB接口的TFT屏幕,大家应该接触的比较多,比如4.3寸、5寸、7寸等更大的,目前我调试的位正点原子的4.3寸屏幕,给大家上一个彩条图片:
代码
LCD的驱动时序图就不放了,基本上就是数据使能信号、行场同步信号、背光控制信号、像素时钟、RGB565颜色数据等等信号的驱动讲解,这部分的东西可以百度搜以下,主要给大家简单讲解一下代码和过程,这个基本例程主要时彩条展示模块,驱动模块,以及PLL IP Core组成。
下面主要是DRV模块的代码:
// 命名规范: drv_xxx 为驱动模块 ctr_xxxx: 为控制模块 top_xxx:为顶层文件
module drv_tft43_m(
input clk, //这例的clk 是通过pll分频之后输出的时钟
input rst_n, //低电平复位
output tft43_deb,
output tft43_hsync,
output tft43_vsync,
output reg tft43_black,
output tft43_clk,
output [15:0] tft43_rgb,
output reg tft43_reset
);
//------------这里采用参数定义利于修改-----------------------------------
parameter tft43_h_sync = 11'd41;
parameter tft43_h_back = 11'd2;
parameter tft43_h_aera = 11'd480;
parameter tft43_h_tota = 11'd525;
parameter tft43_v_sync = 11'd10;
parameter tft43_v_back = 11'd2;
parameter tft43_v_aera = 11'd272;
parameter tft43_v_tota = 11'd286;
//---------------------------------------------------------------------
//主要需要控制的是行场信号的时序,关于tft屏幕的消影其他的暂时不讲解,先看代码的处理。
// ______|--------------------------|______|-------------------------------|____
//_______|------|__|-------|__|-----|______|-----|__|-----|__|-----|__|----|____
/*简单的画一下行场信号的控制时许图,不是很标准,但是可以反应时序,基本的意思是说,比如tft刷新一行场往下走一个,比如有两个计数器,h_reg,v_reg; 当h_reg== 525时,v_reg才加一个,知道v_reg == 286时,就刷新满一个屏幕了,就是上述图片看到的景象。
*/
always@ (posedge clk) begin
if(!rst_n)
h_reg<= 'd0;
else if(h_reg== tft43_h_tota - 1'b1)
h_reg<= 'd0;
else
h_reg<= h_reg+ 1'b1;
end
always@ (posedge clk) begin
if(!rst_n)
v_reg<= 'd0;
else if(v_reg >= tft43_v_tota -1)
v_reg<= 'd0;
else if(h_reg== tft43_h_tota - 1)
v_reg <= v_reg + 1;
end
always@ (posedge clk) begin
if(!rst_n)begin
tft43_reset<=0;
tft43_black<=0;
end
else begin
tft43_reset<=1;
tft43_black<=1;
end
end
endmodule
/*
基本的代码就在这里了,关于例程后续会公布的,主要理解以下设计思路,
关于tft43_h_aera 和tft43_v_aera 参数定义的就是tft屏幕的显示范围,比如4.3寸的屏幕就是480*270
*/
关于显示部分的内容就先暂时这么多吧,后期有需要,则会继续补充。