如何通過MAX2990 I2C接口向標準EEPROM (24C04)連接
現在,我們可以驗證一下用于EEPROM讀、寫操作的功能。
本文引用地址:http://m.butianyuan.cn/article/173171.htmi2c_init_write(void)i2c_init_read(void)i2c_write(UINT8 data)i2c_read(UINT8 *data)
void i2c_init_write(void){I2CCN_bit.I2CMODE = 0; // I2C transmit modeI2CCN_bit.I2CACK = 1; // Creates I2C NACK so that slave can create ACKI2C_START; // Generates I2C START conditionwhile( I2CCN_bit.I2CSTART == 1 ); // Waits until the START condition// was put to the I2C busI2CST_bit.I2CSRI = 0; // Resets the I2C interrupt flag}int i2c_init_read(void){I2CCN_bit.I2CMODE = 1; // I2C read-modeI2CCN_bit.I2CACK = 0; // Creates I2C ACK after receiveI2C_START; // Generates I2C START conditionwhile( I2CCN_bit.I2CSTART == 1 ); // Waits until the START conditionI2CST_bit.I2CSRI = 0; // Resets the I2C interrupt flag}void i2c_write(UINT8 data){I2CBUF = data; // Puts the data on the I2C buswhile( I2CST_bit.I2CTXI == 0 ); // Waits for transfer completeI2CST_bit.I2CTXI = 0; // Resets the I2C transmit complete// interrupt flag}void i2c_read(UINT8 *data){I2CBUF = 0xff; // Puts all ones on the I2C bus so that slave can pull// the bus down to generate zeroswhile( !I2CST_bit.I2CRXI ); // Waits for receive completeI2CST_bit.I2CRXI=0; // Resets the I2C receive complete// interrupt flag*data = I2CBUF; // Writes the data to the pointer}
評論