|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——AD芯片TLC549调试方法二
' F8 F3 F% c$ v/ C, h6 }8 ?% b1 @" H3 z, C& D# O8 Y2 J) I" L1 V
分享下第二个程序,按照KDY的说法,第一个程序有点C化。% t* n" w' Y: V7 k# X/ o
3 Z: @& |; p c: g0 i
当/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转换开始。. R8 e7 N6 h+ o8 V5 c! D/ t/ ~
8 U+ {1 N# p: c% W2 ~; M
方法二:
& Q& s2 d/ H8 l9 _$ xmodule TLC549 ( : p, U# k. b+ ?3 T
input sys_clk,
' D) p; j+ m* U8 j+ F input sys_rstn,/ ]) w3 O) [$ A. O3 q/ t2 _
input AD_In,
8 i) s1 X( l4 W% t7 G output AD_Cs,
7 p: v/ G; _+ O9 }2 ` output AD_Clk,$ U8 r- h* j* i9 k( C0 o
output clk_display,
* B/ u& S$ t; @; P6 c/ T output reg [7:0] Data_Out % M p0 Y- T" l4 k2 @3 _% H4 x! V: u
);. s6 o( c3 Y4 Y2 X, U8 S
( N0 Q) |* m6 Z( S+ F5 U// clk=50MHz , AD_CLK_r = 1MHz
7 l P& K: ~' ^. \4 q6 L: \/ D7 breg AD_CLK_r;& ?0 C- ^" K8 y. l- }2 B. T
reg[5:0] Count; & r5 |! G* p: M0 P* e
# `3 e9 F' V( ?always @(posedge sys_clk or negedge sys_rstn)
1 Y" R O: l7 nbegin6 a1 s$ [ J, B7 u; h8 C' T: E% y
if(!sys_rstn)/ p& z; C) l- S& u; ?" ?
begin* r% T- a& s# U+ i/ q4 U4 A
Count <= 6'b0;
2 [6 q O f4 c. q AD_CLK_r <= 1'b0;
- T4 R" h% |! J end1 [5 @2 S6 d+ n
else if(Count < 6'd50) : o+ p$ r+ C9 A7 Z) D
Count <= Count+1'b1;
5 v" S9 `1 d# g& f4 M; B else7 f! ~/ Z7 {" ~4 R
begin2 W) `2 L. j9 d. r y; t
Count <= 6'd0;
* ?% i: m; I5 f AD_CLK_r <= ~AD_CLK_r;
# d3 l! w0 t4 ~& P" z% D7 K end; x1 P: J1 j% g) I7 M1 C
end. s9 i# l/ v5 ?
) `% S+ x" V* r% n9 @# n
assign clk_display = AD_CLK_r;
, k/ p8 W, ^( I, q, @+ g y, P2 Y0 ]& r. R$ p
reg[4:0] COUNTER;0 I/ A: [, f0 L; C2 U. `8 U
always @(posedge AD_CLK_r or negedge sys_rstn)# e2 n5 V& g% p, p4 U" _
begin
* A4 ]7 G- [& B& T; E! v c if(!sys_rstn) COUNTER <= 1'b0;
! W$ p1 b7 u$ ?) h4 e else COUNTER <= COUNTER+1'b1;
) b# J5 e1 R" e# {3 Iend
# q9 d/ L& x: M4 y q3 W) E5 \" U2 e( C h
assign AD_Cs = (COUNTER <= 5'd9)? 1'b0 : 1'b1;
* L: {* z: H9 W* z! c6 r: _assign AD_Clk = (COUNTER >= 5'd2 && COUNTER <= 5'd9)? AD_CLK_r : 1'b0;8 F! O$ P6 M. ?; Y" ]" y
; X: c9 t' H, r. s$ S- `
reg[7:0] Data_Out_r;- T( ~- w# a+ U- r0 f0 E
reg [5:0] i;% ~; ~ J4 F9 L: H, T- G
+ W% R" j9 n% O' B2 |* { \" P
always @(negedge AD_CLK_r )* T. {* t5 E8 a$ M3 L& m
begin3 ]% l% e3 t9 H
if(COUNTER >= 5'd2 && COUNTER <= 5'd9)
& A' v3 q& x: q; I' B begin6 g( b, F) [0 Y$ ~
Data_Out_r<={Data_Out_r[6:0],AD_In};4 ^6 p) [6 z) v& n
end
! g3 P- h. ~1 q, j0 S else Data_Out <= Data_Out_r; 6 A8 O# u( Q+ R& }
end$ v5 _. O. Z+ E% M
6 D, b/ m9 U7 b4 d1 a: K! B' d
endmodule
& r0 V" q3 O# E8 M6 _! a* C5 A
( W/ }. k% A0 ~& M
|
. z( S# \+ O) W- F1 y* G |
|