|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——AD芯片TLC549调试方法二
. Z" Q+ K/ }6 U2 Q3 D" i
5 |* |" ~# u4 V* E5 k+ f* t& T分享下第二个程序,按照KDY的说法,第一个程序有点C化。
+ ~" _% D6 Z7 k/ Q: o$ A; k
/ {4 q3 O1 h l* R当/CS变为低电平后,TLC549芯片被选中,同时前次转换结果的最高有效位MSB(A7)自DATA OUT端输出,接着要求自I/O CLOCK端输入8个外部时钟信号,前7个I/O CLOCK信号的作用,是配合TLC549输出前次转换结果的A6-A0 7位,并为本次转换做准备:在第4个I/O CLOCK信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个I/O CLOCK信号的下降沿使片内采样/保持电路进入保持状态并启动A/D开始转换。转换时间为36个系统时钟周期,/CS保持高电平,或者I/O CLOCK时钟端保持36个系统时钟周期的低电平. 由此可见,在自TLC549的I/O CLOCK端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次A/D转换开始。
3 i# {+ ^" t; h6 l, m
7 i4 ~) Q6 Z+ `6 h方法二: ; r" \' n& _* a+ l* ^( r. l
module TLC549 ( 5 U( k4 t0 M' B2 W0 V$ a
input sys_clk,
' D9 I: b8 u( ? input sys_rstn,4 F$ l; z* J, E
input AD_In,
, ^) Z U( @1 P$ U1 g) a$ W, N output AD_Cs,# X" M) | b+ [2 P( |
output AD_Clk,0 o t( t M: v: z- t" |0 i
output clk_display,5 A& Y) F2 B/ A7 j- l9 s
output reg [7:0] Data_Out 6 s+ C c3 D( w1 y
);6 E" }1 L1 y2 j$ v4 G; r
% P3 F5 ]# T! a3 Z& I// clk=50MHz , AD_CLK_r = 1MHz 4 G5 ?/ j) j3 F, {7 h5 R- [
reg AD_CLK_r;
7 z' U/ H% j! J: f0 f, s6 H8 ]7 ~reg[5:0] Count;
i4 @7 r* |* N# u, a
# q7 a5 z4 I- t7 Z, D, B; ralways @(posedge sys_clk or negedge sys_rstn)
: Z, j& ]4 P' kbegin
7 T7 ], @/ ~8 X& K9 e% y if(!sys_rstn)
6 E- m( r% X9 U begin( g5 T% O. |+ a
Count <= 6'b0;
$ W6 a) n; Y8 i. @+ e" ~; r AD_CLK_r <= 1'b0;
; s1 k2 Q* G7 A) f R) V; |* k end) g7 m5 a$ d1 i( U/ Q
else if(Count < 6'd50) ( ~" i- [* c$ a- V4 Q0 ^6 R l6 K- \5 L
Count <= Count+1'b1;
. m' Q: K$ l" m9 j( n# r else
8 H% |- P$ y3 d begin
( {9 u6 }( B* u. i1 ^5 } o t# b Count <= 6'd0;
4 _, ?( D+ U! }: _8 D8 V AD_CLK_r <= ~AD_CLK_r;
& A- g; R6 L6 D3 ~6 l, Q end
# H/ p8 Q' `' k; H5 C2 Jend: G# I8 D" ^2 a3 X- x: L* h$ Q
8 d" F2 I8 Z' l
assign clk_display = AD_CLK_r;1 k! j, R# o* X% g+ S% [" K. E8 B
( c5 ~/ c% n6 F
reg[4:0] COUNTER;& T( O( {- {8 i" }
always @(posedge AD_CLK_r or negedge sys_rstn)
) P& c% \3 j& L% S) R8 obegin3 ~9 l; C) O0 e
if(!sys_rstn) COUNTER <= 1'b0;
5 K+ i' ]$ d. d& [ else COUNTER <= COUNTER+1'b1;3 F$ N' G9 N6 e8 { G
end
& j) C# ?& }, l
" [( I* k) x4 g2 A" vassign AD_Cs = (COUNTER <= 5'd9)? 1'b0 : 1'b1;$ |+ `# m. n3 n* E
assign AD_Clk = (COUNTER >= 5'd2 && COUNTER <= 5'd9)? AD_CLK_r : 1'b0;
* ]% h8 k$ z1 h2 |7 V
; K5 F. Z4 \; j# z0 Y. Z+ vreg[7:0] Data_Out_r;+ w1 A5 b6 M. R
reg [5:0] i;. e A* u. q8 l
, } }( i" u: M" a
always @(negedge AD_CLK_r )5 r( d K ?9 d" S' [! ^
begin
3 p& t0 q) W# B if(COUNTER >= 5'd2 && COUNTER <= 5'd9) 9 B# F/ K% i, _2 D7 N
begin
$ T7 g) z3 J8 ]' Q1 V! D% o/ M Data_Out_r<={Data_Out_r[6:0],AD_In}; T8 m1 i. f% X; Y) H, o0 \9 B
end
$ \ O5 L) W& v9 g& J else Data_Out <= Data_Out_r;
, j2 S! U+ r5 ~- \3 j! Qend
/ f* V n! A( ^8 N/ `, T
( L+ y* T5 \/ j' ]/ ]5 v* |endmodule# R& M( H8 j' ]. [+ t! Y0 k" M* P
& H4 Z$ }$ O( A/ x
| & @( ^. X# `8 r. Z# ^/ O- C- W
|
|