I2C

1. 平台简述
  • 所用开发板为基于ARM Cortex-M0 的LPC111x/LPC11Cxx 系列微控制器
  • 低功耗,32 位微控制器家族中的一员,面向8、16 位微处理应用,具有高性能,低功耗,简单指令集,统一编址寻址等优点,而且,相对于现在市场上存在的8/16 位架构来说,它有效的降低了代码长度。
2. I2C介绍

根据方向位的状态(读/ 写),在I2C 总线上可能:
有两种类型的数据传输:

  • 数据传输从一个主设备的发送器到一个从设备的接收器。主设备发送的第一个字节是从设备的地址。紧接着的是大量的数据字节。从设备在每个字节接收完成后返回一个应答位。
  • 数据传输从一个从设备的发送器到一个主设备的接收器。由主设备发送的第一个字节(从设备的地址),然后返回一个应答位,紧接着的数据字节由从设备传输到主设备。除了最后一个字节之外,主设备在其他每个字节接收完成之后返回一个应答位。在最后一个字节接收完成后,返回一个“ 非应答”。主设备产生的所有的串行时钟脉冲与起始(START)和停止(STOP)条件。一次传输由STOP 条件或重复START 条件来结束。由于重复START 条件将开始下一个串行传输,故I2C 总线不会被释放。
    I2C总线配置
3. I2C初始化

I2C 总线接口通过以下寄存器进行配置:

  1. 引脚: I2C引脚功能和I2C模式都通过IOCONFIG寄存器进行配置。
  2. 电源和外设时钟: 通过SYSAHBCLKCTRL 寄存器中第5位进行设置
  3. 复位: 再访问I2C模块之前,确保PRESETCTRL寄存器中I2C_RST_N 位被设置为1.这将拉高I2C模块的复位信号。
  4. I2C频率设置与使能
  • 引脚与模式配置
    选择管脚功能SCL
    选择管脚功能SDA

    	LPC_IOCON->PIO0_4 = 0x01;//管脚复用选择i2c
    	LPC_IOCON->PIO0_5 = 0x01;//管脚复用选择i2c
    	/*I2CMODE默认为00---->标准模式/快速I2C模式*/
    
  • 电源和外设时钟配置
    系统 AHB 时钟控制寄存器(SYSAHBCLKCTRL) 寄存器第5位置1,允许I2C时钟
    电源和外设时钟配置

    	LPC_SYSCON->SYSAHBCLKCTRL |= 1 << 5;//i2c时钟允许位
    
  • 复位设置

    	//在访问SPI和I2C外设之前,要写1到相应位中用以确保外设复位无效,I2C复位无效
    	LPC_SYSCON->PRESETCTRL |= 1 << 1;
    
  • 频率设置和使能

    	LPC_I2C->SCLH = 480;//决定i2c时钟高电平时间
    	LPC_I2C->SCLL = 480;//决定i2c时钟低电平时间
    	LPC_I2C->CONCLR |= (1 << 2) | (1 << 3) | (1 << 5) | (1 << 6);//i2c清除寄存器(写1清除 )
    	LPC_I2C->CONSET |= (1 << 6);//i2c接口允许
    
    • 第1,2行是通过设置SCLH和SCLL寄存器,决定I2C设备的占空比和频率

    频率公式
    设置值表

    • 第3,4行,向CONCLR对应位写入1是将CONSET对应位清0,向CONSET对应位写1是置1。
      因为要设置设备为主发送模式,所以在这种模式下,数据从主设备传输到从设备。在可以进入主发送模式之前,必须如下表所示初始化CONSET 寄存器。
      CONSET配置
      I2EN 必须设置为1,以允许I2C 功能。如果AA位为0,当其他设备是总线主机时, I2C 接口将不识别任何地址,所以它不能进入从模式。 STA、STO和SI 位必须为0,其中SI 位可以通过写‘1’ 到CONCLR寄存器的SIC 位来清除;STA 位必须在写从地址之后清除。
void i2c_init(void)
{
   
	//基本配置
	LPC_SYSCON->PRESETCTRL |= 1 << 1;//在访问SPI和I2C外设之前,要写1到相应位中用以确保外设复位无效,I2C复位无效
	LPC_SYSCON->SYSAHBCLKCTRL |= 1 << 5;//i2c时钟允许位
	LPC_IOCON->PIO0_4 = 0x01;//管脚复用选择i2c
	LPC_IOCON->PIO0_5 = 0x01;//管脚复用选择i2c
	
	LPC_I2C->SCLH = 480;//决定i2c时钟高电平时间
	LPC_I2C->SCLL = 480;//决定i2c时钟低电平时间
	LPC_I2C->CONCLR |= (1 << 2) | (1 << 3) | (1 << 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值