📄 a0c9e814534b001a1b0cecf7513195ea
字号:
#include "system.h"
#include "altera_avalon_pio_regs.h"
void delayic(int n)
{
int i;
for(i=0;i<n;i++);
}
void ic_start()
{
IOWR_ALTERA_AVALON_PIO_DIRECTION(I2C_SDA_BASE, 0X01);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_sda_BASE, 0X01);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X01);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SDA_BASE, 0X00);
}
void ic_stop()
{
IOWR_ALTERA_AVALON_PIO_DIRECTION(I2C_SDA_BASE, 0X01);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SDA_BASE, 0X00);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X01);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SDA_BASE, 0X01);
}
void ic_ack()
{
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X00);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SDA_BASE, 0X00);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X01);
delayic(1);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X00);
}
void shift8(unsigned char a)//???
{
unsigned char i;
for(i=0;i<8;i++)
{
delayic(1);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X00);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SDA_BASE, a>>7);
a=a<<1;
delayic(1);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X01);
}
ic_ack();
}
unsigned char rd_24c01(unsigned char a)//?????a???
{
unsigned char i,d=0;
ic_start();
shift8(0xa0);
shift8(a);
ic_start();
shift8(0xa1);
IOWR_ALTERA_AVALON_PIO_DIRECTION(I2C_SDA_BASE, 0X00);
for (i = 1; i <= 8; i++)
{
delayic(1);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X00);
delayic(1);
IOWR_ALTERA_AVALON_PIO_DATA(I2C_SCL_BASE, 0X01);
d = d << 1;
d |=IORD_ALTERA_AVALON_PIO_DATA(I2C_SDA_BASE);
}
IOWR_ALTERA_AVALON_PIO_DIRECTION(I2C_SDA_BASE, 0X01);
ic_stop();
return d;
}
//?????a????b???
void wr_24c01(unsigned char a,unsigned char b)
{
ic_start();
shift8(0xa0);
shift8(a);
shift8(b);
ic_stop();
}
void initialic()
{
IOWR_ALTERA_AVALON_PIO_DIRECTION(I2C_SDA_BASE, 0X01);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -