CoolRunner-Ⅱ器件的I2C接口主狀態(tài)機
如圖 I2C接口主狀態(tài)機
無(wú)論是主模式,還是從模式,狀態(tài)機都是相同的。在每個(gè)狀態(tài),模式都會(huì )被檢測,以決定輸出和下一個(gè)狀態(tài)。如果仲裁失敗或 I2C控制器被確定為從模式,控制器會(huì )自動(dòng)由主模式切換到從模式。
此狀態(tài)機用到一個(gè)位計數器和兩個(gè)移位寄存器,位計數器對從總線(xiàn)上接收到的位進(jìn)行計數,其中一個(gè)移位寄存器用來(lái)存儲I2C的HEADER;另一個(gè)用來(lái)存儲接收到的數據或待發(fā)送的數據。
當檢測到START信號時(shí),狀態(tài)機進(jìn)入HEADER狀態(tài)。在HEADER狀態(tài),如果是主模式,MBDR寄存器中的HEADER被發(fā)送。當所有8位數據發(fā)送完畢時(shí),狀態(tài)機轉入ACK HEADER。
在A(yíng)CK_HEADER狀態(tài),如果CoolRunner-II I2C控制器工作在主模式,將會(huì )采樣SDA,以確認從設備是否有應答。如果沒(méi)有應答,狀態(tài)轉入STOP;如果有應答,LSB=1時(shí)進(jìn)入RCV_DATA, LSB=0時(shí)進(jìn)入XMIT_DATA。
I2C Header移位寄存器與MADR進(jìn)行比較,如果匹配,則CoolRunner-II I2C為被尋址的從設備。模式立刻切換到從模式,狀態(tài)寄存器MBSR中MAAS位被置位,SDA線(xiàn)將會(huì )按照TXAK中的設置應答當前主設備。
在RCV_DAT狀態(tài),SDA數據被入I2C移位寄存器,以供uC讀取。當所有數據位被接收到,狀態(tài)機轉入ACK_DATA,TXAK被輸出到SDA。
在XMIT_DATA狀態(tài),MBDR寄存器中數據被送到SDA.當發(fā)送整的字節后,狀態(tài)轉入WAIT_ACK.如果檢測到ACK,則狀態(tài)再次進(jìn)入XMIT_DATA,直到產(chǎn)生STOP條件或沒(méi)有收到ACK條件.必須注意提,在數據傳輸過(guò)程中uC速率必須跟上I2C控制器收發(fā)數據的速率.如果中斷使能,則當一個(gè)字節的數據發(fā)送或接由結束時(shí)就會(huì )產(chǎn)生一個(gè)中斷,MCF位將會(huì )被置位.在A(yíng)CK狀態(tài),數據在uC和控制器之間轉輸。在此過(guò)程中,I2C控制器不會(huì )等待uC操作。
如果Coo1Runner-ⅡI2C工作在主模式,在STOP狀態(tài)告知SCL/START/STOP發(fā)生器產(chǎn)生一個(gè)STOP條件,最后狀態(tài)進(jìn)入IDLE。
評論