版主
主题
回帖0
积分10609
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
好一段时间没有过来了!因为太多的时间去开发和调试上面真是没办法。
( I' ~* P. w% N现在我发些屏的驱动程序给大家这个是NEC的VGA屏是模拟屏所以只能显示RGB三色只是测屏用的呵呵
8 H4 f& M' B5 u8 r0 G9 |5 {5 X* @) e$ y6 J2 I0 \, |& n
, ?; ~, N8 ?1 V4 L# a1 ]
3 G1 S, B/ T7 ]4 n" z* @
module NL6448AC30_09( gclk,9 E( G% a0 N1 D) S5 n0 X4 G
tft_clk,* a. w- m% ~/ t# A; U: c: X: ~
hsync,
: C0 I1 N" {$ n. S vsync,
5 o7 |4 P8 v" }+ Q$ A: q DE,3 `: K! Z- _$ G6 A* n8 k5 Y
R,
( a! Z' h2 @4 o" u G,
: ?. E. ]) E" b# ~) V B );
* v: O& u% K7 I
0 B: Q9 c9 y; ?: c5 h/ _input gclk;
+ V7 l! d3 ^+ C$ coutput tft_clk;
3 [; R- b2 X; s5 I! \) `/ x$ R8 \output [1:0]R,G,B;" h% Y$ h+ z# j, t8 Y
reg [1:0]R,G,B;
' s, f6 S5 @1 r& V. s2 poutput hsync,vsync,DE;
. n, p& l2 m5 m$ }reg hsync,vsync,DE;2 p3 Q& P$ N j# P d& v4 W) U
reg [9:0]clk_count,hsync_count;
; f& i C8 V& B5 s2 q3 d5 xreg div_count;: d& k) [5 e+ {% R5 i, [* k
/ ^1 ?/ x! D- S5 _4 j( Y
assign tft_clk = div_count;
6 p7 d, p7 {; i//分频程序对50MHZ产生25MHZ分频供LCD时钟所用( O7 W* d, `4 S; W- p
///////////////////////////////////////////////////////////////////////////////////////////////////////
' N: d# \$ F. ^% s/ malways @(posedge gclk) //gclk全局时钟50MHZ //+ f4 _- V4 ^5 \, I3 `; z4 }& g; R
begin //& x$ w: e7 S. N+ i* f/ ]! P
div_count <= div_count + 1'b1; //将50MHZ 2分频后得到25MHZ供LCD时钟所用 //
4 M/ `' H" [) L# R/////////////////////////////////////////////////////////////////////////////////////////////////////// # ?' r# D* |! X1 y. d
/ W( H; z+ s' t1 k# D7 Q if(hsync_count < 2)vsync <= 1'b0; //产生场频时钟“在行时钟开始的头2位行时钟线为低电平其它为高电平”
, u1 d1 ^0 j; s2 i% Y# ? else vsync <= 1'b1; * L, e, L* W& b3 g% m( t# W
. C- E6 i/ _. z) N6 U, tend - A' H/ f$ K7 K8 j
- D: Y- z$ X, H1 Talways @(posedge div_count) //TFT LCD 用时钟线 //
6 W/ M; }* e1 I3 y7 ~2 |begin //
2 N; i3 o J W: L //; |% A8 E* s3 c( X$ \
if(clk_count < 799)clk_count <= clk_count + 1'b1; //时钟计数器用来产列时钟产生条件 //# v* T' ^& ?3 y+ e+ g
else clk_count <= 10'b0000000000; //
$ [: Q" ~" P, K7 E //
$ k$ j! p$ e& E7 Q9 kend
5 I8 L! x! b7 H$ |
! K0 @; P' C0 M) b$ v, `9 l- U, ]always @(posedge tft_clk)
" {% U, c5 v, a3 V* _' Hbegin
6 c: X( D k. U4 Y1 G2 k if(clk_count > 142 && clk_count < 783)DE <= 1'b1; // && hsync_count > 32 && hsync_count < 513 //
4 q6 Z) q6 D: P v else DE <= 1'b0; //
8 P; l4 Q, T0 Q- R" Z1 e/ u //
0 L8 N+ H. i1 A6 a( d7 t7 o //
, ~# e, z j' @9 U8 @: d8 ?: T3 p, E if(clk_count > 94 && clk_count < 799)hsync <= 1'b1; //产生行时钟线“一个行的低电平包含有96个时钟脉冲” //
1 |( A5 b! b0 g! W else hsync <= 1'b0; //
3 K* {& D% t ~ // i9 s3 o3 @9 E" M; K/ w& F
end //: _1 _2 P* o! k! `+ [: R( g0 k' R
//
# P* ?9 [6 h! S: P& Q //, D3 {# K7 E8 r' B' Y4 w- f$ P, ~
always @(posedge hsync) //$ x3 d/ J3 x3 \' P% d0 `7 _5 z4 Q
begin //
# p! m5 o, ]6 A8 Q8 N% R: R2 p; W8 O if(hsync_count < 524)hsync_count <= hsync_count + 1'b1; //对行进行计数用来产生场时钟制造条件 //
; n8 f. d' n( C$ l9 e else hsync_count <= 10'b0000000000; //一个场含有525个行时钟,当行计数器不大于525的时候加1 否则清零 //1 L1 |0 {; M8 C; Y7 \6 p
//
! k: m; s5 S4 Cend //% O! v2 b) u0 [- |& C/ H7 b
//
$ u$ l% ^' v, C7 p4 K, K7 Q8 J //
6 W R& j' V! I7 ?
: s: t% h5 |7 F" M- v9 Y N8 C/ J7 C$ h7 F
[email=always@(posedge]always@(posedge[/email] tft_clk) ; y. d& |, W @- j$ F
// black control
g( e8 P) n( Fif((clk_count > 142) && (clk_count < 251))
$ u8 G8 `. @( W+ W8 T4 V5 y% n begin * ~1 d2 M' ^ R( t
R[1:0] <=0;
4 S X+ ~& k* ~0 }* s" Z. p& C G[1:0] <=0; # ^! S0 o/ \' y* U m8 T! Q
B[1:0] <=0; ; s% x- q p2 u/ E
end 1 p8 @, |; R* Q; t, R, I/ E
else
. ^3 i7 j- S- F5 q begin " y9 F. O9 U* r) ~" u! F
if((clk_count > 252) && (clk_count < 358)) . g. j- K; Y2 S5 ?0 Z$ c0 \4 ~
begin $ q) z+ `) u$ a1 g* n
R[1:0] <=3; 6 P! L; C1 b7 W3 b* P( K4 U
G[1:0] <=0;
( v" Z. H0 _& v B[1:0] <=0; & q( a; l: g0 |! ^, s2 w* m2 N. ]" k
end 2 U& ]6 R" y+ A1 M: {
else& }; n* b" [% c; k: q' K
if((clk_count < 359) && (clk_count < 465))
6 s! G% K8 C( j5 ~& Z: f, B8 v6 h begin . u' l5 y6 D( o. r$ |) Z. b' |
R[1:0] <=0;
" G% a8 w0 q0 a G[1:0] <=3;
6 S, n$ x7 Q1 ^) A3 D1 Z! e B[1:0] <=0; " o0 B5 g, b, t C3 l0 j
end * v; T( s7 x, t5 x
else + t- {. z: ~7 h3 p
if((clk_count < 466) && (clk_count < 572) )
y" _: Z8 j( _ begin 7 z6 F( h8 n' s% h8 t
R[1:0] <=0; + Z2 N6 X# L9 f2 f. k! I! ]: j
G[1:0] <=0;
' B( G9 }$ A$ S( s2 I B[1:0] <=3;
8 H. A6 |2 |/ x9 q, |; w) l8 F6 _ end . \2 Z! D% K. U! Q& g7 T
else
3 j% L' o) b) E7 v8 @. ` begin 2 f1 U4 v& J; c$ ~+ k+ a) V) w* n
R[1:0] <=3;
) X7 \ c [$ Z6 Q0 w2 } t2 h G[1:0] <=3;
: H7 @, Y( r0 i B[1:0] <=3; ; E' M5 f; @# V( H! c7 i4 b0 `
end
( T$ U$ _: R% \+ o$ y+ uend 2 J* W. w3 @1 G m! Y" N: q& X4 x
2 v! K5 C; w0 W. ?1 e1 wendmodule
# c1 e7 n L# _2 Z* J; ?+ u
- n# e9 i) a$ f: {$ H3 x[ 本帖最后由 kenson 于 2009-2-27 21:15 编辑 ] |
|