|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——AD芯片TLC549调试方法二
9 l# P& {7 b9 a" _7 a
* L1 W v B5 m/ W/ U分享下第二个程序,按照KDY的说法,第一个程序有点C化。, y% e* S3 [1 ^+ M# m# m
3 @: i+ K1 S: u5 g P* [7 V% q
当/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转换开始。
1 E% X. S+ i' u: K! y/ D
4 {& l# N( D j. V$ h+ Y6 ^方法二: , A# b- v9 y2 O6 D' b
module TLC549 ( + w& j) j3 o8 L9 ^8 ~
input sys_clk,
" T9 F' l0 }; T! \% T input sys_rstn,
: {$ o5 ~7 H5 N input AD_In,' c1 V3 A1 U$ b! h2 L* w$ \" R
output AD_Cs,
0 M2 F7 o' U$ g/ H* x7 _ output AD_Clk,$ x' R3 B9 V) g: P8 k$ d4 D
output clk_display,
2 [( w) K& `" U% a* W4 P# v; A; y output reg [7:0] Data_Out # j/ S) A0 N4 C' Y' u! W9 [
);& s- [" K% @8 t7 m
4 ?/ Z6 ?* M+ a; J
// clk=50MHz , AD_CLK_r = 1MHz
$ L, m4 \) x2 v1 a* }# A& u3 [reg AD_CLK_r;6 |0 P5 b2 O4 a* [0 C
reg[5:0] Count; ! `5 j: }0 Q/ Y
$ w! k0 X$ Q6 u& A! X7 M. j
always @(posedge sys_clk or negedge sys_rstn)1 C4 M, i( L7 e8 F# |) r
begin
) \ ^. R/ `2 c& k! w/ d if(!sys_rstn)
" N3 B0 v/ m* [) O begin
$ V! ]+ E7 E& x, K/ C3 Y Count <= 6'b0;
' ~% J: q( _( a& d9 ~$ ? AD_CLK_r <= 1'b0;
% t( o6 s5 e# U end
0 j5 }. I4 \" I5 o% Y else if(Count < 6'd50) 7 q. C3 m9 J+ J) A% K) U$ F7 V
Count <= Count+1'b1;. Z- j6 o8 C0 |& `* Y
else) s f+ g9 k O
begin- f% N! X, }$ N: j2 X6 A' }- ?
Count <= 6'd0;
$ H* v. m" |# d" H. ^8 e- L2 ?9 I AD_CLK_r <= ~AD_CLK_r;3 U D" {' n$ L9 Y: a @
end
S4 J: e4 d' i" Jend
) U( D$ [1 Z: @* V( W2 \/ k" K
6 A7 i' V3 W; ]' @) ?# y# `7 Wassign clk_display = AD_CLK_r;0 `3 _5 o( @ h# u
9 \1 D$ ~! g2 J9 b. D( T% b6 Freg[4:0] COUNTER;! N. G" K1 f! Q) ~2 Z1 D- b, Y
always @(posedge AD_CLK_r or negedge sys_rstn)
. O2 L, Z6 S! Sbegin" h z9 C( ?1 Y. R) G9 M! C% C! ?
if(!sys_rstn) COUNTER <= 1'b0;4 R2 P- f- f' Q! V
else COUNTER <= COUNTER+1'b1;. b; {3 {# |5 R: r4 d: _
end
3 Z/ n# p) A+ d7 [
: D9 S9 f8 u( h% W6 Z7 v' d0 h! Passign AD_Cs = (COUNTER <= 5'd9)? 1'b0 : 1'b1;
! x' U: G9 z( R! Nassign AD_Clk = (COUNTER >= 5'd2 && COUNTER <= 5'd9)? AD_CLK_r : 1'b0;8 ]/ e- B# f' z% n, A( j
# d; p% s$ F$ m: @ creg[7:0] Data_Out_r;. G: [' d3 c6 j, N* R( T0 z
reg [5:0] i;2 c: E! P% n3 W
0 B- B: Z3 o, e- R- Valways @(negedge AD_CLK_r )
! X8 F; w* |8 S, M. I4 ybegin, M- x; z" d8 b j" ?% B# @
if(COUNTER >= 5'd2 && COUNTER <= 5'd9) / o; {$ k$ W! n; q% M
begin
% H; c) \% E, y# s. [- W Data_Out_r<={Data_Out_r[6:0],AD_In};
" c% U7 \! c3 c0 g0 ` x end
. i* @0 U0 C. G! X; ]$ _2 i! @ else Data_Out <= Data_Out_r;
+ x) L& @( z6 Lend, w& ^* b! ^9 `8 s l/ D
& {$ n# y/ Q" L3 ?2 nendmodule
! q- Z0 B) s1 P# ^
3 S- L" V; Z0 n
|
0 a& P- I% R7 H |
|