I2C總線學(xué)習(xí)—查缺補(bǔ)漏—S3C2440的I2C控制器
從上圖可以看出,S3C2440提供4個(gè)寄存器來(lái)完成所有的IIC操作。SDA線上的數(shù)據(jù)從IICDS寄存器經(jīng)過(guò)移位寄存器發(fā)出,或通過(guò)移位寄存器傳入IICDS寄存器;IICADD寄存器中保存S3C2440當(dāng)做從機(jī)時(shí)的地址;IICCON、IICSTAT兩個(gè)寄存器用來(lái)控制或標(biāo)識(shí)各種狀態(tài),比如選擇工作工作模式,發(fā)出S信號(hào)、P信號(hào),決定是否發(fā)出ACK信號(hào),檢測(cè)是否接收到ACK信號(hào)。下面詳細(xì)接收各寄存器的用法。
IICCON寄存器IIC-Bus control register
注意事項(xiàng):
- IIC中斷發(fā)生在以下三種情況:當(dāng)發(fā)出地址信息或接收到一個(gè)從機(jī)地址并吻合時(shí),當(dāng)總線總裁失敗時(shí),當(dāng)發(fā)送/接收完一個(gè)字節(jié)的數(shù)據(jù)(包括響應(yīng)位)時(shí)。當(dāng)發(fā)出地址信息或接收到一個(gè)從機(jī)地址并吻合時(shí)產(chǎn)生中斷,在中斷處理函數(shù)中要準(zhǔn)備發(fā)送或者接收數(shù)據(jù),即讀取或設(shè)備IICDS寄存器,或者發(fā)出P信號(hào)。當(dāng)總線總裁失敗時(shí)產(chǎn)生中斷,在中斷處理函數(shù)中決定時(shí)候延時(shí)后再次競(jìng)爭(zhēng)總線等。當(dāng)發(fā)送/接收完一個(gè)字節(jié)的數(shù)據(jù)(包括響應(yīng)位)時(shí)產(chǎn)生中斷,在中斷處理函數(shù)中要準(zhǔn)備下次要發(fā)送或者接收數(shù)據(jù),即讀取或設(shè)備IICDS寄存器,或者發(fā)出P信號(hào)。
- 基于SDA、SCL線上時(shí)間特性的考慮,要發(fā)送數(shù)據(jù)時(shí),先將數(shù)據(jù)寫(xiě)入IICDS寄存器,然后再清除中斷。清除中斷,即向IICCON[4]寫(xiě)入0,也就是將SCL線拉高,此時(shí)產(chǎn)生一個(gè)上升沿,將移位寄存器中的數(shù)據(jù)發(fā)送到SDA線。至于先將數(shù)據(jù)寫(xiě)入IICDS寄存器,然后再清除中斷,可能是數(shù)據(jù)穩(wěn)定需要一個(gè)時(shí)間吧。在清除中斷前要數(shù)據(jù)保持問(wèn)的那個(gè)。
- 如果IICCON[5]==0,IICCON[4]將不能正常工作。所以,即使不使用IIC中斷,也要將IICCON[5]設(shè)為1。
IICSTAT寄存器
IICADD寄存器
用到IICADD寄存器的位[7:1],表示從機(jī)地址。IICADD寄存器在串行輸出使能位IICSTAT[4]為0時(shí),才可以寫(xiě)入;在任何時(shí)候都可以讀出。IICSTAT[4]為0時(shí),禁止接收/發(fā)送功能,即此時(shí)SCL線被拉低。
本文引用地址:http://2s4d.com/article/201611/320022.htmIICDS寄存器
用到IICDS寄存器的位[7:0],其中保存的是要發(fā)送或已經(jīng)接收到的數(shù)據(jù)。IICDS寄存器在串行輸出使能位IICSTAT[4]為1時(shí)才可以寫(xiě)入;在任何時(shí)候都可以讀出。IICSTAT[4]為1時(shí),使能接收/發(fā)送功能,也就是釋放了SCL線。
評(píng)論