新聞中心

LPC2200的I2C從模式

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
最近使用LPC2214的I2C總線,一開(kāi)始使用PHILIPS感覺(jué)非常的不方便,因?yàn)樗獜钠錉顟B(tài)中讀出數(shù)值進(jìn)行判斷,這樣做無(wú)形中要增加軟件難度,但是其寄存器確是非常的簡(jiǎn)單,只有一個(gè)要仔細(xì)的看,那就是I2CONSET這一個(gè)。

對(duì)于從模式,AA當(dāng)然要設(shè)置為1,I2ADR也一定要設(shè)置,這是主器件尋址的地址;在此設(shè)為0x98,最后一位表示廣播模式,根據(jù)情況要不要置一;這里還有一個(gè)重要的是VPBDIV的設(shè)置,注意VPBDIV與I2SCLH、I2SCLL這兩寄存器要匹配,否則I2C總線則可能不工作,這是比較容易犯錯(cuò)誤的地方,下面是我的一些程序與設(shè)置,希望做個(gè)參考,也希望我以后用起來(lái)也方便,因?yàn)槿绻L(zhǎng)時(shí)間不用,總是要再查一次資料,那樣浪費(fèi)很多時(shí)間

本文引用地址:http://butianyuan.cn/article/201611/316610.htm

一、初始化部分

void I2cInit()
{

VPBDIV=0x01;

//在前面要有上面這句
I2cFlag=0x00;
I2cNum=0x00;
I2cBuf=databuf; //databuf是一個(gè)要存貯數(shù)據(jù)的數(shù)組
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; //查詢狀態(tài)。

switch(sta)
{
case 0x60:
case 0x68:
case 0x70:
case 0x78: //I2C開(kāi)始,把讀數(shù)據(jù)的數(shù)組等初始化。
I2cBuf=databuf;
I2cNum=0x00;
I2cFlag=0;
break;
case 0x80:
case 0x88:
case 0x90:
case 0x98:
*I2cBuf++=I2DAT; //這幾種狀態(tài)是讀數(shù)據(jù),無(wú)論廣播還是尋址。
I2cNum++;
break;
case 0xa0:
I2cFlag=1; //結(jié)束,設(shè)置I2C成功接收標(biāo)志。
break;

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

以上就是我把LPC2214做為從機(jī)的設(shè)置。



關(guān)鍵詞: LPC2200I2C從模

評(píng)論


技術(shù)專區(qū)

關(guān)閉