十 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)
{
}
评论