版主
主题
回帖0
积分10609
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
好一段时间没有过来了!因为太多的时间去开发和调试上面真是没办法。 j5 G3 X* o% X
现在我发些屏的驱动程序给大家这个是NEC的VGA屏是模拟屏所以只能显示RGB三色只是测屏用的呵呵
/ h3 S4 k$ L2 G9 R! A
0 k; Z |& e# X0 K$ e" D% j5 p
0 J3 I, u' H7 f0 s" z# p7 W
* G# ^! B5 |% N* V4 _8 ~module NL6448AC30_09( gclk,/ m! h# ]$ `, N5 v+ {% [' T
tft_clk,
2 f9 Z% J8 A. G8 V6 u" A hsync,# Z3 r7 L0 U3 U- t
vsync,) y2 c- X8 J- h9 k1 N, \
DE,
5 w0 u2 O! S+ t/ o- n+ e R,. j( m- W/ N, C$ s- ^
G,
' K, N4 Q1 M& _1 Q6 ` B );
9 H/ P& ` [. S( t/ p* [* p; \. ?0 @& e, a3 r: V: `) T
input gclk;5 o! g2 o7 V, F+ `8 ^
output tft_clk;
( A" D. K, F4 U, f4 p# Koutput [1:0]R,G,B;+ U$ y) _3 ~& p' a, ~& Z
reg [1:0]R,G,B; M( R! ?7 j7 s: h- W* O4 f
output hsync,vsync,DE;* [# H8 j: s Q# a/ O) N& I& e
reg hsync,vsync,DE;) `8 b( n7 w3 G+ R6 `) [
reg [9:0]clk_count,hsync_count; H1 I* P( g& g1 X
reg div_count;
+ f* s; m# U' \0 } i8 I& ]& y3 D! |# r, ~- ^ _9 P: N
assign tft_clk = div_count;
6 X' D8 }2 w6 h- O! C& g4 I/ j//分频程序对50MHZ产生25MHZ分频供LCD时钟所用
5 k1 e a( l1 E" ~$ G: v. @* K///////////////////////////////////////////////////////////////////////////////////////////////////////1 ], o6 S4 c5 Q0 d
always @(posedge gclk) //gclk全局时钟50MHZ //
" h7 L' Z" R3 ~6 q% Vbegin //% i {( O R; h6 |4 k
div_count <= div_count + 1'b1; //将50MHZ 2分频后得到25MHZ供LCD时钟所用 // r1 ~$ y4 L9 B; f+ q0 k( R* n3 r
/////////////////////////////////////////////////////////////////////////////////////////////////////// 3 Z& R, a S8 R1 j) G$ a- ~7 q
% c9 y/ t4 u2 k" H if(hsync_count < 2)vsync <= 1'b0; //产生场频时钟“在行时钟开始的头2位行时钟线为低电平其它为高电平” 0 K2 y& P0 f2 D$ a3 G" e) ^- s/ X
else vsync <= 1'b1;
# `, ~/ R7 O! J* w8 t/ P 1 }+ |3 V, N. \
end T0 p- S( i0 P7 u
, A2 v; X" w$ k5 Q) l
always @(posedge div_count) //TFT LCD 用时钟线 //
3 S+ P3 W4 [ s0 I4 N v) E# tbegin //& h6 {6 S5 w9 @5 S
//# j9 c/ l4 Q6 K j& X: t' P
if(clk_count < 799)clk_count <= clk_count + 1'b1; //时钟计数器用来产列时钟产生条件 //' Z' W# y% {6 `2 j, g
else clk_count <= 10'b0000000000; //6 A0 ?) o7 B. _/ u( w4 R
//
$ A) ?( z1 O- W* p! `* H6 [end 9 X) v- b. F0 `) {' D _* U
' K! Q' v7 K2 lalways @(posedge tft_clk)0 f- N7 ^6 O* c6 t
begin
: z0 ~) U$ y! E if(clk_count > 142 && clk_count < 783)DE <= 1'b1; // && hsync_count > 32 && hsync_count < 513 //
4 O2 L1 a9 m1 ^" X9 ^2 d else DE <= 1'b0; //
$ {5 r7 F" o- D+ o //
: n- d1 R7 k5 K! k3 i" t //
# H1 d1 n3 c6 X5 d& u" q5 r if(clk_count > 94 && clk_count < 799)hsync <= 1'b1; //产生行时钟线“一个行的低电平包含有96个时钟脉冲” //
. S$ k+ y( d+ l5 j else hsync <= 1'b0; //4 l/ w) V' @9 l; E
//% C1 d: B6 M7 f
end //( q) ]/ |8 R# h0 m6 }0 J$ }
//3 q! |5 c3 U; V$ k+ Q$ H# u
//6 \0 y: T N# O; q- _; X. x2 Q
always @(posedge hsync) //
7 U( B6 {9 O( lbegin //
6 t+ R, o& ~7 z7 f. x7 f. W5 _! d if(hsync_count < 524)hsync_count <= hsync_count + 1'b1; //对行进行计数用来产生场时钟制造条件 // ) v+ W* v, X$ [) k. I: ^; M
else hsync_count <= 10'b0000000000; //一个场含有525个行时钟,当行计数器不大于525的时候加1 否则清零 //1 R3 i2 t8 Z& F' C
//2 N/ ~8 L1 t( B# v
end //
+ d/ }+ c: T D1 K //4 ~6 e" ~6 \2 l; o
//
) a& M0 \3 |# @7 E" m) e+ t9 b
. J; P0 [4 j5 t/ I; b: C
; _9 h, {9 ]4 ?# v! J v[email=always@(posedge]always@(posedge[/email] tft_clk)
1 V2 o5 w2 }' s4 Y// black control
$ e7 n! o/ Q5 ^% V g1 Pif((clk_count > 142) && (clk_count < 251))
3 A. B4 Y. K! M0 L D( x0 v begin 6 V |; j3 L R! V+ L1 A
R[1:0] <=0;
7 L; }6 t+ b. X$ `0 I% x | G[1:0] <=0; ! R) j) \* A7 U1 ^! u6 |
B[1:0] <=0; z, f3 {3 Y/ L- p
end / W Z j& R2 s# Y% S0 P
else + b) I9 ^0 P: C7 ?$ y
begin - j4 q, k% x. {
if((clk_count > 252) && (clk_count < 358)) b( s3 Z p/ y2 T9 ~( p" c
begin 5 F( H& b; [6 o( W o* U( ^* U
R[1:0] <=3; 2 Z& n" y2 ~' A6 `
G[1:0] <=0; 4 k+ A5 Z; b* p: p9 G
B[1:0] <=0;
- Z. t( F* u& v( e, d T end $ E5 k! f: U* ]. V3 S# S
else
3 f% Q) {" d8 z1 S/ ~9 ?# L( Z if((clk_count < 359) && (clk_count < 465)) * T. x2 N; `, @3 _
begin 6 Y5 P8 K8 G4 V" ~9 D- x
R[1:0] <=0;
( l7 }/ v3 w( T$ D, p# ~ G[1:0] <=3;
?3 A. d6 n6 z, W' c3 B6 d B[1:0] <=0; ! l8 R5 W* U f
end 6 S; u; d1 P' ]1 k" X) ] y _$ ^
else : x& H5 K2 o3 x" N% a; F8 N) ^
if((clk_count < 466) && (clk_count < 572) )
. F8 k. c6 e' A8 e$ f" Y% p, Y8 M begin ; z1 N9 }3 Q. h5 M( ^7 ~" ?6 E) ^
R[1:0] <=0;
& X* a' L0 G, \- y G[1:0] <=0;
+ K4 g' X0 `' j! ^ B[1:0] <=3; , h* ~+ P5 {1 X: z7 h
end
: q0 U4 `4 ^' Q" M* c& J else
: S, n+ G# {6 \$ F2 j# e8 S begin
( X* J* l/ S& Z% E0 C R[1:0] <=3;
: e! Q) u) i$ x# g G[1:0] <=3; 6 K6 k- F) q$ E5 M
B[1:0] <=3; + m5 B* y% {8 C6 }) s8 V! |
end 1 v3 I; d5 R- y' T$ A$ o
end 8 ]7 L$ w! l$ m6 E
3 W* r$ Q' K! x* l. m2 t0 Z# D0 t6 r
endmodule
{+ S/ A$ o4 j- _% r x$ p; m$ f
$ y( S5 Y' s9 U6 |: F0 e q ?" J[ 本帖最后由 kenson 于 2009-2-27 21:15 编辑 ] |
|