LPC1114 -I2C

一.硬件I2c

SDA 和 SCL 都是双向线路。连接到总线的器件的输出级必须是漏极开路或集电极开路,都通过一个电流源或上拉电阻连接到正的电源电压,这样才能够实现“线与”功能。当总线空闲时,这 2 条线路都是高电平。

/*******************************************************************************
Function: I2C_Init 
Description: 硬件I2C初始化
Input:   Mode :0 , 慢速模式   1 , 快速模式
Output: 无
Return: 无
*******************************************************************************/
void I2C_Init(uint8_t Mode) 
{
    SYSCON->PRESETCTRL |= (1<<1);      // De-asserted I2C模块(在启动I2C模块之前,必须向该位写1)
    SYSCON->SYSAHBCLKCTRL |= (1<<5);   // 使能I2C时钟
    SYSCON->SYSAHBCLKCTRL |= (1<<16);  // 使能IOCON时钟
    IOCON->PIO0_4 &= ~0x3F;        
    IOCON->PIO0_4 |= 0x01;              // 把P0.4脚配置为 I2C SCL 
    IOCON->PIO0_5 &= ~0x3F;    
    IOCON->PIO0_5 |= 0x01;              // 把P0.5脚配置为 I2C SDA 
    SYSCON->SYSAHBCLKCTRL |= (1<<16);   // 禁能IOCON时钟 
    if(Mode == 1)                        // 快速I2C通信 (大约400KHz传输速率)(AT24C02支持400K快速模式)
    {
        I2C->SCLH = 47;                  // 0.8us
        I2C->SCLL = 93;                  // 1.4us
    }
    else                                 // 低速I2C通信     (大约100KHz传输速率)
    {
        I2C->SCLH = 47*4;                // 3.2us
        I2C->SCLL = 93*4;                // 5.6us
     }
       I2C->CONCLR = 0xFF;               // 清所有标志
       I2C->CONSET |= I2CONSET_I2EN;     // 使能I2C接口
}
  • PRESETCTRL

注:在使用 SSP 和 I2C 前必须在相应的复位控制位写“1”来取消其复位,才可以正常操作。

SYSCON->PRESETCTRL |= (1<<1); //对第一位写1,取消复位

  • IOCON->PIO0_4 &= ~0x3F;

0x3F:0011 1111

~0x3F: 1100 0000

PIO0_4: 0100 0000 0000 0100 0100 0000 0011 0000

/*******************************************************************************
Function: I2C_stop 
Description: 发送停止信号
Input:  无               
Output: 无
Return: 无
*******************************************************************************/
void I2C_Stop(void)
{
   I2C->CONCLR = I2CONCLR_SIC;      // 清SI标志位
   I2C->CONSET |= I2CONSET_STO;     // 发送停止信号
}
  • #define I2CONCLR_SIC (1<<3) // 清I2C中断标志位

I2C->CONCLR = (1<<3)

SIC 是 I2C 中断清除位。在 CONSET 寄存器中写 1 将清除 SI 位,写 0 无效。

  • I2C->CONSET |= I2CONSET_STO; // 发送停止信号

#define I2CONSET_STO(1<<4) // 停止标志位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值