.H
#ifndef __MYAT24_H
#define __MYAT24_H
#include "ti_msp_dl_config.h"
#define I2C_ADDRESS_AT24C02 0x50 // AT24C02的I2C地址
void AT24C02_Init(void);
void AT24C02_WriteByte(uint8_t addr, uint8_t dat);
uint8_t AT24C02_ReadByte(uint8_t addr);
#endif
.C
#include "myat24.h"
void AT24C02_Init(void) {
}
void AT24C02_WriteByte(uint8_t addr, uint8_t dat) {
uint8_t temp[2];
temp[0] = addr;
temp[1] = dat;
DL_I2C_fillControllerTXFIFO(I2C_1_INST, temp, 2);
while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
DL_I2C_startControllerTransfer(I2C_1_INST, I2C_ADDRESS_AT24C02, DL_I2C_CONTROLLER_DIRECTION_TX, 2);
while (DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
DL_I2C_flushControllerTXFIFO(I2C_1_INST);
}
uint8_t AT24C02_ReadByte(uint8_t addr) {
uint8_t data;
DL_I2C_fillControllerTXFIFO(I2C_1_INST, &addr, 1);
while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
DL_I2C_startControllerTransfer(I2C_1_INST, I2C_ADDRESS_AT24C02, DL_I2C_CONTROLLER_DIRECTION_TX, 1);
while (DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
DL_I2C_flushControllerTXFIFO(I2C_1_INST);
DL_I2C_startControllerTransfer(I2C_1_INST, I2C_ADDRESS_AT24C02, DL_I2C_CONTROLLER_DIRECTION_RX, 1);
while (DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
while (!(DL_I2C_getControllerStatus(I2C_1_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
data = DL_I2C_receiveControllerData(I2C_1_INST);
return data;
}