unsigned char EEPROM_ByteRead(unsigned char addr)
{
unsigned char retval; // 返回值临时变量
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = SMB0_PAGE;
while (SMB_BUSY); // 等待SMBus总线空闲
SMB_BUSY = 1; // 获取SMBus总线后,设置为总线忙
// 设置SMBus ISR中断服务程序参数
SMB_TARGET = EEPROM_ADDR; // 设置发送目标从地址为EEPROM器件地址
SMB_RW = EEPROM_WRITE; // 随机读首先发出启始条件并接着发出EEPROM地址+W(写操作用于设置EEPROM的器件地址)
// 在收到从器件的ACK后,主器件发出待读存储器地址。
// 在收到一个ACK后,主器件发出重复启始条件和从器件地址+R。
SMB_SENDWORDADDR = 1; // Send Word Address after Slave Address
SMB_RANDOMREAD = 1; // 置读为随机读(单个EEPROM读为单字节随机读)
SMB_ACKPOLL = 1; // 使能Acknowledge查询
// 输入数据明细
WORD_ADDR = addr; // 设置待读数据存储地址(EEPROM)
pSMB_DATA_IN = &retval; // 输入数据指针,指向返回变量
SMB_DATA_LEN = 1; // 设置待读数据长度
// 初始化SMBus发送
STA = 1; // 置SMBus起始标志
while(SMB_BUSY); // 等待直到数据被读。
SFRPAGE = SFRPAGE_SAVE;
return retval;
}
文章评论(0条评论)
登录后参与讨论