Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Dubbio EEPROM interna PIC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Dubbio EEPROM interna PIC

Messaggioda Foto Utenteivanpascolo » 20 apr 2015, 14:21

Buongiorno,
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.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 19 ospiti