void SaveEepromBoardConfig() { // // Save Board Cnfiguration to EE // _prog_addressT EE_addr; int i=0, *DMAdx; int test=0; int test1=0; // initialize a variable to represent the Data EEPROM address _init_prog_address(EE_addr, ee_data); // Erase Data EEPROM at ee_data for(i=0 ; i < sizeof(BoardConfig) ; i++) { _erase_eedata(EE_addr++, _EE_WORD); _wait_eedata(); } // Write BoardConfig to Data EEPROM _init_prog_address(EE_addr, ee_data); DMAdx = (int*) &BoardConfig; for(i=0 ; i < sizeof(BoardConfig) ; i++) { _write_eedata_word(EE_addr, *DMAdx ); EE_addr+=2; DMAdx++; test++; test1=sizeof(BoardConfig); _wait_eedata(); } test=test+1; }
/************************************* * Store params from RAM to EEPROM *************************************/ void StoreEEPROMparams(void) { /*Erase a row in Data EEPROM at array "parameters_EEPROM" */ _erase_eedata(EE_addr, _EE_ROW); _wait_eedata(); _erase_eedata(EE_addr+32, _EE_ROW); _wait_eedata(); /*Write a row to Data EEPROM from array "parameters_RAM" */ _write_eedata_row(EE_addr, (int *)parameters_RAM); _wait_eedata(); _write_eedata_row(EE_addr+32, (int *)parameters_RAM+16); _wait_eedata(); }
void ee_word_write(unsigned int offset, int data) { #ifdef USE_EEPROM _prog_addressT p; _init_prog_address(p, eeData); p += offset; asm volatile ("disi #5"); // Disable Interrupts For 5 Instructions (TODO, validate the number of cycles) _erase_eedata(p,_EE_WORD); _wait_eedata(); asm volatile ("disi #5"); // Disable Interrupts For 5 Instructions (TODO, validate the number of cycles) _write_eedata_word(p,data); _wait_eedata(); #else #warning "ee_word_write NOT using EEPROM, Flash implementation not (yet) available." #endif }
void my_eeprom_write_int(Eeprom* eeprom_, unsigned long index, unsigned char value) { if (index >= EEPROM_30F_MAX_INDEX) { writeError(EEPROM_OUT_OF_BOUNDS); return; } _prog_addressT EE_addr; // initialize a variable to represent the EEPROM address _init_prog_address(EE_addr, eeData); _erase_eedata(EE_addr + (index * _EE_WORD), _EE_WORD); _wait_eedata(); // write value _write_eedata_word(EE_addr + (index * _EE_WORD), value); _wait_eedata(); }
/************************************* * Initialize EEPROM *************************************/ void InitEEPROM(void) { /* initialize a variable to represent the Data EEPROM address */ _init_prog_address(EE_addr, parameters_EEPROM); _init_prog_address(EE_is_blank_addr, EE_is_blank); /*Copy blank status flag from from DataEEPROM to RAM*/ _memcpy_p2d16(&EE_is_blank_RAM, EE_is_blank_addr, _EE_WORD); if(EE_is_blank_RAM != 0x3FFF) { StoreEEPROMparams(); EE_is_blank_RAM = 0x3FFF; _erase_eedata(EE_is_blank_addr, _EE_WORD); _wait_eedata(); _write_eedata_word(EE_is_blank_addr, EE_is_blank_RAM); _wait_eedata(); } }