📄 24c02.c
字号:
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
#define SetData GpioDataRegs.GPFDAT.bit.GPIOF12 = 1
#define ClrData GpioDataRegs.GPFDAT.bit.GPIOF12 = 0
#define SetClk GpioDataRegs.GPFDAT.bit.GPIOF8 = 1
#define ClrClk GpioDataRegs.GPFDAT.bit.GPIOF8 = 0
#define SetSDA GpioDataRegs.GPADAT.bit.GPIOA3 = 1
#define ClrSDA GpioDataRegs.GPADAT.bit.GPIOA3 = 0
#define SetSCL GpioDataRegs.GPADAT.bit.GPIOA2 = 1
#define ClrSCL GpioDataRegs.GPADAT.bit.GPIOA2 = 0
#define WriteDeviceAddress 0xa0
#define ReadDeviceAddress 0xa1
unsigned int *LedReg = (unsigned int *)0x27FF;
unsigned int *Led8Lock = (unsigned int *)0x2BFF;
Uint16 LedCount = 0;
Uint16 SpiCount = 0;
void SendData(Uint16 data);
Uint16 Read24c02(Uint16 *RamAddr, Uint16 RomAddress, Uint16 number);
Uint16 Write24c02(Uint16 *Wdata, Uint16 RomAddress, Uint16 number);
void main(void)
{
Uint16 dat1[8];
Uint16 dat[]={ 0x55,0x11,0x66,0x77,0x44,0x33,0x00,0x7};
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*初始化外设*/
InitPeripherals();
InitGpio();
*Led8Lock = 0X07;
*LedReg = 0xFF;
SendData(0xFF);
Write24c02(dat,0x00,8);
Read24c02(dat1,0x00,8);
for(;;);
}
void delay(Uint16 number)
{
Uint16 j;
for(j = 0;j < number;j++);
}
void SendData(Uint16 data)
{
Uint16 i,Temp;
Temp = 0x80;
for (i=0;i<8;i++)
{
if ((data & Temp)==0) ClrData;
else SetData;
Temp >>= 1;
ClrClk;
delay(10);
SetClk;
}
*Led8Lock = 0x03;
delay(10);
*Led8Lock = 0x07;
SetData;
}
void SDAIN(void)
{
EALLOW;
GpioMuxRegs.GPADIR.bit.GPIOA3 = 0;
EDIS;
}
void SDAOUT(void)
{
EALLOW;
GpioMuxRegs.GPADIR.bit.GPIOA3 = 1;
EDIS;
}
void IStart(void)
{
SDAOUT();
delay(50);
SetSDA;
SetSCL;
delay(15);
ClrSDA;
delay(5);
ClrSCL;
}
void IStop(void)
{
SDAOUT();
delay(50);
ClrSCL;
ClrSDA;
delay(15);
SetSCL;
delay(5);
SetSDA;
}
void IAck(void)
{
SDAOUT();
delay(50);
ClrSDA;
SetSCL;
delay(15);
ClrSCL;
delay(5);
SetSDA;
}
void INAck(void)
{
SDAOUT();
delay(50);
SetSDA;
SetSCL;
delay(15);
ClrSCL;
}
Uint16 TestAck(void)
{
Uint16 Temp;
SDAOUT();
delay(50);
SetSDA;
SetSCL;
delay(15);
SDAIN();
Temp = 0x0008 & GpioDataRegs.GPADAT.all;
ClrSCL;
return Temp;
}
void WriteByte(Uint16 data)
{
Uint16 i;
Uint16 Temp = 0x8000;
data = data<<8;
SDAOUT();
delay(50);
for(i=8;i!=0;i--)
{
if (Temp & data) SetSDA;
else ClrSDA;
SetSCL;
delay(15);
ClrSCL;
data = data<<1;
}
}
Uint16 ReadByte(void)
{
Uint16 i,T;
Uint16 Temp = 0x0000;
SDAIN();
delay(50);
for (i=8;i!=0;i--)
{
SetSCL;
Temp = Temp<<1;
T = GpioDataRegs.GPADAT.all;
T = T & 0x0008;
if (T) Temp = Temp | 1;
else Temp = Temp | 0;
delay(15);
ClrSCL;
}
return Temp;
}
Uint16 Write24c02(Uint16 *Wdata, Uint16 RomAddress, Uint16 number)
{
IStart();
WriteByte(WriteDeviceAddress);
if(TestAck()) return 1;
WriteByte(RomAddress);
if(TestAck()) return 1;
for(;number!=0;number--)
{
WriteByte(*Wdata);
if(TestAck()) return 1;
Wdata++;
}
IStop();
delay(10000);
return 0;
}
Uint16 Read24c02(Uint16 *RamAddr, Uint16 RomAddress, Uint16 number)
{
IStart();
WriteByte(WriteDeviceAddress);
if(TestAck()) return 1;
WriteByte(RomAddress);
if(TestAck()) return 1;
IStart();
WriteByte(ReadDeviceAddress);
if(TestAck()) return 1;
while(number!=1)
{
*RamAddr = ReadByte();
IAck();
RamAddr++;
number--;
}
*RamAddr = ReadByte();
INAck();
IStop();
return 0;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -