I observed a strange thing when working with ADuC 841 EEPROM - when I access it more intensively, the uP resets itself. The code I am running is quite complex, so I don't want to blame EEPROM right away, but has anybody else experienced similar behavior? Little more about my code, "access it more intensively" meaning about 50 calls of following function in one batch
unsigned char EE_Save_Float_Data(float fdata, unsigned int page) reentrant { FLOAT ee_data; WORD address; ee_data.value = fdata; address.value = page; //normal mode ECON = EE_NORMAL_MODE; EADRH = address.BYTES.high; EADRL = address.BYTES.low; ECON = EE_ERASE_PAGE; EDATA1 = ee_data.BYTES.DATA1; EDATA2 = ee_data.BYTES.DATA2; EDATA3 = ee_data.BYTES.DATA3; EDATA4 = ee_data.BYTES.DATA4; ECON = EE_WRITE; ECON = EE_VERIFY; return (ECON == 0); }
From my further experiments, adding delay after each memory operation seems to be helping, same as disabling interrupts (EA = 0) in the whole EEPROM handling function. None of these are however described as necessary in 841 datasheet.
Thank you for any opinion/advice Petr