這里咱們說3個點
1.檢查IIC總線上是否有指定地址的器件
2.IIC讀取數據
3.IIC寫數據
下面來一個一個詳細說明
1.檢查IIC總線上是否有指定地址的器件
1.判斷是否總線忙,如果忙則等待2.產生起始位3.等待起始位產生完成4.發(fā)送器件地址(這里選擇讀寫都是可以的)5.等待是否有ACK位回應,(這里有兩種判斷方法1.通過判斷ACK標志2.通過判斷ADDR標志),最好使用ADDR標志位6.清楚ADDR標志位7.產生停止位8.通過判斷是否有ACK,就可以判斷是否有指定地址的器件123456789
2.IIC讀取數據
1.判斷是否總線忙,如果忙則等待2.產生起始位3.等待起始位產生完成4.發(fā)送器件地址,這里方向上選擇寫數據5.等待發(fā)送完成,通過判斷ADDR標志位是否置位6.清除ADDR標志位7.同時判斷TXE位,這個在發(fā)送數據完成之后,也會被置位8.發(fā)送要讀取內存的地址9.等待TXE位置位10.再次發(fā)送起始位11.等待起始位產生完成12.發(fā)送器件地址,這里方向上選擇讀數據13.等待發(fā)送完成,通過判斷ADDR標志位是否置位14.使能LAST位,使能這個,就能做到在傳輸最后一個數據的時候,自動產生NACK14.開始用DMA傳輸下面的數據12345678910111213141516
3.IIC寫數據
1.判斷是否總線忙,如果忙則等待2.產生起始位3.等待起始位產生完成4.發(fā)送器件地址,這里方向上選擇寫數據5.等待發(fā)送完成,通過判斷ADDR標志位是否置位6.清除ADDR標志位7.同時判斷TXE位,這個在發(fā)送數據完成之后,也會被置位8.發(fā)送要讀取內存的地址9.等待TXE位置位10.開始用DMA傳輸下面的數據11.在DMA傳輸完成中斷中產生停止位