|
請教各位前輩一下:
/ R2 \; _9 X( m3 Z$ t9 I1 d小弟目前要在 t5 的狀態機下做六次的話,
8 _, |8 R+ `/ A" t" c讓它在t6 的地方判斷,如果大於六就做 t7,) C1 |! [6 [6 Q! G+ u5 x
不然就一直跳回 t5,這種寫法是否有誤呀?
/ x7 s+ `9 A6 F因為他一直狂讀n筆資料進來,不受我的t6控制?3 _' c) ~9 W/ G0 R/ a% E
9 }( I( O ?) ]9 `+ ~ t( s麻請前輩們不吝指導一下,這個問題困擾小弟好久了,' Y" Z: ^$ j* H8 G
試了好多天,都是一樣的結果,感謝再感謝。
2 E% C8 b6 }, B$ M' S: F
' Q- u, H# h$ T- w4 a% P# Owhen t5 => -- read LSB (lo-byte), send acknowledge, sent stop
$ M. \$ q8 }1 M+ E- k if (cmd_ack = '1') then
* z1 W0 e9 K/ h9 h nxt_state :=t6;
+ e" M4 S* [! i' I2 g& g if (lack = '1') then2 F6 L+ a$ p6 F+ W
ierr := '1'; -- no acknowledge received from last command, expected ACK+ K+ X: c9 a: V5 |8 {) W
end if;1 P [8 M& r0 F8 U. i
istart := '0';" C& e6 v# ?; Q3 y
iread := '1';& c b- Y( O( Y
iwrite := '0';9 f0 ]0 X" @' ?8 d+ t
iack := '0'; --NACK
: }, O% p$ a" H/ p7 ?9 t4 Y9 O' I! q istop := '0';
1 g5 u9 j# s( U2 M9 U7 k4 i- z5 T END IF; # ~8 p" F. K. ?7 c" B4 p0 t
when t6 => $ t& S0 H% a S' e% e1 A$ U
if (counter_i >= 6) then
0 f) b+ o8 o" u0 K2 }" `- q" a( J U counter_i <= 0; 0 } U I1 @3 A$ l' s7 E: s
nxt_state :=t7;
. |* k/ z6 \# {% O4 w$ I else 4 x% A( S# A: X' V' D
counter_i <= counter_i + 1 ;
# P+ `- Q7 ~4 Y- I+ A6 ^ end if;$ t( m! g; ~- e+ `
if (counter_i < 6 ) then
9 C: C* L) t& m7 z+ J nxt_state := t5;
) X$ F1 _$ v6 \ end if;
+ G* _5 {" |9 T/ B: b
" J4 q" r0 G) u0 g& b when t7 => -- read LSB (lo-byte), send acknowledge, sent stop$ _3 G% q% V" [5 U6 j6 i; X/ D y D
istart := '0';
( S/ E* f! I6 _$ ^( L iread := '1';; C- D; X* S% h G4 L" e' q6 q3 b
iwrite := '0';# i- m1 S5 M8 y: Y' a
iack := '1'; --NACK
, T( }# w9 M0 E istop := '1'; / C I" ?; V* d( a7 T; p7 i$ u
istore_dout := '1'; |
|