Tutorials - PIC

 

Il PC nei Baseline: banchi e pagine


Avvertenza: la situazione derivata dalla "paginazione" della memoria programma e dai "banchi" della RAM riguarda essenzialmente l' Assembly, che non dispone di meccanismi automatici per lo scambio delle pagine e dei banchi, cosa che invece è effettuata dai linguaggi a più alto livello.

In ogni caso, la conoscenza dell' esistenza di pagine e banchi e dei meccanismi a cui si ricorre per superare queste limitazioni costituisce un elemento chiave per comprendere la struttura dei PIC.

Qui facciamo riferimento alle caratteristiche comuni ai PIC Baseline.


BANCHI e PAGINE

Occorre considerare un elemento essenziale per comprendere il funzionamento dei PIC ed utilizzarli correttamente.

Le istruzioni di questi microcontroller sono di tipo RISC, ovvero in numero ridotto e se osserviamo da vicino il codice binario che compone una istruzione, costituito da 12 bit, possiamo vedere come una parte, spesso minoritaria, di essi sia riservata alla codifica dell' istruzione vera e propria, mentre i rimanenti siano dedicati ad aggiungere alcuni elementi necessari allo svolgimento dell' operazione.

Si possono dividere gli opcodes in alcuni gruppi, a seconda della funzione:

  1. istruzioni auto referenti, che non necessitano di parametri aggiuntivi.
    In questo primo gruppo, tutti i bit sono dedicati alla codifica, in quanto l' istruzione non richiede di essere accompagnata da altre informazioni. Ad esempio, nop (no operation) o clrwdt (clear wdt). 
       
    Bit Mnemonico
    11 10 9 8 7 6 5 4 3 2 1 0
    0 0 0 0 0 0 0 0 0 0 0 0 NOP
    0 0 0 0 0 0 0 0 0 1 0 0 CLRWDT

     

  2. istruzioni relative a "literal", ovvero a numeri
    La codifica delle istruzioni del secondo gruppo comprende la chiave dell' istruzione nei primi 4 bit più significativi e riserva gli altri 8 bit per il numero "literal" con cui l' istruzione opera (quindi con la possibilità di trattare numeri a 8 bit, da 00h a FFh). Ad esempio movlw, addlw
    Queste istruzioni si basano sul registro W
        
    Bit Mnemonico
    11 10 9 8 7 6 5 4 3 2 1 0
    1 1 0 0 k MOVLW k
    1 1 0 1 k IORLW k

     

  3. istruzioni per comandare bit
    Le istruzioni del terzo gruppo operano su singoli bit contenuti in un "file", ovvero in una locazione dell' area RAM, che comprende i registri speciali (SFR) e la RAM dati vera e propria. Sono bsf e bcf.
      
    A questo gruppo possiamo attribuire anche le istruzioni come btfsc e decfsz che agiscono su un bit specifico di un "file" specifico, ma che possono anche generare un salto sull' avanzamento Program Counter. Però, qui non è necessario specificare l' indirizzo di destinazione del salto dato che riguarda sempre e solo l' istruzione successiva.
      
    Le tipiche istruzioni del terzo gruppo richiedono 
    - 3 bit per definire a quale bit di un "file" da 8 bit è diretta l' operazione
    - più altri 5 bit per definire a quale "file" appartiene il bit. 
    Con 5 bit è possibile definire indirizzi di "file" compresi tra 00h e 1Fh (2^5 = 32).
       
    Bit Mnemonico
    11 10 9 8 7 6 5 4 3 2 1 0
    0 1 0 0 b f BCF f,b
    0 1 0 1 b f BSF f,b

     

  4. istruzioni di chiamata o di salto
    Questo quarto gruppo comprende le istruzioni che operano una modifica diretta sul Program Counter. Per i Baseline sono goto, call
      
    Bit Mnemonico
    11 10 9 8 7 6 5 4 3 2 1 0
    1 0 0 1 k CALL k
    1 0 1 k GOTO k

Oltre al codice dell' istruzione vera e propria,i 9 bit meno significativi per goto e 8 bit per call sono riservati all' indirizzo di destinazione del salto.
Con 8 bit è possibile indirizzare da 00h a FFh (2^8=256) e con 9 bit da 00h a 1FFh (2^9=512).

Dunque ci troviamo in questa situazione:

  • le istruzioni che operano sulla RAM possono indirizzare direttamente uno spazio da 00h a 1Fh
  • le istruzioni che originano salti del PC possono operare così:
    goto da 000h a 1FFh della memoria programma. 
    call da 000h a 0FFh

Queste limitazioni sono intrinseche al fatto che gli opcodes si estendono su 12 bit , nei quali devono convivere il codice dell' istruzione e gi altri elementi; questo genera alcune difficoltà nell' uso dei PIC quando l' ampiezza della RAM e/o della memoria programma superino i limiti indicati.
Si tratta del 

  • problema dei banchi, relativi alla RAM
  • e delle pagine, relative alla memoria programma

con cui si trova a combattere il programmatore e che è uno degli aspetti più "antipatici" di questi microcontroller, principalmente per chi programma in Assembly.


 

Ricordiamo che i PIC sono basati sulla struttura Harvard, per cui la memoria programma e la RAM (e i registri di controllo) sono su due bus diversi, indipendenti e di diversa ampiezza.
Quindi, l' indirizzo 00h dell'area RAM non ha nulla a che fare con l' indirizzo 00h di memoria programma, che si trova nella Flash.

Se ci sono problemi ad interpretare i codici esadecimali e binari, può essere utile consultare queste pagine.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 06/05/13.