一直以来都听说AVR对EEPROM的操作存在很多风险 但对具体的情况却不甚了了 请有经验的老手指点指点
附段代码: /** * @brief 写EEPROM一个字节 * * @param uiAddress EEPROM的地址 * @param ucData 写入的数据 */ void eeprom_write_byte(unsigned int uiAddress,unsigned char ucData) { char cSREG; cSREG = SREG; /* 保存SREG */ /* 禁止中断*/ cli();
/* 等待上一次写操作结束 */ while(EECR & (1<<EEWE)) {} /* 设置地址和数据寄存器*/ EEAR = uiAddress; EEDR = ucData;
/* 置位EEMWE */ EECR |= (1<<EEMWE); /* 置位EEWE 以启动写操作*/ EECR |= (1<<EEWE);
sei(); // SREG = cSREG; /* 恢复SREG (I 位) */ } /** * @brief 读EERPOM一个字节 * * @param uiAddress EEPROM的地址 */ unsigned char eeprom_read_byte(unsigned int uiAddress) { cli(); /* 等待上一次写操作结束 */ while(EECR & (1<<EEWE)) { } /* 设置地址寄存器*/ EEAR = uiAddress; /* 设置EERE 以启动读操作*/ EECR |= (1<<EERE); /* 自数据寄存器返回数据 */ sei(); return EEDR;//返回读取到的数据 }
|