Tutorials - PIC

 

PIC12F519


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

PIC16F526 ha un program counter (PC) 11 bit (PC) in grado di indirizzare un programma 2k x 12 (ricordiamo che l' ampiezza delle istruzione dei Baseline è 12 bit, mentre il bus dati è a 8 bit - ved. architettura Harvard).

Sono disponibili due pagine di memoria programma (Flash), da  000h a 1FFh e da 200h a 3FFh. disponibili.
Da notare che la mappa indica come vettore di RESET non 000h, ma 3FFh, che contiene il valore di calibrazione dell' oscillatore interno.

L' area tra 0400h e 043Fh è occupata da una sezione di memoria Flash che può essere utilizzata durante il programma come area dati.
L' accesso a questa zona si effettua come se si trattasse di una EEPROM (vedere più avanti).

Le aree successive sono utilizzate per ID, Configuration Word, backup di OSSCAL o non implementate.o per i PIC, a 0000h.
La locazione 03FFh 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.

La memoria FLASH conserva quanti scritto anche al mancare della tensione di alimentazione, quindi il contenuto delle locazioni da 000h a 043Fh resta invariato fino a che non viene volontariamente cancellato e/o riscritto.


Memoria RAM

La memoria di dati è composta di registri o byte in 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).  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 PIC16F526 ci sono:
  • 16 SFR
  • 67 bytes di RAM

L' area RAM occupa 4 banchi.  Lo schema seguente riporta la mappa dell' area RAM:

Si può osservare che:

  • il Bank0 e il Bank2 replicano gli stessi SFR; così pure il Bank1 e il Bank3
  • la maggior parte degli SFR sono accessibili da tutti i banchi indistintamente, mentre i registri relativi alla EEPROM sono accessibili solo dal Bank1-3

Quindi, ad esempio, chiamando il registro all' indirizzo 05h, se ci si trova nel Banko o Bank2 si accederà a OSCCAL; se ci si trova nel Bank1 o 3, si accederà a EEDATA.

Per quanto riguarda la RAM dati:

  • un' area di soli tre bytes, da 0Dh a 0Fh costituisce l' area comune a tutti i banchi 
  • ogni banco dispone di un'area di 16 bytes

Il passaggio tra i banchi viene effettuato agendo sui bit FSR<6:5>:

FSR<6:5> Bank
00 0
01 1
10 2
11 3

Va considerato 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.

Possiamo anche notare che i registri TRIS e OPTION non appaiono nella mappa della memoria in quanto sono SFR speciali a sola scrittura, accessibili rispettivamente ed esclusivamente con le istruzioni relative tris e option.

Può essere utile dare uno sguardo anche la tabella riassuntiva degli SFR, in cui appaiono i valori di default al reset.

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

In particolare:

  • il bit 5 dello STATUS costituisce lo switch di pagina per accedere alla parte superiore della memoria programma: 
    - PA0 = 0 ->  primi 512 bytes
    - PA0 = 1 ->  restanti 512 bytes
  • il bit 5 di FSR costituisce lo switch per accedere ai banchi:
    - FSR<5> = 0 ->  Banco 0
    - FSR<5> = 1 ->  Banco 0
    Queste informazioni riguardano la programmazione Assembly, dove è cura del programmatore il dirigere il flusso di istruzioni alla giusta destinazione. Nell' uso di compilatori, invece, è il compilatore che provvede a commutare banchi o pagine a seconda della necessità.
  • Sempre nello STATUS, il bit 7 (RBWUF) va a 1 dopo un reset prodotto dal wake-up dovuto al cambio di stato dei pin di PORTB e CWUF a seguito del cambio di stato del comparatore

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 18/10/13.