Library emulating a 255 byte EEPROM in nRF24LE1 using the non-volatile data memory.
The library uses the two pages (total 512 bytes) of high endurance non-volatile data memory for emulating a 255-byte EEPROM.
Functions | |
void | lib_eeprom255_byte_write (uint8_t adr, uint8_t dat) |
void | lib_eeprom255_bytes_write (uint8_t adr, uint8_t *src, uint8_t n) |
uint8_t | lib_eeprom255_byte_read (uint8_t adr) |
void | lib_eeprom255_bytes_read (uint8_t adr, uint8_t *dst, uint8_t n) |
void lib_eeprom255_byte_write | ( | uint8_t | adr, |
uint8_t | dat | ||
) |
Function to write a byte to the EEPROM
adr | 8 bit address in EEPROM |
dat | byte to write |
Definition at line 30 of file lib_eeprom255_le1.c.
{ uint8_t xdata i; uint16_t xdata flash_dst_pn, xdata_dst_adr, flash_old_pn, xdata_old_adr; if(*((uint8_t xdata *)(PAGE_0_XDATA + BK_BYTE)) == 0xff) { flash_dst_pn = PAGE_0_FLASH_PN; xdata_dst_adr = PAGE_0_XDATA; flash_old_pn = PAGE_1_FLASH_PN; xdata_old_adr = PAGE_1_XDATA; } else { flash_dst_pn = PAGE_1_FLASH_PN; xdata_dst_adr = PAGE_1_XDATA; flash_old_pn = PAGE_0_FLASH_PN; xdata_old_adr = PAGE_0_XDATA; } if((*((uint8_t xdata *)(xdata_old_adr + adr))) != dat) { hal_flash_page_erase(flash_dst_pn); PCON &= ~(1 << 4); for(i = 0; i < 255; i++) { if(i == adr) { hal_flash_byte_write(xdata_dst_adr + adr, dat); } else { hal_flash_byte_write(xdata_dst_adr + i, *((uint8_t xdata *)(xdata_old_adr + i))); } } hal_flash_byte_write(xdata_dst_adr + BK_BYTE, 0); hal_flash_page_erase(flash_old_pn); } }
void lib_eeprom255_bytes_write | ( | uint8_t | adr, |
uint8_t * | src, | ||
uint8_t | n | ||
) |
Function to write n bytes to the EEPROM
adr | 8 bit address in EEPROM |
*src | pointer to bytes to write |
n | number of bytes to write |
Definition at line 84 of file lib_eeprom255_le1.c.
{ uint8_t xdata i; uint16_t xdata flash_dst_pn, xdata_dst_adr, flash_old_pn, xdata_old_adr; if(*((uint8_t xdata *)(PAGE_0_XDATA + BK_BYTE)) == 0xff) { flash_dst_pn = PAGE_0_FLASH_PN; xdata_dst_adr = PAGE_0_XDATA; flash_old_pn = PAGE_1_FLASH_PN; xdata_old_adr = PAGE_1_XDATA; } else { flash_dst_pn = PAGE_1_FLASH_PN; xdata_dst_adr = PAGE_1_XDATA; flash_old_pn = PAGE_0_FLASH_PN; xdata_old_adr = PAGE_0_XDATA; } for(i = 0; i < n; i++) { if((*((uint8_t xdata *)(xdata_old_adr + adr + i))) != src[i]) { break; } } if(i < n) { hal_flash_page_erase(flash_dst_pn); for(i = 0; i < 255; i++) { if(i >= adr && i < (adr + n)) { hal_flash_byte_write(xdata_dst_adr + i, src[i - adr]); } else { hal_flash_byte_write(xdata_dst_adr + i, *((uint8_t xdata *)(xdata_old_adr + i))); } } hal_flash_byte_write(xdata_dst_adr + BK_BYTE, 0); hal_flash_page_erase(flash_old_pn); } }
uint8_t lib_eeprom255_byte_read | ( | uint8_t | adr ) |
Function to read a byte from the EEPROM
adr | 8 bit address in EEPROM |
Definition at line 72 of file lib_eeprom255_le1.c.
{ if(*((uint8_t xdata *)(PAGE_0_XDATA + BK_BYTE)) == 0) { return (*((uint8_t xdata *)(PAGE_0_XDATA + adr))); } else { return (*((uint8_t xdata *)(PAGE_1_XDATA + adr))); } }
void lib_eeprom255_bytes_read | ( | uint8_t | adr, |
uint8_t * | dst, | ||
uint8_t | n | ||
) |
Function to read n bytes from the EEPROM
adr | 8 bit address in EEPROM |
*dst | pointer to bytes to write |
n | number of bytes to read |
Definition at line 132 of file lib_eeprom255_le1.c.
{ uint8_t xdata i; uint16_t xdata xdata_src_adr; if(*((uint8_t xdata *)(PAGE_0_XDATA + BK_BYTE)) == 0) { xdata_src_adr = PAGE_0_XDATA; } else { xdata_src_adr = PAGE_1_XDATA; } for(i = 0; i < n; i++) { dst[i] = *((uint8_t xdata *)(xdata_src_adr + adr + i)); } }