版主
主题
回帖0
积分10609
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
好一段时间没有过来了!因为太多的时间去开发和调试上面真是没办法。% B: `, r8 P* `
现在我发些屏的驱动程序给大家这个是NEC的VGA屏是模拟屏所以只能显示RGB三色只是测屏用的呵呵
5 m8 z) W$ e/ Z) U3 k
# L a' h m7 P: j, \7 U
0 b- C: c- `# H, Z
3 E6 k. l/ W# Y1 Q0 l& N6 Ymodule NL6448AC30_09( gclk,
! }& ? V+ R& t3 c9 [ tft_clk,4 a2 L! D: u# s! f C+ ^
hsync,
( H( q) `" q2 P vsync,
3 M, _" T! \6 O. ^7 i DE,! m/ d3 E# H6 N% s
R,0 d- T6 w$ _+ P8 ~
G,9 \+ q) U# @" |7 B) o6 a# l7 F- L
B );; w! o; W, r; J( o! M7 E
% r0 `4 l/ h J0 q2 E. sinput gclk;9 w% @- O) Y/ H/ ]
output tft_clk;
% y" q; r2 X6 i, \8 a6 p1 `output [1:0]R,G,B;
6 z z* v! |$ o: ureg [1:0]R,G,B;
7 Z4 ?" x# S) k4 r) g9 Zoutput hsync,vsync,DE;4 y/ E' N* E3 J" t2 v e
reg hsync,vsync,DE;
6 V G( L, u. c! C4 V$ d! kreg [9:0]clk_count,hsync_count;
/ ]& T0 p! \: X) q5 \. R' }9 lreg div_count;# O. E8 ]1 n: O0 u9 o- S
$ R# T7 w7 j7 d4 G( \assign tft_clk = div_count;
+ F5 w; \7 Q0 X! m1 k# I//分频程序对50MHZ产生25MHZ分频供LCD时钟所用
$ I6 K/ b% x0 E" A9 ]) {///////////////////////////////////////////////////////////////////////////////////////////////////////
% a+ y# v- }3 W' h( a7 S; ~% L1 O9 N4 Jalways @(posedge gclk) //gclk全局时钟50MHZ //
+ v# t7 |5 D7 O/ M# mbegin //
, \" y& @" a4 t) f; n/ Z div_count <= div_count + 1'b1; //将50MHZ 2分频后得到25MHZ供LCD时钟所用 //: M. B. Q( C# M# V/ i
/////////////////////////////////////////////////////////////////////////////////////////////////////// & V. f1 F( Q: y) y, J
, o& p% D' T* ~. d if(hsync_count < 2)vsync <= 1'b0; //产生场频时钟“在行时钟开始的头2位行时钟线为低电平其它为高电平”
1 {4 _2 M5 J ?$ O- ^# j else vsync <= 1'b1; 8 P9 K6 M& g. q0 L/ E/ E
, r" O2 T$ D* v. Kend
- b, Q) n' V, c: x) I0 ^ ; p6 y+ S k7 z$ ~; o1 o
always @(posedge div_count) //TFT LCD 用时钟线 //
$ a, p0 _% p U% E0 t) Abegin //2 f% ?% f* w1 E; K
//
?* A/ Y! d: F if(clk_count < 799)clk_count <= clk_count + 1'b1; //时钟计数器用来产列时钟产生条件 //
! i3 E% ~- d1 ^ I; v else clk_count <= 10'b0000000000; //' @( _8 o u A% M, O
//4 ~) ?, f7 r9 n1 q& V
end : `* O+ M# F5 x6 {
& C/ c4 W/ S$ l7 n, M2 Q+ g0 e( h
always @(posedge tft_clk)
) ^; B3 {8 s, b x+ b- v( ]" zbegin
9 ~- P1 q- z+ t. s; u if(clk_count > 142 && clk_count < 783)DE <= 1'b1; // && hsync_count > 32 && hsync_count < 513 //
- [! Z1 G) R0 k. B+ s) @ else DE <= 1'b0; //. O: a4 t0 ^4 T2 n7 ]# \
//
" L+ r- C' U! Z1 } //2 N9 y0 D3 y) H6 w& k# a
if(clk_count > 94 && clk_count < 799)hsync <= 1'b1; //产生行时钟线“一个行的低电平包含有96个时钟脉冲” //
7 {" X% f8 b3 r9 @4 v5 i else hsync <= 1'b0; //) |! E2 O; L/ v; l! H
//
1 I% N1 ]$ T6 B8 oend //
y4 k2 a, f) Z& d; s: h; [" h9 e //
' p8 W) c2 Y; O# e2 a6 u( Y+ ? //8 U p( F: }: w E- h$ }1 Y( d! P
always @(posedge hsync) //
$ \: J+ [' X( D& \' Sbegin //
; S8 N, Y' N, R: l0 A if(hsync_count < 524)hsync_count <= hsync_count + 1'b1; //对行进行计数用来产生场时钟制造条件 // " i7 n5 e/ `- ]- Q" P! ^1 Y
else hsync_count <= 10'b0000000000; //一个场含有525个行时钟,当行计数器不大于525的时候加1 否则清零 //' V, k8 b* V. S7 w, j
//
. h' U8 _* c! {" H4 t) tend //. r) T# b- A- [4 f$ v
//
9 z" n9 `5 a3 J" j //
& e! A% n/ z/ }6 N* }0 u' [: m 6 K( h9 l6 I3 n( `' s
- Z) n6 l7 B* ~ L0 h( `+ c2 `! h[email=always@(posedge]always@(posedge[/email] tft_clk)
; \! F& M3 s4 x+ B// black control . k( O7 e! G4 w" G4 Z) ^& ^5 b
if((clk_count > 142) && (clk_count < 251)) , k# h9 {/ l, N7 J* [7 g
begin
! {: y4 A6 }+ c' p R[1:0] <=0; - r3 C' C) z0 k: V3 r) b
G[1:0] <=0; 3 L; F0 c3 f2 E; x9 M
B[1:0] <=0; , {; x+ `+ V/ p$ b* ~' B: ~
end
7 m3 P2 e/ O( L1 V! R) r- v! m$ aelse
8 G7 p4 r" p* }+ K& A% ~1 T begin
+ N: \( Z! S" u2 h2 @' Q if((clk_count > 252) && (clk_count < 358)) ) ~0 G9 A( ]7 u+ b d' y
begin
7 a. u, T2 J* e3 u( l R[1:0] <=3; % H5 {/ X/ k6 d! D
G[1:0] <=0; # v/ j9 |; C, [( x0 }3 V2 \
B[1:0] <=0; - v" g- ^* A$ N1 ]8 C+ t& }/ d, o! C
end 5 ^0 Z% h) r# J: \ S5 `! {. m
else0 J" i0 m& G: v f+ ]4 m+ b
if((clk_count < 359) && (clk_count < 465)) 1 C( J5 A" N4 }+ @& S; ]
begin
+ y, f* X) V. G; T0 r ~ R[1:0] <=0; 2 C* n6 q5 Q* r( ]! w+ c! O) ^& Z0 E
G[1:0] <=3; 7 {! v. h( x8 F+ e1 {% x: V
B[1:0] <=0; ( J# }; n Y2 L$ Z& _0 F9 h
end
8 w/ U4 G8 b; ] else
) n$ [+ ]* y: [ if((clk_count < 466) && (clk_count < 572) ) 7 c$ a' |/ N6 F: e, \& W
begin
1 Z, V# j: S, @! Q) l* Y3 O R[1:0] <=0; % r0 \% C. a0 L- {4 _2 d9 N/ |! ^
G[1:0] <=0; 8 P+ K6 k7 p% X8 h4 Y
B[1:0] <=3;
# l" H3 ^+ t6 g) `& {" r end 4 F- d+ T$ p. O+ q
else
0 Q5 M6 k, E. Q+ u& q6 n begin 1 K Y5 j7 [1 m! h: {4 o) h
R[1:0] <=3; 3 i+ V6 ^) z2 j
G[1:0] <=3; 2 \4 }: F9 v$ k# D/ v, T n
B[1:0] <=3; 4 ~! k. h4 F* ?( T% \% `, r( @
end
0 V# V6 I) J) Z N" z! c: }' X* |end
5 `& i$ ]) n- q# X7 {; V: ^
$ z: t9 \0 p7 Z' |endmodule
( X/ w2 q: y I7 s! F* g' S
' l( s, @) r' Q9 C) Q4 c[ 本帖最后由 kenson 于 2009-2-27 21:15 编辑 ] |
|