PAGE1
PAGE1
LPC1700系列的I2C接口
1.I2C接口概述
I2C(Inter-IntegratedCircuit)接口是一种简单、双向的二线制同步串行通信接口,广泛应用于各种嵌入式系统中。LPC1700系列单片机提供了两个I2C接口,分别称为I2C0和I2C1。这些接口可以用于连接各种外部设备,如温湿度传感器、EEPROM存储器、ADC转换器等。
I2C接口的基本特性包括:
两线制:SCL(串行时钟线)和SDA(串行数据线)。
主从模式:支持一个主设备和多个从设备。
多主设备控制:可以支持多个主设备在同一总线上通信。
数据传输速率:标准模式下为100kbps,快速模式下为400kbps,高速模式下为3.4Mbps。
2.I2C接口的寄存器
LPC1700系列的I2C接口通过一系列寄存器来控制其操作。这些寄存器包括:
I2C_CONSET:用于设置I2C接口的操作模式和使能。
I2C_CONCLR:用于清除I2C接口的操作模式和使能。
I2C_SCLA:设置SCL线的时钟分频器。
I2C_SCL:设置SDA线的时钟分频器。
I2C_SDATASET:用于设置SDA线的状态。
I2C_SDATACLR:用于清除SDA线的状态。
I2C_STAT:显示I2C接口的状态。
I2C_DATA:用于读取或写入数据。
I2C_TXFIFO:发送数据FIFO。
I2C_RXFIFO:接收数据FIFO。
I2C_CONSET_I2EN:使能I2C接口。
I2C_CONSET_AA:应答使能。
I2C_CONSET_SI:状态指示。
I2C_CONSET_STA:启动条件。
I2C_CONSET_STO:停止条件。
I2C_CONSET_AA:应答使能。
I2C_CONSET_SI:状态指示。
I2C_CONCLR_I2ENC:清除I2C使能。
I2C_CONCLR_AAC:清除应答使能。
I2C_CONCLR_SIC:清除状态指示。
I2C_CONCLR_STAC:清除启动条件。
I2C_CONCLR_STOC:清除停止条件。
3.I2C接口的初始化
在使用I2C接口之前,需要对其进行初始化。初始化步骤包括设置时钟分频器、使能I2C接口、配置主从模式等。
#includeLPC17xx.h
voidI2C_Init(uint32_ti2cClock){
//使能I2C的时钟
LPC_SC-PCONP|=(122);//PCONP:I2C0
LPC_SC-PCONP|=(123);//PCONP:I2C1
//配置I2C的引脚
LPC_PINCON-PINSEL1=~(0x0F12);//清除I2C0的SCL和SDA引脚配置
LPC_PINCON-PINSEL1|=(0x0512);//设置I2C0的SCL和SDA引脚
//设置I2C时钟分频器
LPC_I2C0-I2C_SCLH=(i2cClock/100000)/2;
LPC_I2C0-I2C_SCLL=(i2cClock/100000)/2;
//使能I2C接口
LPC_I2C0-I2C_CONSET=(17);//使能I2C接口
}
4.I2C接口的主模式操作
在主模式下,LPC1700系列单片机可以主动发起通信,读取或写入数据。
4.1发送数据
发送数据时,主设备首先发送启动条件,然后发送从设备的地址和读写标志,接着发送数据,最后发送停止条件。
voidI2C_MasterSend(uint8_tslaveAddress,uint8_t*data,uint32_tlength){
//发送启动条件
LPC_I2C0-I2C_CONSET=(12);//设置启动条件
//等待启动条件完成
while(!(LPC_I2C0-I2C_CONSET(17)));//等待状态指示
//发送从设备地址和写标志
LPC_I2C0-I2C_DATA=(slaveAddress1)|0;//写标志为0
LPC_I2C0-I2C_CONSET=(12);//设置启动条件
//等待应答
while(!(LPC_I2C0-I2C_CONSET(17)));
//发送数据
for(uint32_ti=0