📄 iic.c
字号:
#include <csl.h>
#include <csl_chip.h>
#include <csl_gpio>
#include <csl_I2C.h>
#define setMST (I2CMDR |= 0x0400)
#define setTRX (I2CMDR |= 0x0200)
#define clrTRX (I2CMDR &= 0xfdff)
#define enI2C (I2CMDR |= 0x0020)
#define disI2C (I2CMDR &= 0xffdf)
#define setSTT (I2CMDR |= 0x2000)
#define setSTP (I2CMDR |= 0x0800)
#define setRM (I2CMDR |= 0x0080)
#define clrRM (I2CMDR &= 0xff7f)
#define setNACKMOD (I2CMDR |= 0x8000)
#define sendByte(sndbyte) (I2CDXR = (sndbyte) & 0x00ff)
#define setCNT(sndcnt) (I2CCNT = (sndcnt))
#define setNACK ((I2CSTR) |= 0x0002)
#define valBB (I2CSTR & 0x1000)
#define valARDY (I2CSTR & 0x0004)
#define valNACKSNT (I2CSTR & 0x2000)
#define valXRDY (I2CSTR & 0x0010)
#define valRRDY (I2CSTR & 0x0008)
#define valNACK (I2CSTR & 0x0002)
#define valI2CMDR I2CMDR
#define valI2CSTR I2CSTR
void delay();
void main()
{
int i=0;
Int16 outdata, indata[0x20], initdata=0;
CSL_init();
initdata = 0;
for (i=0;i<0x20;i++) indata[i]=0;
{
outdata = initdata++;
disI2C;
setMST;
setTRX;
setNACK;
setRM;
I2CCLKL = 0x0100;
I2CCLKH = 0x0100;
I2CSAR = 0x50;
I2COAR = 0x01;
I2CCNT = 0x10;
enI2C;
setSTT;
do {
if (valXRDY)
{sendByte(0x00);
break;}
} while(1);
do {
if (valXRDY)
{sendByte(0x00);
break;}
} while(1);
for (i=0;i<0x020;i++)
{
do {
if (valXRDY)
{sendByte(outdata++);
break;}
} while(1);
}
}
setSTP;
delay();
setMST;
setTRX;
setNACK;
setRM;
setSTT;
do {
if (valXRDY)
{sendByte(0x00);
break;}
} while(1);
do {
if (valXRDY)
{sendByte(0x00);
break;}
} while(1);
clrTRX;
setSTT;
for (i=0;i<0x020;i++)
{
do {
if (valRRDY)
{indata[i]=I2CDRR;
break;}
} while(1);
}
setNACKMOD;
delay();
setSTP;
delay();
while(1){;} //stop here
} //end main
void delay()
{
Uint32 j=0, k=0;
for (j=0;j<0x5;j++)
{
for(k=0;k<0xffff;k++)
{}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -