#ifndef AT24C128_H #define AT24C128_H #include "gd32f10x.h" #ifdef TY_0904 #define IIC_WP_PORT GPIOD #define IIC_WP_PIN GPIO_PIN_8 #define IIC_SDA_PORT GPIOB #define IIC_SDA_PIN GPIO_PIN_11 #define IIC_SCL_PORT GPIOB #define IIC_SCL_PIN GPIO_PIN_10 //https://blog.csdn.net/fireboyorhotboy/article/details/92645607 //#define SDA_IN() {gpio_init(IIC_SDA_PORT,GPIO_MODE_IPD,GPIO_OSPEED_50MHZ,IIC_SDA_PIN);} //#define SDA_OUT() {gpio_init(IIC_SDA_PORT,GPIO_MODE_OUT_OD,GPIO_OSPEED_50MHZ,IIC_SDA_PIN);} #define SDA_IN() {GPIO_CTL1(GPIOB) &= 0xFFFF0FFF;GPIO_CTL1(GPIOB) |= ((uint32_t)8<<(4*3));} //PB11 输入模式 #define SDA_OUT() {GPIO_CTL1(GPIOB) &= 0xFFFF0FFF;GPIO_CTL1(GPIOB) |= ((uint32_t)7<<(4*3));} //PB11 输出模式,开漏输出 #define IIC_SCL(n) (n?gpio_bit_set(IIC_SCL_PORT, IIC_SCL_PIN):gpio_bit_reset(IIC_SCL_PORT, IIC_SCL_PIN)) #define IIC_SDA(n) (n?gpio_bit_set(IIC_SDA_PORT, IIC_SDA_PIN):gpio_bit_reset(IIC_SDA_PORT, IIC_SDA_PIN)) #define READ_SDA gpio_input_bit_get(IIC_SDA_PORT, IIC_SDA_PIN) //输入SDA #else #define IIC_WP_PORT GPIOB #define IIC_WP_PIN GPIO_PIN_5 #define IIC_SDA_PORT GPIOB #define IIC_SDA_PIN GPIO_PIN_7 #define IIC_SCL_PORT GPIOB #define IIC_SCL_PIN GPIO_PIN_6 //https://blog.csdn.net/fireboyorhotboy/article/details/92645607 //#define SDA_IN() {gpio_init(IIC_SDA_PORT,GPIO_MODE_IPD,GPIO_OSPEED_50MHZ,IIC_SDA_PIN);} //#define SDA_OUT() {gpio_init(IIC_SDA_PORT,GPIO_MODE_OUT_OD,GPIO_OSPEED_50MHZ,IIC_SDA_PIN);} #define SDA_IN() {GPIO_CTL0(GPIOB) &= 0x0FFFFFFF;GPIO_CTL0(GPIOB) |= ((uint32_t)8<<(4*7));} //PB11 输入模式 #define SDA_OUT() {GPIO_CTL0(GPIOB) &= 0x0FFFFFFF;GPIO_CTL0(GPIOB) |= ((uint32_t)7<<(4*7));} //PB11 输出模式,开漏输出 #define IIC_SCL(n) (n?gpio_bit_set(IIC_SCL_PORT, IIC_SCL_PIN):gpio_bit_reset(IIC_SCL_PORT, IIC_SCL_PIN)) #define IIC_SDA(n) (n?gpio_bit_set(IIC_SDA_PORT, IIC_SDA_PIN):gpio_bit_reset(IIC_SDA_PORT, IIC_SDA_PIN)) //#define IIC_SCL_HIGH gpio_bit_set(IIC_SCL_PORT, IIC_SCL_PIN) //#define IIC_SCL_LOW gpio_bit_reset(IIC_SCL_PORT, IIC_SCL_PIN) //#define IIC_SDA_HIGH gpio_bit_set(IIC_SDA_PORT, IIC_SDA_PIN) //#define IIC_SDA_LOW gpio_bit_reset(IIC_SDA_PORT, IIC_SDA_PIN) #define READ_SDA gpio_input_bit_get(IIC_SDA_PORT, IIC_SDA_PIN) //输入SDA #endif //IIC1 //#define IIC_WP_PORT GPIOB //#define IIC_WP_PIN GPIO_Pin_5 //#define IIC_SDA_PORT GPIOB //#define IIC_SDA_PIN GPIO_Pin_7 //#define IIC_SCL_PORT GPIOB //#define IIC_SCL_PIN GPIO_Pin_6 //#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;} //PB7输入模式,(7-0)*4=28 ////#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;} //PB7输出模式,(7-0)*4=28 //推挽输出 //#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)7<<28;} //PB7输出模式,(7-0)*4=28 //开漏输出 //#define IIC_SCL PBout(6) //SCL //#define IIC_SDA PBout(7) //SDA //#define READ_SDA PBin(7) //输入SDA //////////////////////////////////////////////////////////////////////////////////////////// #define HIGH 1 #define LOW 0 #define PinInput 1 #define PinOutput 0 //写保护,低电平关闭,可以写入;高电平打开,不能写入 #define IIC_WRITE_PROTECT_ENABLE() {gpio_bit_set(IIC_WP_PORT, IIC_WP_PIN);} #define IIC_WRITE_PROTECT_DISABLE() {gpio_bit_reset(IIC_WP_PORT, IIC_WP_PIN);} #define E_DELAY 2 // 两个EEPROM命令之间的间隔 extern u8 iic_cmd_delay; void I2C_init(void); extern u8 AT24CXX_ReadOneByte(u32 ReadAddr); extern void AT24CXX_WriteOneByte(u32 WriteAddr,u8 DataToWrite); extern void AT24CXX_Read(u32 ReadAddr,u8 *pBuffer,u16 NumToRead); extern void AT24CXX_Write(u32 WriteAddr,u8 *pBuffer,u16 NumToWrite); extern void AT24CXX_clr(u32 WriteAddr,u32 NumToWrite); extern void IIC_Start1(void); void IIC_Stop(void); u8 IIC_Wait_Ack(void); void IIC_Ack(void); void IIC_NAck(void); void IIC_Send_Byte(u8 txd); uint8_t I2C_Test(void); void delay_nop(void); #define EEPROM_INFO(fmt,arg...) printf("<<-EEPROM-INFO->> "fmt"\n",##arg)//OTP_TRACE(fmt,##arg)//trace_otp_trace1(uart_msg_send, 4, fmt, ##arg); #define EEPROM_ERROR(fmt,arg...) //printf("<<-EEPROM-ERROR->> "fmt"\n",##arg) #define EEPROM_DEBUG(fmt,arg...) /*do{\ if(EEPROM_DEBUG_ON)\ printf("<<-EEPROM-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg);\ }while(0)*/ #endif