态机回到SCL_IDLE,停止产生SCL时钟,否则状态机将进入到SCLH肛EDGE状态。 在SCL_H肛_EDGE状态,系统时钟复位,SCL输出高阻,SDA保持原输出状态。如果采样 到SCL时钟总线仍然为低,状态机将保持SCLH肛EDGE状态,等待SCL总线被其它的控制 器释放,用以满足SCL时钟同步协议。当采样到SCL时钟变成低电平时,状态机进入到 SCL HIGH状态。 在SCLHⅢGH状态,SCL输出高阻,SDA保持原输出状态,系统时钟开始计数。如果需 要产生重复起始信号,当达到SCL_HIGH保持时间的一半后,状态机转入START状态;如果 需要产生STOP信号,达到SCL_HIGH保持时间的一半后,状态机进入STOP_WAIT状态:否 则,状态机在SCL_HIGH保持时间满足后回到SCL_LOW_EDGE状态。 在STOP_WAIT状态,系统时间继续计数,SCL输出高阻,SDA输出高阻,产生停止信 号,并释放总线。这个状态是为了保证控制器在连续产生停止信号和起始信号之间有足够 的时间间隔而设立的。当保持时间满足后,状态机回到SCL_IDLE状态。 4.2.2.2主状态机 IDLE detect start='1' 业 detect stop='1 bit cnk<7 HEADER detect stop='1' detect start='1' bit cnt=7 detect start=' ACK HEADER master Rcv or master Xmit or slave Rcv and addr match=''(slave XMIT and Addr match=1) 长 master arb lost='1 RCV DATA bit cht<7 bitcnt<7 XMIT DATA) or slave sda in='1' bit cnt=7 bit cnt=7 (master and arb lost='1)or (slave and addr match='0') ACK DATA WAIT_ACK 图4-3主状态机 vw fïefH ïî f B> Quvw¥M fïdïHeKH uv% F fïdïHeKH uvOstB> f ÷n e àmuv%ÚÛ& f B>OÉ9ìuvw¥à fïdïHeKH uv¢£ f WX ¡A5ßà f B>©ªab%R& f B>Ùì-BuvwM fïdKd uv% F fïdKd uv f ÷n e àmuvOstB>â7%ÚÛ, -ïî:7¡¢R fïdKd àBP?uvwØM I%I uv5ÚÛ ,-ïî IQ ¡¢ fïdKd àBP?uvwM IQïJI uv5 QuvwF fïdKd àBßà? fïfQJïHeKH uv% F IQïJI uvstBµ¶ f ÷n e ÷nïî¡ ¢D¡A% uv9àWX F£¶ïî¡¢[7¡¢¥Äà7 BQÅ-%RàBßà?uvw fïefH uv% nLkLkLk Uuvw %" @ABC detect_start='1' bit_cnt<7 bit_cnt=7 (master and arb_lost='1') or (slave and addr_match='0') bit_cnt<7 bit_cnt<7 master Xmit or (slave XMIT and Addr_match='1') master Rcv or slave Rcv and addr_match='1' detect_start='1' detect_start='1' bit_cnt=7 bit_cnt=7 detect_stop='1' detect_stop='1' master arb_lost='1' or slave sda_in='1'