|
請教各位前輩一下:
o8 R" G2 }! b3 l小弟目前要在 t5 的狀態機下做六次的話,+ v/ R+ [+ Q+ |8 D$ V/ O
讓它在t6 的地方判斷,如果大於六就做 t7,
* W% s9 s5 K0 P9 ~& w不然就一直跳回 t5,這種寫法是否有誤呀?
0 w, }7 R% t9 D0 F, l因為他一直狂讀n筆資料進來,不受我的t6控制?) G5 i8 f* _; R, b# D I7 ^
: ?2 L( d+ }2 B麻請前輩們不吝指導一下,這個問題困擾小弟好久了,
; ?$ o$ f7 J7 V y1 {( ]試了好多天,都是一樣的結果,感謝再感謝。
/ v( p% Y- E4 U* V& x; g) V7 Z
- k1 A9 q9 E& v4 ]9 gwhen t5 => -- read LSB (lo-byte), send acknowledge, sent stop! ` t% j4 l/ G$ z
if (cmd_ack = '1') then
* \9 H# {5 h0 h7 e% J$ t nxt_state :=t6;
0 I( y0 f* d1 G if (lack = '1') then
/ H* G. p8 Z2 h ierr := '1'; -- no acknowledge received from last command, expected ACK
2 a9 g# q' {' R" V7 q end if;
$ @# q! k: z. y, S' h6 [ istart := '0';. q: ^: i1 p/ A/ x, S% t. a
iread := '1';) U* j: @% v6 P& T6 t' ^
iwrite := '0';
/ h8 j& }0 V) {, }9 q! C, k iack := '0'; --NACK
( x' A# u* Z1 z. r8 m0 K istop := '0';
7 ^; G* a3 b4 J2 [0 I END IF; 8 k* s5 K" K3 M8 v0 a
when t6 =>
: }4 C) L% ?$ n if (counter_i >= 6) then
% p, |( J' S0 j$ P/ S counter_i <= 0;
* c; o1 [$ T, ^2 B% a nxt_state :=t7; 1 Z4 F5 A# ` _
else 0 a! ]7 p+ L, u6 {, r, z5 F
counter_i <= counter_i + 1 ;
! f; d8 G; r) I% K& X3 g end if;
. ]" S ?3 D5 J) H if (counter_i < 6 ) then 4 v( u7 ]5 D& }- \8 O% B
nxt_state := t5;
# v, B1 \- E- _1 g9 H w end if;
, F1 e4 J" R1 T5 U7 R ) L9 J, ^9 p8 \ P2 J8 _. J. I
when t7 => -- read LSB (lo-byte), send acknowledge, sent stop/ M- s2 R9 @4 D, \: K9 a+ f8 v
istart := '0';
" ~3 D! r0 m' ^" s8 K iread := '1';
6 x' t6 S; _5 P2 m2 O8 t iwrite := '0';
, S/ W% t2 |' g. M; z iack := '1'; --NACK
: N' f4 }0 D9 P/ g istop := '1'; 7 ~" X. `1 F3 e6 f8 q) x( }3 j- d/ m
istore_dout := '1'; |
|