最近在做滚动屏的项目涉及到存储芯片FM24CL16B,此芯片是I2C接口实现的,因此特地找了个GPIO模拟I2C接口来实现存储芯片的写入与读出。
**myi2c.c**
static void delay(void)
{
for (u8 i=0; i<5; i++);
}
/* I2C起始条件 */
void i2c_start(void)
{
//初始化GPIO口
AT91C_BASE_PIOA->PIO_OER = PA_09_I2C_SDA; //设置SDA方向为输出
AT91C_BASE_PIOA->PIO_OER = PA_10_I2C_SCL; //设置SCL方向为输出
AT91C_BASE_PIOA->PIO_SODR = PA_09_I2C_SDA; //设置SDA为高电平
AT91C_BASE_PIOA->PIO_SODR = PA_10_I2C_SCL; //设置SCL为高电平
delay(); //延时
//起始条件
AT91C_BASE_PIOA->PIO_CODR = PA_09_I2C_SDA; //SCL为高电平时,SDA由高变低
delay(); //延时
}
/* I2C终止条件 */
void i2c_stop(void)
{
AT91C_BASE_PIOA->PIO_OER = PA_09_I2C_SDA; //设置SDA方向为输出
AT91C_BASE_PIOA->PIO_OER =