scrivo perché avrei bisogno di una consulenza sulla scrittura della EEPROM interna al PIC18F46K22.
Devo memorizzare 118byte in EEPROM e ho notato che il tempo necessario è davvero parecchio (circa 350ms) e volevo ridurlo.
Di seguito la funzione (dalla libreria del Code Configurator) che utilizzo e che funziona perfettamente:
- Codice: Seleziona tutto
void DATAEE_WriteByte(uint16_t bAdd, uint8_t bData)
{
uint8_t GIEBitValue = INTCONbits.GIE;
EEADRH = ((bAdd >> 8) & 0x03);
EEADR = (bAdd & 0xFF);
EEDATA = bData;
EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;
INTCONbits.GIE = 0; // Disable interrupts
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
// Wait for write to complete
while (EECON1bits.WR)
{
}
EECON1bits.WREN = 0;
INTCONbits.GIE = GIEBitValue; // restore interrupt enable
}
Come si vede, nella funzione è stata inserita l'istruzione "while (EECON1bits.WR)" per attendere la scrittura del byte e quindi tutto rimane impallato per circa 3ms (misurati con l'oscilloscopio) che moltiplicati per 118 fa proprio circa 350ms.
Leggendo il datasheet, ho capito che potrei abilitare l'interrupt sulla fine scrittura in modo da eliminare l'attesa introdotta dall'istruzione "while (EECON1bits.WR)".
In pratica dalla funzione "DATAEE_WriteByte" toglierei solo il while e in interrupt EEPROM metterei un bel flag per indicarmi che posso procedere con la memorizzazione del byte successivo.
Posso quindi abilitare la scrittura "EECON1bits.WR = 1;", disabilitare la scrittura "EECON1bits.WREN = 0;"(magari ci metto in mezzo un paio di NOP), abilitare gli interrupt "INTCONbits.GIE = GIEBitValue;" e andare a fare altro senza che la scrittura in corso venga compromessa?
Grazie.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)
