十 ARM9(2440)的IIC-理論知識及程序實例
S3C2440A RISC 微處理器可以支持一個多主控IIC 總線串行接口。一條專用串行數據線(SDA)和一條專用
串行時鐘線(SCL)傳遞連接到IIC 總線的總線主控和外設之間的信息。SDA 和SCL 線都為雙向的。
多主控IIC 總線模式中,多個S3C2440A RISC 微處理器可以發送或接收串行數據來自或到從設備。主機
S3C2440A 可以通過IIC 總線啟動和結束數據傳輸。S3C2440A 中的IIC 總線是使用標準總線仲裁步驟。
為了控制多主控IIC 總線操作,必須寫入值到以下寄存器中:
– 多主控IIC 總線控制寄存器,IICCON
– 多主控IIC 總線控制/狀態寄存器,IICSTAT
– 多主控IIC 總線Tx/Rx 數據移位寄存器,IICDS
– 多主控IIC 總線地址寄存器,IICADD
當釋放了IIC 總線時,SDA 和SCL 線應該都保持為高電平。一個高到低SDA 的變化可以啟動一個起始條件。
SCL 穩定保持在高電平時的一個低到高SDA 的變化可以啟動一個停止條件。
起始和停止條件通常由主設備產生。第一個數據字節為7 位地址值,其在啟動起始條件后放到總線上,可以確
定出主設備要選擇的從設備。第8 位是決定傳輸方向(讀或寫)。
每個放到SDA 線上的字節都應該總共為8 位。字節可以在總線傳輸操作期間無限制的發送或接收。數據通常
從最高有效位(MSB)開始始發送,并且每個字節應該立即通過應答(ACK)位跟上。
I2C總線可構成多主和多從系統。在多主系統結構中,系統通過硬件或軟件仲裁獲得總線控制使用權。應用系統中I2C總線多采用主從結構,即總線上只有一個主控節點,總線上的其他設備都作為從設備。I2C總線上的設備尋址由器件地址接線決定,并且通過訪問地址最低位來控制讀/寫方向。
目前,通用存儲器芯片多為EEPROM,其常用的協議主要有兩線串行連接協議(I2C)和
三線串行連接協議。帶I2C總線接口的EEPROM有許多型號,其中AT24CXX系列使用十分普遍。產品包括AT24C01、AT24C02、AT24C04、AT24C08、AT24C16等。
AT24系列存儲器芯片采用CMOS工藝制造,內置有升壓電路,可在單電壓供電條件下工作。其標準封裝為8腳DIP封裝形式。
各引腳的功能說明如下:
SCL:串行時鐘。遵循ISO/IEC7816同步協議,漏極開路,需接上拉電阻。在該引腳的上升沿,系統將數據輸人到每個EEPROM器件,在下降沿輸出。
SDA:串行數據線。漏極開路,需接上拉電阻。雙向串行數據線,漏極開路,可與其他開路器件“線或”。
A0、A1、A2:器件/頁面尋址地址輸人端。在AT24C01和AT24C02中,引腳被硬連接,其他AT24Cxx均可接尋址地址線。
WP:讀/寫保護。接低電平時可對整片空間進行讀/寫,高電平時不能讀/寫,受保護。
Vcc/GND:5V工作電壓。
設備地址(DADDR)
AT24CXX的數據操作格式
在I2C總線中,對AT24C04內部存儲單元讀/寫,除了要給出器件的設備地址(DADDR)
外,還須指定讀/寫的頁而地址(PADDR)。兩者組成操作地址(OPADDR)如下:
下面是我摘自別人的文章中關于IIC的描述,寫的很好
s3c2440內部有一個IIC總線接口,因此為我們連接帶有IIC通信模塊的外圍設備提供了便利。它具有四種操作模式:主設備發送模式、主設備接收模式、從設備發送模式和從設備接收模式。在這里我們只把s3c2440當做IIC總線的主設備來使用,因此只介紹前兩種操作模式。在主設備發送模式下,它的工作流程為:首先配置IIC模式,然后把從設備地址寫入接收發送數據移位寄存器IICDS中,再把0xF0寫入控制狀態寄存器IICSTAT中,這時等待從設備發送應答信號,如果想要繼續發送數據,那么在接收到應答信號后,再把待發送的數據寫入寄存器IICDS中,清除中斷標志后,再次等待應答信號;如果不想再發送數據了,那么把0x90寫入寄存器IICSTAT中,清除中斷標志并等待停止條件后,即完成了一次主設備的發送。在主設備接收模式下,它的工作流程為:首先配置IIC模式,然后把從設備地址寫入接收發送數據移位寄存器IICDS中,再把0xB0寫入控制狀態寄存器IICSTAT中,這時等待從設備發送應答信號,如果想要接收數據,那么在應答信號后,讀取寄存器IICDS,清除中斷標志;如果不想接收數據了,那么就向寄存器IICSTAT寫入0x90,清除中斷標志并等待停止條件后,即完成了一次主設備的接收。在完成上述兩個模式時,主要用到了控制寄存器IICCON、控制狀態寄存器IICSTAT和發送接收數據移位寄存器IICDS。由于我們只把s3c2440當做主設備來用,并且系統的IIC總線上只有這么一個主設備,因此用來設置從設備地址的地址寄存器IICADD,和用于仲裁總線的多主設備線路控制寄存器IICLC都無需配置。寄存器IICCON的第6位和低4位用于設置IIC的時鐘頻率,因為IIC的時鐘線SCL都是由主設備提供的。s3c2440的IIC時鐘源為PCLK,當系統的PCLK為50MHz,而從設備最高需要100kHz時,可以將IICCON的第6位置1,IICCON的低4位全為0即可。寄存器IICCON的第7位用于設置是否發出應答信號,第5位用于是否使能發送和接收中斷,第4位用于中斷的標志,當接收或發送數據后一定要對該位進行清零,以清除中斷標志。寄存器IICSTAT的高2位用于設置是哪種操作模式,當向第5位寫0或寫1時,則表示結束IIC或開始IIC通訊,第4位用于是否使能接收/發送數據。
下面是用FL2440開發板的程序分析:
#include
#include "2440addr.h"
#include "def.h"
#include "IIC.h"
static U8 _iicData[IICBUFSIZE];
static volatile int _iicDataCount;//發送計數標志
static volatile int _iicStatus;//IIC狀態標志
static volatile int _iicMode;//IIC模式標志
static int _iicPt;
extern void Uart_Printf(char *fmt,...);
extern void Uart_Init(int baud);
void Delay(int x);
//===================================================================
//
//
//
//===================================================================
//******************[ Test_Iic ]**************************************
void Test_Iic(void)
{
}


評論