?? 2812i2c.c
字號:
// 啟動EEPROM
void I2c_Start(void)
{
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB0 = 1; // SDA
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1; // SCK
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0; // SDA
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0; // SCK
Delay(1);
}
// 停止EEPROM
void I2c_Stop(void)
{
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0; // SDA
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1; // SCK
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB0 = 1; // SDA
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0; // SCK
}
// 應答標志
void I2c_Ack(void)
{
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0; // SDA
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1; // SCK
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0; // SCK
Delay(1);
}
// 無應答標志
void I2c_Nack(void)
{
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB0 = 1; // SDA
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1; // SCK
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0; // SCK
Delay(1);
}
void I2c_Send_Byte(uint Data)
{
uint i=8;
while(i--)
{
Delay(1);
if(Data&0x80)
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 1; // SDA
}
else
{
GpioDataRegs.GPBDAT.bit.GPIOB0 = 0; // SDA
}
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1; // SCK
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0; // SCK
Data=Data<<1;
}
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB0 = 1; // SDA
Delay(1);
I2c_Gpio_In();
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1; // SCK
Delay(1);
if(GpioDataRegs.GPBDAT.bit.GPIOB0 == 0)
{
Delay(10);
}
else
{
Delay(10);
}
I2c_Gpio_Out();
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0; // SCK
Delay(1);
}
uint I2c_Receive_Byte(void)
{
uint i=8,Data=0;
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB0 = 1; // SDA
Delay(1);
I2c_Gpio_In();
while(i--)
{
Data=Data<<1;
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 1; // SCK
Delay(1);
if(GpioDataRegs.GPBDAT.bit.GPIOB0)
{
Data++;
}
Delay(1);
GpioDataRegs.GPBDAT.bit.GPIOB2 = 0; // SCK
Delay(1);
}
Delay(1);
I2c_Gpio_Out();
return Data;
}
void AT24C128_Write(uint Data,uint AT24C128_Address)
{
I2c_Gpio_Out();
I2c_Start();
I2c_Send_Byte(0xA0);
I2c_Send_Byte(AT24C128_Address/256);
I2c_Send_Byte(AT24C128_Address%256);
I2c_Send_Byte(Data);
I2c_Stop();
Delay(10);
}
void AT24C128_Read(uint AT24C128_Address)
{
I2c_Gpio_Out();
I2c_Start();
I2c_Send_Byte(0xA0);
I2c_Send_Byte(AT24C128_Address/256);
I2c_Send_Byte(AT24C128_Address%256);
I2c_Start();
I2c_Send_Byte(0xA1);
AT24C128_Data=I2c_Receive_Byte();
I2c_Nack();
I2c_Stop();
Delay(10);
}
// I2C SDA input
void I2c_Gpio_In(void)
{
EALLOW;
GpioMuxRegs.GPBMUX.all = 0x0000; // 設置為GPIO功能
GpioMuxRegs.GPBDIR.all = 0xFFFE; // 輸入設置為0輸出設置為1
EDIS;
}
// I2C SDA output
void I2c_Gpio_Out(void)
{
EALLOW;
GpioMuxRegs.GPBMUX.all = 0x0000; // 設置為GPIO功能
GpioMuxRegs.GPBDIR.all = 0xFFFF; // 輸入設置為0輸出設置為1
EDIS;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -