新闻中心

EEPW首页>嵌入式系统>设计应用> 有关I2C设计时应注意的细节问题

有关I2C设计时应注意的细节问题

作者: 时间:2016-11-21 来源:网络 收藏
1,在硬件设计时,要注意SCL和SDA线要加10K的上拉电阻,因为其端口配置内部没有上拉电阻,要不然两端口在初始状态下为低电平,在软件操作I2C总线置STA信号时是不会有反应的。

2,要注意检查下功率控制寄存器PCONP相应位,确保该功能模块是打开的。

本文引用地址://m.amcfsurvey.com/article/201611/319140.htm

3 如果根据I2C状态字进行相应处理采用中断方式的话,还应中断的相关设置。

【1】对于LPC21xx,I2C初始化应该如下:

static voidBSP_I2C_Init(CPU_INT32U fi2c)
{
CPU_INT32U Fpclk = BSP_CPU_PclkFreq();

//PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 设置I2C控制口有效
PINSEL0_bit.P0_2 = 1;//设置I/O口工作模式,使用I2C0口,P0.2,P0.3和UART0的P0.0,P0.1。其余口为GPIO口
PINSEL0_bit.P0_3 = 1;

PCONP_bit.PCI2C = 1; //配置PCONP功率模块使能I2C
if(fi2c>400000) fi2c = 400000;

I2SCLH = (Fpclk/fi2c + 1) / 2;//高电平占空比寄存器
I2SCLL = (Fpclk/fi2c) / 2;//低电平占空比寄存器
//配置成I2C主模式
I2CONCLR = STA|SI|AA|STO;//分别为:起始标志(STA)|I2C中断标(SI)|应答标志(AA)|停止标志(STO)
I2CONSET = I2CEN;//I2EN=1,使能I2C功能


// 设置I2C中断允许
VICIntSelect &= ~(1 << VIC_I2C);// 设置所有通道为IRQ中断
VICVectCntl4 = 0x20|VIC_I2C;// I2C通道分配到IRQ slot 0,即优先级最高
VICVectAddr4 = (CPU_INT32U)I2C_IRQ_ISR_handler;// 设置I2C中断向量地址
VICIntEnable |= (1 << VIC_I2C);// 使能I2C中断
}

注意上面蓝色粗体部分,搞错了就不会进入中断或者导致其它中断源进入中断,VIC_I2C为通道号,细节参考其用户手册。

【2】启动I2C总线,代码如下:

I2CONCLR = STA|SI|AA; //0x2C;//起始标志(STA)|I2C中断标(SI)|应答标志(AA)
I2CONSET = I2CEN|STA;//0x60;//I2C接口使能,设置为主机,并启动总线
//I2CONSET = STA;//置位 STA进入I2C主发送器模式,启动发送START脉冲
while(0==I2C_end);//等待中断
if(1==I2C_end) return(1);
else return(0);

只有设置的起始标志位,才能启动I2C总线。

上面的代码是参考周立功官网的实验例程,蓝色字体是做的修改。



评论


技术专区

关闭