write to EEPROM and interrupt
i use external interrupt in my programm, and i want to use WRITE command
but i must turn interrupt off or mask it before use WRITE command.
so, how can i do that?? should i put WRITE command at the beginning of the software? i mean before Main loop, or is there any simple methode to do it ??
pic16f84
WRITE_PRO:
---
----
WRITE 3,4
---
--
goto WRITE_PRO
OPTION_REG =%11000000
INTCON =%10010000
ON INTERRUPT GOTO INT
MAIN:
---
----
GOTO MAIN
Did i do the right or the wrong ??? because i want to put WRITE_PRO at any posion not at the beginning as i did
Re: write to EEPROM and interrupt
I'm going to try this. Thanks!
Also, does the same apply to EEPROM reads? I assume a READ instruction can get messed up if the interrupt occurs at just the right time during the READ?
Re: write to EEPROM and interrupt
swr999, I have used the "DEFINE WRITE_INT 1" directive with my 18F parts and have had no problems. The READ instructions are not to my knowlege prone to disruption with interrupts enabled.
Re: write to EEPROM and interrupt
Quote:
Originally Posted by
Dave
swr999, I have used the "DEFINE WRITE_INT 1" directive with my 18F parts and have had no problems. The READ instructions are not to my knowlege prone to disruption with interrupts enabled.
Hi. Is this a PBP3 DEFINE? I don't see this in my PBP 2.60 manual. What does it do?
Re: write to EEPROM and interrupt
Quote:
Originally Posted by
Dave
swr999, I have used the "DEFINE WRITE_INT 1" directive with my 18F parts and have had no problems. The READ instructions are not to my knowlege prone to disruption with interrupts enabled.
Thanks Dave. My "issue" is that I have a 10-mS interrupt running to keep track of elapsed time. I have several EEPROM writes and since EEPROM writes take a while I don't want to lose time by stopping the interrupt for every write.
I did a test program where I repeatedly wrote to EEPROM with a 'random' WORD. For each write I then read back the value that got stored in EEPROM. It turns out that the error rate due to interference from the interrupt was quite low, about 0.04% (~400 errors in a million writes). So what I ended up doing was to do each write with a call to a subroutine:
EEwriteWord:
WRITE addr,xW.byte0:WRITE addr+1,xW.byte1
READ addr,xR.byte0: READ addr+1,xR.byte1
IF xR != xW then
INTCON.7=0
WRITE addr,xW.byte0:WRITE addr+1,xW.byte1
INTCON.7=1
ENDIF
RETURN
This seems to be working well. While the EEPROM write takes several mS the READ is pretty fast, so this doesn't add too much overhead.
Re: write to EEPROM and interrupt
Quote:
Originally Posted by
rsocor01
Hi. Is this a PBP3 DEFINE? I don't see this in my PBP 2.60 manual. What does it do?
DEFINE WRITE_INT 1 is used to avoid write errors during a WRITE to EEPROM which might otherwise possibly be caused by an interrupt occurring during the write. The functionality is that it disables interrupts just prior to executing a WRITE instruction, and re-enabls interrupts after the WRITE completes. Appears to be strictly a PBP3 feature.
Re: write to EEPROM and interrupt
With regard to the "DEFINE WRITE_INT 1" directive, it appears to be available at least from PBP 2.50 onwards. I misspoke above^^^. Apologies.