?? cat24wc02.c
字號:
/****************************************************************************
* 文件名:CAT24WC02.C
* 功能:使用LPC2200模擬EEPROM器件CAT24WC02。LPC2200具有硬件I2C接口,使用其從方式進(jìn)行
* I2C器件模擬,本例使用了256字節(jié)的RAM作為存儲單元。
* 說明:將跳線器JP5斷開,然后與主機(jī)連接(連接信號為P0.3、P0.2、GND,要接總線上拉電阻)。
****************************************************************************/
#include "config.h"
#define CAT24WC02 0xA0 /* 定義從要地址,忽略通用地址 */
uint8 eeprom[256]; /* 定義EEPROM存儲單元,256字節(jié) */
uint8 adrpoint; /* 定義EEPROM讀寫操作指針 */
uint8 slarv; /* 定義子地址接收標(biāo)志,為1時表示己接收從機(jī)地址 */
/****************************************************************************
* 名稱:IRQ_I2C()
* 功能:I2C中斷服務(wù)函數(shù),實規(guī)從機(jī)操作。
* 入口參數(shù):無
* 出口參數(shù):無
****************************************************************************/
void __irq IRQ_I2C(void)
{ uint8 sta;
sta = I2STAT; // 取得I2C狀態(tài)字
sta &= 0xF8;
switch(sta)
{ case 0x60: // 接收到自身SLA+W
case 0x68:
slarv = 0;
I2CONSET = 0x04;
break;
case 0xA8: // 接收到SLA+R,或已發(fā)送數(shù)據(jù)并接收到ACK位。
case 0xB0:
case 0xB8:
I2DAT = eeprom[adrpoint];
adrpoint++;
I2CONSET = 0x04;
break;
case 0x80: // 接收到數(shù)據(jù)
if(0==slarv)
{ adrpoint = I2DAT;
slarv = 1;
}
else
{ eeprom[adrpoint] = I2DAT;
adrpoint++;
}
I2CONSET = 0x04;
break;
case 0xA0: // 已發(fā)送數(shù)據(jù),并接收到非ACK
case 0xC0: // 總線結(jié)束,或總線重新啟動
default: // 其它狀態(tài)
I2CONSET = 0x04;
}
I2CONCLR = 0x38; // 清除標(biāo)I2C標(biāo)志位,STA、STO、SI
VICVectAddr = 0x00;
}
/****************************************************************************
* 名稱:I2C_SlaveInit()
* 功能:從模式I2C初始化,包括初始化其中斷為向量IRQ中斷。
* 入口參數(shù):adr 本從機(jī)地址
* 出口參數(shù):無
****************************************************************************/
void I2C_SlavInit(uint8 adr)
{ PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 設(shè)置I2C控制口有效
I2ADR = adr&0xFE; // 設(shè)置從機(jī)地址
I2CONCLR = 0x28;
I2CONSET = 0x44; // I2C配置為從機(jī)模式
/* 設(shè)置I2C中斷允許 */
VICIntSelect = 0x00000000; // 設(shè)置所有通道為IRQ中斷
VICVectCntl0 = 0x29; // I2C通道分配到IRQ slot 0,即優(yōu)先級最高
VICVectAddr0 = (int)IRQ_I2C; // 設(shè)置I2C中斷向量地址
VICIntEnable = 0x0200; // 使能I2C中斷
}
/****************************************************************************
* 名稱:main()
* 功能:初始化I2C口連接,并初始化向量中斷控制器。
* 說明:在STARTUP.S文件中使能IRQ中斷(清零CPSR中的I位)。
****************************************************************************/
int main(void)
{ adrpoint = 0;
slarv = 0;
I2C_SlavInit(CAT24WC02);
while(1); // 等待中斷
return(0);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -