最近运用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做为从机的设置。