版主
主题
回帖0
积分10609
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
好一段时间没有过来了!因为太多的时间去开发和调试上面真是没办法。5 a a- ?% p" w5 I' H9 I5 M8 Y \
现在我发些屏的驱动程序给大家这个是NEC的VGA屏是模拟屏所以只能显示RGB三色只是测屏用的呵呵
2 z, l, l' ?9 r3 `' v% v# c8 Z3 m3 m" S( z W& k5 o
6 ], ]/ M# W# n
5 N6 L! {' ]8 O! r/ g+ Imodule NL6448AC30_09( gclk,! f- Q4 {/ v" M! E. P) r
tft_clk,3 P% {. |6 i: q/ b
hsync,
0 L- I$ @! k% k$ Y$ ]6 ] vsync,
. H f5 {. I% a1 c9 W& S DE,
8 a' Y6 g+ F5 `- ] R,% C# O) v. ^- ~6 Z5 C v6 J- P9 `
G,
. n+ U6 i! k* N! [ B );
% M3 \3 Z- W% b3 O* b3 Z, R, } O! m9 S" Z, p/ y) S3 d
input gclk;
* [: W' t F1 g& Joutput tft_clk;
* I9 f+ k+ l" q5 [5 Zoutput [1:0]R,G,B;$ U5 s: o& ?) y
reg [1:0]R,G,B;
1 v' M3 r) X1 C. Y: k- coutput hsync,vsync,DE;
% t$ n( m- H3 v Greg hsync,vsync,DE;! V3 c: S- D- ]- D. r: ~
reg [9:0]clk_count,hsync_count;$ {, i: v' q5 |1 \1 i$ Z
reg div_count;
1 ^/ V( Z, s4 C" B4 u) M
8 ?/ o& m( o# i/ T2 ]1 c3 sassign tft_clk = div_count;6 Y7 ?4 }3 R' y) Z. V9 N6 S
//分频程序对50MHZ产生25MHZ分频供LCD时钟所用: \6 x, A8 z0 e+ X
///////////////////////////////////////////////////////////////////////////////////////////////////////
, Z8 @! T f9 y+ D5 Ralways @(posedge gclk) //gclk全局时钟50MHZ //' s8 G" W& \9 P
begin //, F. }' z0 p- F, o" T3 y4 t
div_count <= div_count + 1'b1; //将50MHZ 2分频后得到25MHZ供LCD时钟所用 //
6 o% `0 ^7 {& }+ Y///////////////////////////////////////////////////////////////////////////////////////////////////////
8 d% B% C3 [ d& v3 w) y
/ U) o: l0 E @$ n- L$ I- A if(hsync_count < 2)vsync <= 1'b0; //产生场频时钟“在行时钟开始的头2位行时钟线为低电平其它为高电平”
$ Y! X! B; A5 Z# _ else vsync <= 1'b1; , V, T) { R: l( v) D$ |- {- s
4 M5 _, I! Q% s* rend
6 q# `; {( a( c0 a' V
9 y6 U" @- p5 w( i( J' U2 kalways @(posedge div_count) //TFT LCD 用时钟线 //: x$ P9 O% m4 N+ Y/ G" p0 P& w4 H7 w
begin //4 r- _3 u: @/ q+ D( B
//
+ u8 U: H9 l2 Y( x if(clk_count < 799)clk_count <= clk_count + 1'b1; //时钟计数器用来产列时钟产生条件 //
9 Z* n" e6 ^: A+ ~1 y, U else clk_count <= 10'b0000000000; //( s& | w( p) M8 g( r& h$ D; \/ k
//
( d6 Q0 W+ J6 X0 Zend $ z7 ^+ w: q9 ~
" C n$ z. _# g% ], R! N) v
always @(posedge tft_clk)
+ S+ i1 D2 s- A* n# {* Fbegin* Y8 T7 p, a4 e. E7 o/ [6 f( h
if(clk_count > 142 && clk_count < 783)DE <= 1'b1; // && hsync_count > 32 && hsync_count < 513 //
5 p, a+ q1 j/ y6 o: h9 j5 g3 R else DE <= 1'b0; //
1 r2 j% b1 z3 F7 t3 | H, S //
1 Z/ @; @0 l0 x: F. Z2 d% [ //& T. r! W0 V8 k
if(clk_count > 94 && clk_count < 799)hsync <= 1'b1; //产生行时钟线“一个行的低电平包含有96个时钟脉冲” //) l' x) r8 n+ w* i- ^* I
else hsync <= 1'b0; //' l$ y) s- w$ ?* \4 p4 c; v
//
* ^, o; y2 g, t$ r( {/ Aend //
0 D! e$ n# W& W7 q // Y7 r' {' V) l: m
//8 l& }/ I2 u) M( t- g' r
always @(posedge hsync) //0 Y4 H8 H |" ]! u5 g; {
begin //! o; Z6 ?- T; U' h
if(hsync_count < 524)hsync_count <= hsync_count + 1'b1; //对行进行计数用来产生场时钟制造条件 // 6 A# o7 ~; H: k& \6 d) X. v+ g
else hsync_count <= 10'b0000000000; //一个场含有525个行时钟,当行计数器不大于525的时候加1 否则清零 //3 g4 w4 Z: p- D7 O) b6 y' {- _3 x
//; T7 m7 t9 ~+ X6 l3 W# S5 j
end //2 g- r9 `; B2 e
//3 |! h* q, f8 H
//- Z+ U% U+ `# n1 A& t2 ?" F6 P; j
$ [! m& I* a% K0 b! V# C# N3 h0 N
1 S; Z2 A" f, E$ c/ Y1 }
[email=always@(posedge]always@(posedge[/email] tft_clk) 3 Q: D h$ ^7 i, T6 ?
// black control
, T8 W" U& N$ [+ \1 r, hif((clk_count > 142) && (clk_count < 251)) , X! }- c" Q- ?
begin + I1 L- [0 t0 d" P& _$ F9 l7 f$ H
R[1:0] <=0;
% d2 j: |2 e$ D3 a" Z G[1:0] <=0; ; M" a$ n% l5 [" _$ F5 ]+ f
B[1:0] <=0;
3 s9 @! {+ h& {* L$ x* b# ] end , N& M) Z# a9 g8 }
else
, V; \4 E/ g6 _" H# `6 P0 |% n begin ; O. `4 R+ O# G4 [
if((clk_count > 252) && (clk_count < 358))
6 A3 V9 b' O, X% h$ ]7 |" z! I begin 7 X& G" a! @- b! w; c1 x! @ r
R[1:0] <=3; t/ s( S+ @* X
G[1:0] <=0; 7 T8 C3 A( T. S9 V8 Q) f
B[1:0] <=0;
; n( _- s2 g( N/ j5 x* r9 p$ y end 4 ?- S, P; N, |) L" |4 v
else% i! `( u4 w Q! x9 j, d
if((clk_count < 359) && (clk_count < 465)) & \" z! [% J3 S
begin
1 h. G! A$ P. S: D" s R[1:0] <=0;
* w! B* T ?7 Y* o9 g6 u! f0 t6 i G[1:0] <=3; 5 B: t c# B! H9 t, f4 y' v
B[1:0] <=0;
6 g% D; r' A" W. U2 X! H, |9 H end
, k# U" B7 u! ] else 6 V+ P& I& Q# ]- G ]' Z4 s
if((clk_count < 466) && (clk_count < 572) ) & S9 s9 r# |; h4 c l5 b2 W
begin
1 ~' v' Q5 i3 ^+ {( T3 [ R[1:0] <=0; 8 ^% n8 {6 H+ J5 w# |
G[1:0] <=0;
8 b/ O- A2 j2 a& `1 q: b1 r B[1:0] <=3; 6 ~: Z4 v: \9 F# i" R$ }2 P) x
end # k% h* }; h8 P& l
else X+ `# |3 m8 |; \
begin
; q& p# w* o! t' t' _ R[1:0] <=3; : s1 R& P5 n0 F/ _1 b) s& p
G[1:0] <=3; 4 s: [' B7 M' h/ p3 T3 E
B[1:0] <=3;
5 H8 e5 O# s& g+ ]/ N end ) w0 u) `+ U6 J7 T! ]( o
end
2 w3 u3 S' R4 L& e6 U) D1 O& Y7 t; W; I1 ~ [9 N+ `0 H1 q
endmodule
. m" s0 H5 M3 x+ E& B# X; E l
[ 本帖最后由 kenson 于 2009-2-27 21:15 编辑 ] |
|