×
嵌入式 > 嵌入式开发 > 详情

LPC2200的I2C从模式

发布时间:2020-07-24 发布时间:
|
最近使用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=0;
I2SCLL=0;
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 0:
I2cFlag=1; //结束,设置I2C成功接收标志。
break;

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

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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
五大标准轻松搞定4K超高清电视选购