微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC2200的I2C从模式

LPC2200的I2C从模式

时间:11-11 来源:互联网 点击:
最近使用LPC2214的I2C总线,一开始使用PHILIPS感觉非常的不方便,因为他要从其状态中读出数值进行判断,这样做无形中要增加软件难度,但是其寄存器确是非常的简单,只有一个要仔细的看,那就是I2CONSET这一个。

对于从模式,AA当然要设置为1,I2ADR也一定要设置,这是主器件寻址的地址;在此设为0x98,最后一位表示广播模式,根据情况要不要置一;这里还有一个重要的是VPBdiv的设置,注意VPBdiv与I2SCLH、I2SCLL这两寄存器要匹配,否则I2C总线则可能不工作,这是比较容易犯错误的地方,下面是我的一些程序与设置,希望做个参考,也希望我以后用起来也方便,因为如果长时间不用,总是要再查一次资料,那样浪费很多时间

一、初始化部分

void I2cInit()
{

VPBdiv=0x01;

//在前面要有上面这句
I2cFlag=0x00;
I2cNum=0x00;
I2cBuf=databuf; //databuf是一个要存贮数据的数组
I2cSla=LPC934CONGADD; //No Use.
I2ADR=LPC2000CONGADD;
I2SCLH=0xa0;
I2SCLL=0xa0;
I2CONSET=0x44; //使能I2C,
VICIntSelect=0x00000000;
VICVectCntl2=0x00000029;
VICVectAddr2=(uint32)IRQ_I2C;
VICIntEnable=0x00004210; //中断部分。
}

二、中断程序部分

void IRQ_I2C(void) __irq
{
unchar sta;
sta=I2STAT; //查询状态。

switch(sta)
{
case 0x60:
case 0x68:
case 0x70:
case 0x78: //I2C开始,把读数据的数组等初始化。
I2cBuf=databuf;
I2cNum=0x00;
I2cFlag=0;
break;
case 0x80:
case 0x88:
case 0x90:
case 0x98:
*I2cBuf++=I2DAT; //这几种状态是读数据,无论广播还是寻址。
I2cNum++;
break;
case 0xa0:
I2cFlag=1; //结束,设置I2C成功接收标志。
break;

}
I2CONCLR=0x28;
VICVectAddr=0x00; //清SI,清中断。
}

以上就是我把LPC2214做为从机的设置。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top