I2C總線(xiàn)學(xué)習—查缺補漏—S3C2440的I2C控制器

從上圖可以看出,S3C2440提供4個(gè)寄存器來(lái)完成所有的IIC操作。SDA線(xiàn)上的數據從IICDS寄存器經(jīng)過(guò)移位寄存器發(fā)出,或通過(guò)移位寄存器傳入IICDS寄存器;IICADD寄存器中保存S3C2440當做從機時(shí)的地址;IICCON、IICSTAT兩個(gè)寄存器用來(lái)控制或標識各種狀態(tài),比如選擇工作工作模式,發(fā)出S信號、P信號,決定是否發(fā)出ACK信號,檢測是否接收到ACK信號。下面詳細接收各寄存器的用法。
IICCON寄存器IIC-Bus control register

注意事項:
- IIC中斷發(fā)生在以下三種情況:當發(fā)出地址信息或接收到一個(gè)從機地址并吻合時(shí),當總線(xiàn)總裁失敗時(shí),當發(fā)送/接收完一個(gè)字節的數據(包括響應位)時(shí)。當發(fā)出地址信息或接收到一個(gè)從機地址并吻合時(shí)產(chǎn)生中斷,在中斷處理函數中要準備發(fā)送或者接收數據,即讀取或設備IICDS寄存器,或者發(fā)出P信號。當總線(xiàn)總裁失敗時(shí)產(chǎn)生中斷,在中斷處理函數中決定時(shí)候延時(shí)后再次競爭總線(xiàn)等。當發(fā)送/接收完一個(gè)字節的數據(包括響應位)時(shí)產(chǎn)生中斷,在中斷處理函數中要準備下次要發(fā)送或者接收數據,即讀取或設備IICDS寄存器,或者發(fā)出P信號。
- 基于SDA、SCL線(xiàn)上時(shí)間特性的考慮,要發(fā)送數據時(shí),先將數據寫(xiě)入IICDS寄存器,然后再清除中斷。清除中斷,即向IICCON[4]寫(xiě)入0,也就是將SCL線(xiàn)拉高,此時(shí)產(chǎn)生一個(gè)上升沿,將移位寄存器中的數據發(fā)送到SDA線(xiàn)。至于先將數據寫(xiě)入IICDS寄存器,然后再清除中斷,可能是數據穩定需要一個(gè)時(shí)間吧。在清除中斷前要數據保持問(wèn)的那個(gè)。
- 如果IICCON[5]==0,IICCON[4]將不能正常工作。所以,即使不使用IIC中斷,也要將IICCON[5]設為1。
IICSTAT寄存器

IICADD寄存器
用到IICADD寄存器的位[7:1],表示從機地址。IICADD寄存器在串行輸出使能位IICSTAT[4]為0時(shí),才可以寫(xiě)入;在任何時(shí)候都可以讀出。IICSTAT[4]為0時(shí),禁止接收/發(fā)送功能,即此時(shí)SCL線(xiàn)被拉低。
本文引用地址:http://dyxdggzs.com/article/201611/320022.htmIICDS寄存器
用到IICDS寄存器的位[7:0],其中保存的是要發(fā)送或已經(jīng)接收到的數據。IICDS寄存器在串行輸出使能位IICSTAT[4]為1時(shí)才可以寫(xiě)入;在任何時(shí)候都可以讀出。IICSTAT[4]為1時(shí),使能接收/發(fā)送功能,也就是釋放了SCL線(xiàn)。

評論