25 volatile uint32_t* palabra_destino = (
volatile uint32_t*) EEPROM_ADDRESS(pagina, 0U);
29 (void) memcpy(palabras_origen, datos_pagina, EEPROM_PAGE_SIZE);
31 Chip_EEPROM_SetAutoProg(LPC_EEPROM, EEPROM_AUTOPROG_AFT_LASTWORDWRITTEN);
33 palabra_destino[indice] = palabras_origen[indice];
35 Chip_EEPROM_WaitForIntStatus(LPC_EEPROM, EEPROM_INT_ENDOFPROG);
36 Chip_EEPROM_SetAutoProg(LPC_EEPROM, EEPROM_AUTOPROG_OFF);
67 const uint8_t* datos_origen = (
const uint8_t*) origen;
68 uint8_t pagina_buffer[EEPROM_PAGE_SIZE];
91 while (cantidad > 0U) {
92 const uint32_t direccion_actual = offset;
93 const uint32_t pagina = direccion_actual / EEPROM_PAGE_SIZE;
94 const uint32_t offset_pagina = direccion_actual % EEPROM_PAGE_SIZE;
95 const uint32_t bytes_pagina = EEPROM_PAGE_SIZE - offset_pagina;
96 const uint32_t bytes_a_copiar = (cantidad < bytes_pagina) ? cantidad : bytes_pagina;
97 const uint8_t* direccion_pagina = (
const uint8_t*) EEPROM_ADDRESS(pagina, 0U);
99 (void) memcpy(pagina_buffer, direccion_pagina, EEPROM_PAGE_SIZE);
100 (void) memcpy(&pagina_buffer[offset_pagina], datos_origen, bytes_a_copiar);
102 if (memcmp(pagina_buffer, direccion_pagina, EEPROM_PAGE_SIZE) != 0) {
106 offset += bytes_a_copiar;
107 datos_origen += bytes_a_copiar;
108 cantidad -= bytes_a_copiar;