La memoria
Riserviamo per ultima una trattazione della memoria, che interesserà principalmente chi vuole capire più a fondo
il funzionamento dei PIC e chi programma in Assembly; meno importante per
chi programma in C o simili.
In questi PIC troviamo due tipi di memoria:
- un' area di memoria FLASH, che comprende la memoria programma (program
memory), la configuration word e il registro ID
- un' area di memoria RAM che comprende la RAM dati e gli SFR
Trovate
qui qualche chiarimento, se occorre, per quanto riguarda il problema di
banchi e pagine.
Memoria programma
|
PIC10F220 ha un program counter (PC) 9 bit (PC) in grado di indirizzare un programma
512 x 12 (ricordiamo
che l' ampiezza delle istruzione dei Baseline è 12 bit, mentre il bus
dati è a 8 bit - ved. architettura
Harvard).
Solamente il primi 256 x 12 (0000h-00FFh) sono fisicamente disponibili.
Un accesso all' area non implementata causerà un wrap-around
verso l' area implementata.
Il vettore di reset, ovvero la locazione a cui va posta la prima
istruzione del programma, si trova, come solito per i PIC, a 0000h.
In effetti, l' istruzione iniziale è quella posta alla locazione 00FFh contiene il valore di calibrazione dell'oscillatore
interno. Questo valore non deve essere cancellato o sovra scritto,
come abbiamo visto nelle pagine dedicate al clock.
Lo stack a 12 bit è di soli due livelli, quindi limita il numero
degli annidamenti di chiamate a subroutine. Non ci sono meccanismi che
indichino un overflow o underflow dello stack; quindi è
responsabilità del programmatore di evitare questi errori.
Nel set Baseline
non ci sono istruzioni di manipolazione dello stack.
|
|
PIC10F222 ha un program counter (PC) da 10 bit, in grado di indirizzare un programma
1k x 12.
Solamente il primi 512 x 12 (0000h-01FFh) sono fisicamente disponibili.
Un accesso all' area non implementata causerà un wrap-around
verso l' area implementata.
L' area complessiva è di 512 e quindi non necessita di una
divisone in pagine e non è richiesto alcun meccanismo particolare di
accesso a tutte le locazioni.
Il vettore di reset, ovvero la locazione a cui va posta la prima
istruzione del programma, si trova, come solito per i PIC, a 0000h.
In effetti, l' istruzione iniziale è quella posta alla
locazione 01FFh contiene il valore di calibrazione dell'oscillatore
interno. Questo valore non deve essere cancellato o sovra scritto,
come abbiamo visto nelle pagine dedicate al clock.
Lo stack è identico al precedente.
|
La memoria FLASH conserva quanti scritto anche al mancare della tensione di
alimentazione, quindi il contenuto delle locazioni da 0000h a 01FFh resta
invariato fino a che non viene volontariamente cancellato e/o riscritto.
Memoria RAM
La memoria di dati è composto di registri o byte di RAM, ovvero di memoria
scrivibile e leggibile a volontà, ma che perde quanto contenuto al momento in
cui la tensione scende sotto un valore minimo di mantenimento o viene a
mancare del tutto. .Nella stessa area sono implementati i registri di
controllo SFR.
In effetti, Microchip divide i registri in due gruppi funzionali:
- Special Function Registers (SFR)
- e registri di uso generale (General Purpose Register - GPR).
I registri SFR includono TMR0, il Program Counter (PCL), lo STATUS, i registri di I/O e il file
di indirizzamento indiretto (FSR). Inoltre, sono SFR anche tutti i
registri utilizzati per controllare la configurazione delle risorse interne.
I registri di uso generale sono la vera e propria RAM dati, sotto il comando delle
istruzioni del programma.
|
Per il PIC10F220 ci sono:
- 9 SFR da 00h a 08h
- 16 bytes di RAM da 10h a 1Fh
Gli indirizzi da 09h a 0Fh non sono implementati; la lettura rende
0 e la scrittura non ha effetto.
Va ben compreso che, seppure General Purpose Register e SFR sono
entrambi "RAM", i primi non vanno usati per conservate dati,
poichè sono in relazione con la gestione delle varie funzioni del
processore; solamente i GPR saranno da impiegare come aree di memoria
volatile per i dati.
|
|
Per il PIC10F222 la situazione simile. Ci sono:
- 9 SFR da 00h a 08h
- 23 bytes di RAM da 09h a 1Fh
In entrambi i PIC l' area RAM occupa un solo banco, per cui non esiste la necessità
di commutare banchi per accedere a queste risorse di memoria. Questo
rende semplice la gestione in Assembly.
Essendo, in ogni caso, l' area RAM limitata tra 00h e 1Fh non è
necessaria la divisione in banchi tipica dei PIC con una quantità
maggiore di risorse. |
Pure essendo i due chip del tutto simili, c'è da osservare la diversa
consistenza della memoria RAM:
Attenzione:
- la prima locazione di RAM dati in 10F220 si trova a 10h. L'
area tra 09h e 0Fh non è implementata.
- in 10F222, invece, la prima locazione di RAM dati si
trova a 09h.
|
SFR
Sono 11 registri speciali SFR. Può essere utile riportare anche la tabella riassuntiva, in cui
appaiono i valori di default al reset.
Possiamo notare che i registri TRISGPIO
e OPTION non appaiono nella mappa della memoria in quanto sono SFR speciali a
sola scrittura, accessibili rispettivamente ed esclusivamente con le
istruzioni tris e option.
La tabella riporta:
- l' indirizzo assoluto del registro nella mappa della memoria RAM
- il nome (label) del registro
- gli mnemonici relativi ai bit
- il valore di default al POR (x indica un valore casuale)
- la pagina del foglio dati dove sono sono descritti nel dettaglio questi
registri
|