📄 24lcxx.c
字号:
#include "24LCXX.h"
#include "44b.h"
//Wr24LCxx(0xa0,04,0x55);
//Rd24LCxx(0xa0,04,&DAT3);
void IIC_Init(void)
{
rPCONF &= ~0x0f;
rPCONF |= 0x0a;
rPDATF |= 0x03;
rPUPF |= 0x03;
rIICCON=(1<<7)|(1<<6)|(1<<5)|(0x1F);
//Enable interrupt, IICCLK=MCLK/16, Enable ACK
//66Mhz/16/(15+1) = 257Khz
rIICADD=0x10; // S3C44B0X slave address
rIICSTAT=0x10;
}
void Wr24LCxx(unsigned int slvAddr,unsigned int addr,unsigned char data)
{
int i;
//==========================
rIICDS=slvAddr;//0xa0
rIICSTAT=0xF0; //MasTx,Start
while( !(rINTPND & BIT_IIC) );
rI_ISPC = BIT_IIC;
//==========================
rIICDS = (unsigned char)addr;
for(i=0;i<10;i++);
rIICCON=0xAF;
while( !(rINTPND & BIT_IIC) );
rI_ISPC = BIT_IIC;
//=========================
rIICDS = (unsigned char)data;
for(i=0;i<10;i++);
rIICCON=0xAF;
while( !(rINTPND & BIT_IIC) );
rI_ISPC = BIT_IIC;
//=========================
rIICSTAT=0xD0; //stop MasTx condition
rIICCON=0xAF; //resumes IIC operation.
for( i = 0 ; i < 2560 ; i++ ); //wait until stop condtion is in effect.
while(1)
{
rIICDS=slvAddr;
rIICSTAT=0xf0; //MasTx,Start
rIICCON=0xaf; //resumes IIC operation.
while( !(rINTPND & BIT_IIC) );
rI_ISPC = BIT_IIC;
if(!(rIICSTAT&0x1))
break; // when ACK is received
}
rIICSTAT =0xD0; //stop MasTx condition
rIICCON =0xAF; //resumes IIC operation.
for( i = 0 ; i < 2560 ; i++ );
}
unsigned char Rd24LCxx(unsigned int slvAddr,unsigned int addr)
{
int i;
unsigned char data;
rIICDS=slvAddr;
rIICSTAT=0xf0; //MasTx,Start
//Clearing the pending bit isn't needed because the pending bit has been cleared.
while( !(rINTPND & BIT_IIC) );
rI_ISPC = BIT_IIC;
//==========================
rIICDS = (unsigned char)addr;
for(i=0;i<10;i++);
rIICCON=0xAF;
while( !(rINTPND & BIT_IIC) );
rI_ISPC = BIT_IIC;
//================================
rIICDS=slvAddr;
rIICSTAT=0xb0; //MasRx,Start
rIICCON=0xaf; //resumes IIC operation.
while( !(rINTPND & BIT_IIC) );
rI_ISPC = BIT_IIC;
//=============================
rIICCON = 0x2f;
while( !(rINTPND & BIT_IIC) );
rI_ISPC = BIT_IIC;
//============================
data = rIICDS;
rIICSTAT=0x90; //stop MasRx condition
rIICCON=0xaf; //resumes IIC operation.
for( i = 0 ; i < 256 ; i++ ); //wait until stop condtion is in effect.
return data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -