Tutorials - PIC18 by Data Sheet

 

Pagina 59-60

 


 

LA MEMORIA DATI (RAM)

 

Nei PIC, va ricordato, la memoria dati (RAM) e la memoria programma (Flash) sono due entità indipendenti a cui si accede con istruzioni differenti.  

      La memoria RAM disponibile va da 256 a 3900 bytes o più, a seconda del modello, ed è al di là delle disponibilità dei mid range.

La Memoria Dati, o RAM, è costituita da elementi a 8 bit indirizzabili con 12 bit, ovvero su un range di 4 k. Consiste in due tipologie distinte : i General Purpose Registers (GPR) e gli Special Function Registers (SFR).

  • I GPR, ovvero le celle di memoria RAM, sono utilizzati per salvare dati e variabili durante le elaborazioni (RAM per uso generico, in lettura e scrittura)
     

  • Gli SFR sono i registri propri del processore, attraverso cui il programmatore accede al controllo delle funzioni interni e gestisce I/O, Timer, oscillatori, ecc. Anche il Work Register W e lo STATUS fanno parte degli SFR

Sfortunatamente per chi si aspettava una struttura simile a quella della Memoria Programma, la Memoria Dati è frammentata in un numero elevato di banchi, fino a 15, ognuno ampio 256 bytes e accessibili con un sistema a switch come nei PIC 16.

Ad esempio, a lato lo schema della RAM del PIC18F6722, con tutti e 15 i banchi attivi. Questo processore appartiene ad una delle famiglie progettate per utilizzare memoria programma esterna.

Nella famiglia 18F4321 la RAM disponibile occupa il banco 0, il banco 1 e il banco 15.

La divisone in banchi è dovuta alla disponibilità per l' indirizzamento di soli 8 bit negli opcodes che vanno ad agire sulla Memoria Dati.

In effetti l' indirizzamento complessivo della memoria dati è effettuato a 12 bit, di cui 8 arrivano dall' istruzione e 4 da un registro apposito, detto Bank Select Register o BSR, che nei primi 4 bit, BSR3:0, fornisce un sistema di switch dei banchi simile a quello dei mid-range.

Il meccanismo del BS, però, è più efficiente degli RP che sono usati nei PIC16.

Per prima cosa, i bit BSR non stanno nello STATUS, ma nel registro dedicato e questo consente di modificarli con una istruzione dedicata:

MOVLB

che carica un valore literal nel registro dei BSR.

Inoltre, questo numero è lo stesso che indica il banco puntato, per cui un:

           movlb  3

punta al banco 3 e così via.

Così è possibile visualizzare in uno schema semplice il funzionamento dei BSR. 

 

Verrebbe da protestare: “Ma come, questi PIC18 aboliscono pagine e semplificano la vita e ora salta fuori che per lavorare con la RAM bisogna sguazzare in ben 15-banchi-15 !?”.
Però è opportuno conoscere come i progettisti di Microchip hanno risolto la questione.

In effetti, i metodi messi in opera per semplificare la vita al programmatore ci sono e sono molto più efficienti di quanto ci si potesse aspettare (vista anche la necessità di offrire ai compilatori C un supporto ben più potente di quello offerto dai PIC16) ::

  1. In primo luogo i registri speciali (SFR) non sono sparpagliati nei banchi di memoria, ma sono raccolti TUTTI in un unico banco (la seconda metà del banco 15). 
    Quindi, rispetto ai PIC16, non occorre più utilizzare forsennatamente il banksel per corre dietro ai registri ! E questa è già una cosa mica male !
     

  2. In secondo luogo, un meccanismo chiamato Access RAM crea una pagina contenete RAM e SFR e di accesso immediato

 Ma prima di procedere in questa direzione, vediamo qualcosa sui meccanismi di indirizzamento.

 


 

NOTE:

I divesri processori possono avere diverse quantità di memoria e di banchi : il data sheet di ogni singolo prodotto specifica chiaramente queste informazioni. 

A questo proposito va tenuto presente che il numero degli SFR può variare sensibilmente tra un processore ed un altro, in dipendenza dalle funzioni speciali che il chip integra. 

Altri processori, come la famiglia dotata di USB, ha alcuni banchi costituiti da una speciale RAM dual port e che sono dedicati al buffer della porta USB e se questa è usata, non possono avere altra destinazione. 
Se però la porta USB è attivata, questi 4 banchi vanno lasciati allo scambio dati tra microcontroller e l' USB Serial Interface Engine (SIE); in questa situazione, usarli per altri scopi può essere rischioso in quanto il buffer USB è dinamico. Ovviamente, processori non dotati di USB non dispongono di questa RAM particolare.

Quindi, una lettura del foglio dati, di fronte ad un componente nuovo, è indispensabile.

Per quello che riguarda gli SFR, anche se stanno in un unico banco e sono, a pari funzione, praticamente nelle stesse posizioni di memoria, è sempre ed assolutamente buona norma richiamarli esclusivamente con le loro label specifiche e
mai
con l' indirizzo assoluto; questo evita seri problemi nella portabilità del sorgente. Con un Assembler valido, come può essere MPASM, non c'è alcuna ragione per non utilizzare quegli automatismi di conversione simboli-indirizzi che il compilatore fa così bene da se.

 

 


 

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 03/11/10.