📄 main.c
字号:
#define ALLOCATE_EXTERN
#include "DP8051.h"
#include "intrins.h"
#include "FS7822.h"
#define SLAVE_ADDRESS 0xAE
// I2C_CLK reg
#define bmI2CCK_DIV 0x54
#define bmCLK_PRE 0x40
#define I2C_EN 0x80
#define I2C_MODE 0x40
#define MST_MODE 0x20
#define START 0x02
#define STOP 0x01
void I2c_Init(BOOL isHigh);
void InitCPU();
BYTE I2c_SendStr(BYTE sla,BYTE *s,BYTE doffset,WORD no);
BYTE I2c_RcvStr(BYTE sla,BYTE *s,BYTE doffset,WORD Len);
void I2C_Write(unsigned char *input,unsigned short wordadd,unsigned char Len);
void I2C_Read(unsigned char *output,unsigned short wordadd,unsigned char Len);
void I2C_WriteRead(unsigned char *input,unsigned char *output,unsigned short wordadd,unsigned char Len);
void InitCPU()
{
SYS_CFG=bmCPUCLK_SEL|bmPM_AVBLE|bmSYS_SWRST; //select system clock,firmware dispose USB request, reset the device
SYSIO_CFG=bmSPI_EN|bmI2C_EN;
SW_RST=bmSPI_RST|bmI2C_RST;
BPPUCTL=bmSPIPUCTL;
MEMCON=bmMEMCON|bmASYN;
WDTRST = 0x2D;
}
void I2c_Init(BOOL isHigh)
{
SW_RST|=bmI2C_RST;
if(isHigh)
I2C_CLK = bmI2CCK_DIV; //400k
else
I2C_CLK = bmCLK_PRE|bmI2CCK_DIV; //100k
I2C_CTL |= 0x40; //Slave
I2C_MABT = 0x01;
}
idata BYTE writedata[30] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,\
0xBB,0xBA,0xCC,0xDD,0xEE,0xFF,0xAB,0xBC,0xCD,0xDE};
idata BYTE readdata[30];
#define Address_match 0x80
#define Slave_mode 0x40
BYTE datanum;
void WriteData(BYTE * writedata);
void ReadData(BYTE * readdata);
void WriteData(BYTE * writedata)
{
I2C_STUS = 0x03;
I2C_DBUF = *writedata;
}
void ReadData(BYTE * readdata)
{
*readdata = I2C_DBUF;
I2C_STUS = 0x01;
}
void I2C_INT_ISR(void) interrupt 7
{
if(CHIPINT & I2CINTE)
{
CHIPINT &= ~I2CINTE;
if(I2C_STUS & Slave_mode)
{
WriteData(writedata+datanum);
}
else
{
ReadData(readdata+datanum);
}
datanum++;
}
}
main()
{
WDTRST = 0x2D;
InitCPU();
I2c_Init(0);
EA = 1;
ES = 1;
I2C_SADDR = 0xEA;
CHIPINTE = CHIPINTE | I2CINTE;
while(1)
{
if(datanum == 20)
datanum = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -