CoolRunner-Ⅱ器件的OL、SDA、START不口STOP發生邏輯
發布時間:2008/9/19 0:00:00 訪問次數:762
在主模式中,此進程產生i2c總線的sol和sda。sol為100 khz,由系統時鐘1.832 mhz及分頻計數器cnt_100khz決定。在不同的設計中,系統時鐘可能不一樣。為了滿足i2c時序要求,需要重新計算cnt_100khz值,并正確設置start_hold和data_hold參數。
在主模式中,產生sol和sda的狀態機如圖所示。
在發送模式中,sda信號線輸出的信號為start及stop狀態,或數據寄存器mbdr中的數據。
在idle狀態,scl和sda均為三態,允許主設備控制總線。一旦有start請求,且cpld i2c在主模塊式,總線空閑,則狀態機會轉入start狀態。
在start狀態,scl為高,sda輸出低電平,產生start。系統時鐘計數器scl_cnt開始計數,總線保持start狀態直到start_hold滿足,進入scl_low_edge狀態。
在scl_low狀態,產生scl下降沿,并復位clk_cnt。在下一個時鐘沿,系統進入scl_low狀態,并保持此狀態直到clk_cnt=low_cnt。如果有rep_start發生則sda變為高;如果有gen_stop,則sda變為低。
當clk_cnt=low_cnt,即scl低電平滿足如下兩個條件,狀態進入idle;否則進入scl_hi_edge。
(1)總線仲裁失敗。
(2)字節傳輸守華,即bit_cnt>7。
在scl_hi_edge狀態,產生一個scl上升沿。
在scl_hi狀態,系統時釗訓數器進行計數.sda保持高電平直剄clk_cnt=high_cnt,進入scl_low_edge狀態。如果在此過程中出現start/stop條件,狀態機將會在sol高電平持續半周期時進入start或stop wait狀態。
stop_wait狀態被用來確保在stop條件之后滿足保持時間。
如圖 scl、sda、start和stop發生邏輯狀態機
歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)
在主模式中,產生sol和sda的狀態機如圖所示。
在發送模式中,sda信號線輸出的信號為start及stop狀態,或數據寄存器mbdr中的數據。
在idle狀態,scl和sda均為三態,允許主設備控制總線。一旦有start請求,且cpld i2c在主模塊式,總線空閑,則狀態機會轉入start狀態。
在start狀態,scl為高,sda輸出低電平,產生start。系統時鐘計數器scl_cnt開始計數,總線保持start狀態直到start_hold滿足,進入scl_low_edge狀態。
在scl_low狀態,產生scl下降沿,并復位clk_cnt。在下一個時鐘沿,系統進入scl_low狀態,并保持此狀態直到clk_cnt=low_cnt。如果有rep_start發生則sda變為高;如果有gen_stop,則sda變為低。
當clk_cnt=low_cnt,即scl低電平滿足如下兩個條件,狀態進入idle;否則進入scl_hi_edge。
(1)總線仲裁失敗。
(2)字節傳輸守華,即bit_cnt>7。
在scl_hi_edge狀態,產生一個scl上升沿。
在scl_hi狀態,系統時釗訓數器進行計數.sda保持高電平直剄clk_cnt=high_cnt,進入scl_low_edge狀態。如果在此過程中出現start/stop條件,狀態機將會在sol高電平持續半周期時進入start或stop wait狀態。
stop_wait狀態被用來確保在stop條件之后滿足保持時間。
如圖 scl、sda、start和stop發生邏輯狀態機
歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)
在主模式中,此進程產生i2c總線的sol和sda。sol為100 khz,由系統時鐘1.832 mhz及分頻計數器cnt_100khz決定。在不同的設計中,系統時鐘可能不一樣。為了滿足i2c時序要求,需要重新計算cnt_100khz值,并正確設置start_hold和data_hold參數。
在主模式中,產生sol和sda的狀態機如圖所示。
在發送模式中,sda信號線輸出的信號為start及stop狀態,或數據寄存器mbdr中的數據。
在idle狀態,scl和sda均為三態,允許主設備控制總線。一旦有start請求,且cpld i2c在主模塊式,總線空閑,則狀態機會轉入start狀態。
在start狀態,scl為高,sda輸出低電平,產生start。系統時鐘計數器scl_cnt開始計數,總線保持start狀態直到start_hold滿足,進入scl_low_edge狀態。
在scl_low狀態,產生scl下降沿,并復位clk_cnt。在下一個時鐘沿,系統進入scl_low狀態,并保持此狀態直到clk_cnt=low_cnt。如果有rep_start發生則sda變為高;如果有gen_stop,則sda變為低。
當clk_cnt=low_cnt,即scl低電平滿足如下兩個條件,狀態進入idle;否則進入scl_hi_edge。
(1)總線仲裁失敗。
(2)字節傳輸守華,即bit_cnt>7。
在scl_hi_edge狀態,產生一個scl上升沿。
在scl_hi狀態,系統時釗訓數器進行計數.sda保持高電平直剄clk_cnt=high_cnt,進入scl_low_edge狀態。如果在此過程中出現start/stop條件,狀態機將會在sol高電平持續半周期時進入start或stop wait狀態。
stop_wait狀態被用來確保在stop條件之后滿足保持時間。
如圖 scl、sda、start和stop發生邏輯狀態機
歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)
在主模式中,產生sol和sda的狀態機如圖所示。
在發送模式中,sda信號線輸出的信號為start及stop狀態,或數據寄存器mbdr中的數據。
在idle狀態,scl和sda均為三態,允許主設備控制總線。一旦有start請求,且cpld i2c在主模塊式,總線空閑,則狀態機會轉入start狀態。
在start狀態,scl為高,sda輸出低電平,產生start。系統時鐘計數器scl_cnt開始計數,總線保持start狀態直到start_hold滿足,進入scl_low_edge狀態。
在scl_low狀態,產生scl下降沿,并復位clk_cnt。在下一個時鐘沿,系統進入scl_low狀態,并保持此狀態直到clk_cnt=low_cnt。如果有rep_start發生則sda變為高;如果有gen_stop,則sda變為低。
當clk_cnt=low_cnt,即scl低電平滿足如下兩個條件,狀態進入idle;否則進入scl_hi_edge。
(1)總線仲裁失敗。
(2)字節傳輸守華,即bit_cnt>7。
在scl_hi_edge狀態,產生一個scl上升沿。
在scl_hi狀態,系統時釗訓數器進行計數.sda保持高電平直剄clk_cnt=high_cnt,進入scl_low_edge狀態。如果在此過程中出現start/stop條件,狀態機將會在sol高電平持續半周期時進入start或stop wait狀態。
stop_wait狀態被用來確保在stop條件之后滿足保持時間。
如圖 scl、sda、start和stop發生邏輯狀態機
歡迎轉載,信息來自維庫電子市場網(www.dzsc.com)