OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 31|回复: 0

[XILINX] tft lcd 1024*600 hv同步模式 老是不对

[复制链接]

21

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-9-5
在线时间
22 小时
发表于 5 天前 | 显示全部楼层 |阅读模式
1金钱

module lcd_driver(
    input                lcd_pclk,    //时钟
    input                rst_n,       //复位,低电平有效

    input                clk_200m,

    //RGB LCD接口
    output  reg          lcd_de,      //LCD 数据使能信号
    output  reg          lcd_hs,      //LCD 行同步信号
    output  reg          lcd_vs,      //LCD 场同步信号
    output  reg          lcd_bl,      //LCD 背光控制信号
    output               lcd_clk,     //LCD 像素时钟
    output  reg          lcd_rst,     //LCD复位
    output  reg  [23:0]  lcd_rgb      //LCD RGB888颜色数据
    );

// 7' 1024*600   
parameter  H_SYNC_7016   =  11'd20;     //行同步
parameter  H_BACK_7016   =  11'd140;    //行显示后沿
parameter  H_DISP_7016   =  11'd1024;   //行有效数据
parameter  H_FRONT_7016  =  11'd160;    //行显示前沿
parameter  H_TOTAL_7016  =  11'd1344;   //行扫描周期

parameter  V_SYNC_7016   =  11'd3;      //场同步
parameter  V_BACK_7016   =  11'd20;     //场显示后沿
parameter  V_DISP_7016   =  11'd600;    //场有效数据
parameter  V_FRONT_7016  =  11'd12;     //场显示前沿
parameter  V_TOTAL_7016  =  11'd635;    //场扫描周期



//reg define
reg  [10:0]  h_cnt  ;
reg  [10:0]  v_cnt  ;
reg  [10:0]  pixel_xpos;  //当前像素点横坐标  
reg          de_reg;
//main code

//RGB LCD 采用DE模式时,行场同步信号需要拉高

assign  lcd_clk = lcd_pclk;   //LCD像素时钟


always @ (posedge lcd_pclk or negedge rst_n) begin
    if (!rst_n) begin
        lcd_bl  <= 1'b1;
        lcd_rst <= 1'b1;
        lcd_de  <= 1'b0;
    end else begin
        lcd_bl  <= 1'b1;
        lcd_rst <= 1'b1;
        lcd_de  <= 1'b0;
    end
end


//行场信号的启动边沿是同时动作的
//行计数器对像素时钟计数
always@ (posedge lcd_pclk or negedge rst_n) begin
    if(!rst_n)
        h_cnt <= 11'd0;
    else begin
        if(h_cnt == H_TOTAL_7016 - 1'b1)
            h_cnt <= 11'd0;
        else
            h_cnt <= h_cnt + 1'b1;           
    end
end

//场计数器对行计数
always@ (posedge lcd_pclk or negedge rst_n) begin
    if(!rst_n)
        v_cnt <= 11'd0;
    else begin
        if(h_cnt == H_TOTAL_7016 - 1'b1) begin
            if(v_cnt == V_TOTAL_7016 - 1'b1)
                v_cnt <= 11'd0;
            else
                v_cnt <= v_cnt + 1'b1;   
        end
    end   
end


always @ (posedge lcd_pclk or negedge rst_n) begin
    if (!rst_n) begin
        lcd_hs  <= 1'b1;  
    end else if(    h_cnt == ( H_TOTAL_7016 - 1 )   ) begin
        lcd_hs  <= 1'b0;  
    end else if(    h_cnt == ( H_SYNC_7016 - 1  )  ) begin
        lcd_hs  <= 1'b1;  
    end
end

always @ (posedge lcd_pclk or negedge rst_n) begin
    if (!rst_n) begin
        lcd_vs  <= 1'b1;  
    end else if( (v_cnt == ( V_TOTAL_7016 - 1 ))&&( h_cnt == H_TOTAL_7016 - 1'b1 )  ) begin
        lcd_vs  <= 1'b0;  
    end else if(    v_cnt == ( V_SYNC_7016 - 1  )&&( h_cnt == H_TOTAL_7016 - 1'b1 ) ) begin
        lcd_vs  <= 1'b1;  
    end
end





//==下面都是搞输出RGB24值的计算

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-3 02:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表