Obvody vnitřní paměti typu EEPROM
Vnitřní obvody paměťi EEPROM mikrořadiče jsou předurčeny především pro zálohování dat, která se zcela určitě ztratí z paměti SRAM mikrořadiče po odpojení napájecího napětí mikrořadiče. Výrobce zaručuje, že zálohovaná data mohou být spolehlivě uložena i několik desítek let. Zaručený počet přepisů dat v této paměti je až 100000 krát.
Základní charakteristické vlastnosti paměti EEPROM mikrořadiče AVR:
- mikrořadič ATMEGA obsahuje EEPROM, do které lze data ukládat o šířce jednoho Byte;
- adresování pro zápis a čtení dat uložených v paměti EEPROM se provádí pomocí páru funkčních registrů EEARH a EEARL;
- vnitřní obvodová struktura obvodů paměti EEPROM umožnuje data do této paměti zapisovat bez předchozího mazání jejího obsahu.
Data do paměti EEPROM můžeme ukládat dvěma zůsoby:
- pomocí programátoru, tedy vnějšího přístupu do paměti EEPROM;
- programově, teady částí programu, který je součástí hlavního progamu mikrořadiče.
U mikrořadiče Atmega 16 je velikost paměti EEPROM 512 bytů. ( u Atmegy 32 to je 1024 bytů). Z toho plyne, že pro adresování této paměti musíme mít k dispozici 9 bitovou adresu. Tato adresa je rozdělena do dvou osmibitových regisrů (tzv. registrového páru). Jsou to registry EEARH a EEARL.
Registr EEARL obsahuje dolních osm bitů adresy paměti EEPROM, devátý bit adresy je zapisován na nultou pozici registru EEARH.
Tab. 1: Registrový pár EEARH:EEARL mikrořadiče Atmega 32 pro adresování paměti EEPROM v adresním rozsahu 1024 adres
Tab. 2: Řídíci registr EECR paměti EEPROM mikrořadiče AVR Atmega 32
Tab. 3: Datový registr paměti EEPROM
Popis významu bitů registru EECR:
- EERIE - je-li bit I v SREG a současně bit EERIE v registru EECR nastavený na jedničku, je EEPROM připravena;
- EEMWE - při nastavení bitu na jedničku je možné do paměti EEPROM zapisovat;
- EEWE - strobovací signál pro zápis do EEPROM.
Popis významu bitů registru EEDR:
Všechny bity dle binární váhy představují data zapisovaná do paměti nebo čtená z paměti EEPROM.
Zápis do paměti se provádí podle následující procedury:
- čeká se, až bude EEWE nula;
- zapíše se nová adresa EEPROM do registrového páru EEARL a EEARH;
- zapíší se nová data připravená k uložení do EEDR;
- zapíše se jednička do bitu EEMWE v registru EECR (aby to bylo možné, musí být v témže cykluzapsána nula do bitu EEWE);
- v čase do čtvrtého hodinového cyklu po nastavení EEMWE zapsat logickou jedničku do EEWE.
Na závěr si ukážeme vzorový příklad programu možného zápisu a čtení dat z paměti EEPROM
.INCLUDE "M32DEF.INC"; definiční soubor mikrořadiče Atmega32
.DEF POMOC_REG = R16 ; pojmenování pomocného registru
.DEF ADR_REG = R17; pojmenování pomocného registru pro uchování adresy
.DEF DATA_REG = R18 ; pojmenování pomocného registru pro data
; HLAVNÍ PROGRAM
LDI DATA_REG,0x56 ; zápis dat 0x56 do registru R18
RCALL EEPROM_WRITE ; volání podprogramu pro zápis do paměti EEPROM
RCALL EEPROM_READ ; volání podprogramu pro čtení z paměti EEPROM
EEPROM_WRITE: ; návěstí podprogramu pro zápis do EEPROM
SBIC EECR,EEWE ; čekací smyčka pro dokončení předchozího zápisu, testuje se bit EEWE
RJMP EEPROM_WRITE ; součást čekací smyčky, nové testování bitu EEWE, odskok na návěstí EEPROM_WRITE:
LDI POMOC_REG, (0<<EEPM1)|(0<<EEPM0) ; nastavení programovacího režimu pro zápis do EEPROM
OUT EECR, POMOC_REG ; nastavení pro zápis do EEPROM do funkčního registru EECR
OUT EEARL,ADR_REG ; uložení adresy pro zápis do adresového registru
OUT EEDR,DATA_REG ; uložení dat pro zápis do datového registru
SBI EECR,EEMWE ; uvolnění zápisu nastavením bitu EEMWE
SBI EECR,EEWE ; provedení zápisu do EEPROM
RET ; návrat z podprogramu pro zápis do EEPROM
EEPROM_READ: ; navěstí podprogramu pro čtení EEPROM
SBIC EECR, EERE ; čekací smyčka pro dokončení předchozí operace čtení
RJMP EEPROM_READ ; součást čekací smyčky pro nové testování bitu EERE registru EECR
OUT EEARL, ADR_REG ; uložení adresy uložených dat do registru EEARL
SBI EECR,EERE ; povolení a start čtení dat z paměti
IN DATA_REG, EEDR ; překopírování dat do registru R18
RET ; návrat z podprogramu