PIC18

 

Il CONFIG nei PIC18


Il CONFIG nei PIC18

Lo scopo dei registri CONFIG e della relativa direttiva di assemblaggio è quello di:

fornire al PIC una base di partenza su cui avviare l' hardware.


Per cercare di avere ben chiaro il problema, dobbiamo tenere presente che i progettisti di Microchip hanno reso programmabili dall' Utente quante più funzioni possibili, comprendendo in esse non solo le gestioni dei vari moduli (GPIO, USART, MSSP, AD, Timer, ecc), ma anche la struttura di base.
Per fare un esempio semplice, è analogo al fatto di scegliere le gomme più adatte e il carico degli ammortizzatori prima di partire per una specifica tappa del rally; queste scelte si devono fare PRIMA della partenza e sono fondamentali per come si svolgerà la tappa.
Similmente, nei PIC sono programmabili molte funzioni di base che rendono disponibile un certo hardware all' uso delle successive istruzioni; e queste scelte (modo di oscillatore, assegnazione di pin ad un modulo piuttosto che ad un' altro, watchdog, protezione della memoria, set di istruzioni, ecc) dovranno essere fate PRIMA che il programma sia avviato.

Quindi, un sorgente dovrà forzatamente iniziare, in qualsiasi programma, con una sezione dedicata alla configurazione del processore.

Attenzione, perchè non si tratta di "istruzioni" che verranno eseguite, ma di assegnazioni all' hardware di base che vengono fissate nel processore una volta per tutte all' atto della programmazione, anche se in alcuni casi potranno essere modificate successivamente via software.

Queste assegnazioni saranno scritte in opportuni registri non volatili e saranno conservate fino ad una successiva programmazione che le modifichi.

Queste assegnazioni non fanno parte della memoria programma e non saranno "eseguite", ma, al reset (POR) esse imporranno alla struttura hardware del PIC una determinata configurazione che il programma potrà sfruttare.


Queste assegnazioni saranno fatte in funzione delle necessità del programma che si vuole eseguire.

Ovviamente, se le scelte sono errate, non si potrà avere il funzionamento voluto.

Due considerazioni importanti:

  1. In primo luogo, più il processore è complesso, ovvero ricco di funzioni, più la sezione di configurazione sarà importante (e complessa)

  2. I parametri iniziali sono fissati con default, ma questi possono non essere quelli desiderati per l' applicazione specifica. 

Quindi, la fase di CONFIG iniziale richiede un minimo di attenzione e non va sottovalutata o trascurata.
Certamente per applicazioni in cui i default sono adeguati, non occorrerà modificarli e la sezione di configurazione potrà essere ridotta o addirittura assente.
Questo, però, presume che l' utilizzatore conosca perfettamente quali sono le funzioni disponibili e quali sono quelle definite dai default. In caso contrario, come già detto, la mancata assegnazione delle funzioni desiderate ai vari pin o moduli potrà impedirne l' uso.

Per questa ragione si consiglia vivamente di inserire sempre e comunque una sezione di CONFIG in testa a qualsiasi sorgente, anche se non strettamente indispensabile, onde avere un reale controllo diretto di quanti sarà allocato nella memoria del processore.

Si potranno certo non applicare tutte le opzioni, in quanto, ad esempio, se il Watchdog non viene usato, non serve definirne un prescaler; così pure, se si sta effettuando un debug, non verrà attivata alcuna protezione dell' area di memoria, che sarà magari richiesta solo in fase di programmazione del prodotto definitivo.

Però,  di nuovo, ricordiamo che dalla configurazione iniziale possono dipendere molti elementi critici, dalla modalità dell' oscillatore all' assegnazione dei pin ad un modulo piuttosto che al GPIO, ecc. e l' importanza di questa sezione del sorgente non va sottovalutata.

In particolare, l' Assembler dei PIC prevede una direttiva specifica, __CONFIG (preceduto da due __) che origina queste assegnazioni.

I PIC18 hanno una struttura molto più complessa dei PIC16 per quanto riguarda i registri di configurazione, data la maggiore disponibilità di periferiche, e chi provenga da questi ultimi si può trovare spiazzato davanti al loro elevato numero.
Ma questo non è un problema reale: il Macro Assembler MPASM fornisce un supporto esaustivo, che rende l' azione di configurazione molto più semplice di quanto si possa credere e l' uso di un template adeguato permette di risolvere questa fase della scrittura del programma in modo molto semplice.


Come effettuare il CONFIG

Sostanzialmente, in fase di programmazione del chip, occorrerà stabilire i valori da assegnare ad alcuni registri, i registri CONFIG, che si trovano nella parte più alta della mappa di memoria del chip e a cui normalmente non si accede durante l' esecuzione del programma.

Una prima via è quella di utilizzare la direttiva __CONFIG  così come era impiegata nei PIC16. La sua sintassi è :

__CONFIG  _nomeregistro, <opzione1> & <opzione2> & <opzione3> ...& <opzionen>

 dove nomeregistro indica il registro CONFIG su cui si vuole agire.

Questa può essere una sequenza di inizializzazione dei registri di configurazione per un tipico PIC 18F (registri CONFIG del PIC18F2450/4450) :

 __CONFIG  _CONFIG1H, _OSCS_ON_1H & _XT_OSC_1H                 ; External Clock on OSC1 & OSC2
 __CONFIG  _CONFIG2L, _BOR_ON_2L & _BORV_20_2L & _PWRT_OFF_2L  ; Brown out reset on at 2.0V, 
                                                               ; no power-up timer
 __CONFIG  _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H              ; watchdog off, postscaler count 128
 __CONFIG  _CONFIG3H, _CCP2MX_ON_3H                            ; CCP2 pin Mux enabled. What is this?
 __CONFIG  _CONFIG4L, _STVR_ON_4L & _LVP_ON_4L & _DEBUG_OFF_4L ; Stack under/overflow reset on, 
                                                               ; LVP on, debug off
 __CONFIG  _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L ; all protection off
 __CONFIG  _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
 __CONFIG  _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
 __CONFIG  _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
 __CONFIG  _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
 __CONFIG  _CONFIG7H, _EBTRB_OFF_7H

La direttiva __CONFIG, usata nel modo ora visto, è perfettamente compatibile con quanto ci si è trovati a fare sui PIC16, ma non è la via migliore per i i PIC18, in quanto le ultime versioni di MPASM (dalla 7.0 in poi) consento una impostazione molto più semplice del problema.

L' uso classico di __CONFIG da origine ad una lunghissima linea di difficile lettura, oltre alla necessità, nei PIC18, di identificare a quale registro ci si stia rivolgendo, perchè, come vediamo nell' esempio qui sopra, i registri di CONFIG sono ben 7, a due bytes.

La nuova implementazione è molto più semplice, in quanto permette di prescindere dal conoscere in quale registro si trova una particolare funzione: basterà citare l' opzione scelta e MPASM provvederà automaticamente ad associare la disposizione voluta al registro adeguato.

Ad esempio, la configurazione di cui all' esempio qui sopra, diventerà : :

 CONFIG  OSCS = ON      ; enable both oscillator 
 CONFIG  OSC = XT       ; XT oscillator
 CONFIG  BOR = ON       ; brown out detector on
 CONFIG  BORV = 20      ; BOR level 2.0 volt
 CONFIG  PWRT = OFF     ; no Power up time
 CONFIG  WDT = OFF      ; no watchdog
 CONFIG  CCP2MX = ON
 CONFIG  STVR = ON      ; Stack under/overflow reset on
 CONFIG  LVP = ON       ; low voltage programming enabled
 CONFIG  DEBUG = OFF    ; debug option ofgf
 CONFIG  CP0 = OFF      ; all protection off 
 CONFIG  CP1 = OFF
 CONFIG  CP2 = OFF
 CONFIG  CP3 = OFF
 CONFIG  CPB =_OFF
 CONFIG  CPD = OFF
 CONFIG  WRT0 = OFF
 CONFIG  WRT1 = OFF
 CONFIG  WRT2 = OFF
 CONFIG_ WRT3 = OFF
 CONFIG  WRTC = OFF
 CONFIG  WRTB = OFF
 CONFIG  WRTD = OFF
 CONFIG  EBTR0 = OFF
 CONFIG  EBTR1 = OFF
 CONFIG  EBTR2 = OFF
 CONFIG  EBTR3 = OFF
 CONFIG  EBTRB = OFF

Il risultato è decisamente più semplice, leggibile ed auto esplicativo.

Le opzioni disponibili sintassi possono essere diverse da processore a processore, dipendendo, come detto, dalle caratteristiche e dalle periferiche integrate; come sempre, il foglio dati è il mezzo più efficace per venirne a conoscenza.


UN TEMPLATE PER IL CONFIG

Nella pratica, la cosa più semplice è quella di utilizzare un form (template o maquette) iniziale che sarà sempre uguale per ogni progetto e verrà adeguato alle specifiche necessità del momento.
Il template ideale contiene una guida alle funzioni, in modo tale da ridurre la necessità di scratabellare il foglio dati, che può essere anche molto voluminoso (400 pagine o più).

Ad esempio, questa è una possibile lista delle  variazioni della configurazione degli oscillatori :

; Oscillator Selection: 
; OSC = LP LP 
; OSC = XT XT 
; OSC = HS HS 
; OSC = RC RC 
; OSC = EC EC-OSC2 
; OSC = ECIO EC-OSC2 
; OSC = HSPLL HS-PLL 
; OSC = RCIO RC-OSC2 
; OSCS = ON OFF

Eliminando il ; di commento e le linee o opzioni non desiderate, in un attimo si definisce la configurazione voluta, senza bisogno di ricorrere ad una complicata consultazione del foglio dati.

La seguente è una possibile lista delle  variazioni della configurazione per un PIC della famiglia 18F4321: anche qui, eliminando il ; iniziale  di commento per le linee desiderate, in un attimo si definisce la configurazione voluta, senza bisogno di ricorrere ad una complicata consultazione del foglio dati (nella lista sono evidenziati in verde i commenti, in viola gli statements selezionati, in nero i valori assegnati, similmente a come apparirà la lista stessa nell' editor di MPASM).

;-----------------------------------------------------------------------------
; CONFIG List
; Togliere il commento dalle linee scelte
;-----------------------------------------------------------------------------
;   PORTB A/D Enable bit:
 
CONFIG PBADEN = DIG   ; PORTB<4:0> pins are configured as digital I/O
;CONFIG PBADEN = ANA    ; PORTB<4:0> pins are configured as analog input
;
;   CCP2 MUX bit:
 
CONFIG CCP2MX = RB3   ; CCP2 input/output is multiplexed with RB3
;CONFIG CCP2MX = RC1    ; CCP2 input/output is multiplexed with RC1
;
;   Extended Instruction Set Enable bit:
 
CONFIG XINST = OFF    ; Instruction set extension disabled (Legacy mode)
;CONFIG XINST = ON      ; Instruction set extension enabled
;
;   Background Debugger Enable bit:
;CONFIG DEBUG = ON      ; Background debugger enabled, RB6 and RB7 to ICSP
 
CONFIG DEBUG = OFF    ; Background debugger disabled, RB6 and RB7 as GPIO
;
;   Single-Supply ICSP Enable bit:
 
CONFIG LVP = OFF      ; Single-Supply ICSP disabled
;CONFIG LVP = ON        ; Single-Supply ICSP enabled
;
;   Oscillator Selection bits:
 
CONFIG OSC = HS       ; HS oscillator
;CONFIG OSC = HSPLL     ; as above + PLL (Clock Frequency = 4 x FOSC1)
;CONFIG OSC = LP        ; LP Oscillator
;CONFIG OSC = XT        ; XT Oscillator
;CONFIG OSC = HS        ; HS Oscillator
;CONFIG OSC = RC        ; External RC oscillator, RA7 input, CLKO function on RA6
;CONFIG OSC = RCIO      ; External RC oscillator, RA7 input, GPIO on RA6
;CONFIG OSC = EC        ; EC oscillator, RA7 input, CLKO function on RA6
;CONFIG OSC = ECIO      ; EC oscillator, RA7 input, GPIO on RA6
;CONFIG OSC = INTIO2    ; Internal oscillator, GPIO on RA6 and RA7
;CONFIG OSC = INTIO2PLL ; as above + PLL
;CONFIG OSC = INTIO1    ; Internal oscillator, CLKO function on RA6, GPIO on RA7
;CONFIG OSC = INTIO1PLL ; as above + PLL
;
;   Low-Power Timer1 Oscillator Enable bit:
   CONFIG LPT1OSC = OFF  ; Timer1 configured for higher power operation
;CONFIG LPT1OSC = ON    ; Timer1 configured for low-power operation
;
;   Fail-Safe Clock Monitor Enable bit:
 
CONFIG FCMEN = OFF    ; Fail-Safe Clock Monitor disabled
;CONFIG FCMEN = ON      ; Fail-Safe Clock Monitor enabled
;
;   Internal/External Oscillator Switchover bit:
 
CONFIG IESO = OFF     ; Oscillator Switchover mode disabled
;CONFIG IESO = ON       ; Oscillator Switchover mode enabled

;   Power-up Timer Enable bit:
 
CONFIG PWRT = ON      ; PWRT enabled
;CONFIG PWRT = OFF      ; PWRT disabled
;
;   Brown-out Reset Enable bits:
 
CONFIG BOR = ON       ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
;CONFIG BOR = OFF       ; Brown-out Reset disabled
;CONFIG BOR = SOFT      ; Brown-out Reset enabled and controlled by software
;CONFIG BOR = NOSLP     ; Brown-out Reset enabled in hardware only and disabled in Sleep
;
;   Brown-out Reset Voltage bits:
;CONFIG BORV = 0        ; Soglia reset 4.5V
 
CONFIG BORV = 1       ; Soglia reset 4.2V
;CONFIG BORV = 2        ; Soglia reset 2.7V
;CONFIG BORV = 3        ; Soglia reset 2.0V
;
;   MCLR Pin Enable bit:
;CONFIG MCLRE = OFF     ; RE3 input pin enabled; MCLR disabled
 
CONFIG MCLRE = ON     ; MCLR pin enabled; RE3 input pin disabled
;
;   Watchdog Timer Enable bit:
 
CONFIG WDT = OFF      ; WDT disabled (control on SWDTEN bit)
;CONFIG WDT = ON        ; WDT enabled
;
;   Watchdog Timer Postscale Select bits:
;CONFIG WDTPS = 1       ; 1:1
;CONFIG WDTPS = 2       ; 1:2
;CONFIG WDTPS = 4       ; 1:4
;CONFIG WDTPS = 8       ; 1:8
;CONFIG WDTPS = 16      ; 1:16
;CONFIG WDTPS = 32      ; 1:32
;CONFIG WDTPS = 64      ; 1:64
;CONFIG WDTPS = 128     ; 1:128
;CONFIG WDTPS = 256     ; 1:256
;CONFIG WDTPS = 512     ; 1:512
;CONFIG WDTPS = 1024    ; 1:1024
;CONFIG WDTPS = 2048    ; 1:2048
;CONFIG WDTPS = 4096    ; 1:4096
;CONFIG WDTPS = 8192    ; 1:8192
;CONFIG WDTPS = 16384   ; 1:16384
;CONFIG WDTPS = 32768   ; 1:32768
;
;   Stack Full/Underflow Reset Enable bit:
;CONFIG  STVREN = OFF   ; Stack full/underflow will not cause Reset
 
CONFIG STVREN = ON    ; Stack full/underflow will cause Reset
;
;   Boot Block Size Select bits:
;CONFIG BBSIZ = BB256   ; 256 Word
;CONFIG BBSIZ = BB512   ; 512 Word
;CONFIG BBSIZ = BB1K    ;1024 Word
;
;   Code Protection bit Block 0 and 1:
;CONFIG CPx = ON        ; Block x code-protected
;CONFIG CPx = OFF       ; Block x not code-protected
 
CONFIG CP0 = OFF       ; code protection block 0 (ON/OFF)
 
CONFIG CP1 = OFF       ; code protection block 1 (ON/OFF)
;
;   Boot Block Code Protection bit:
 
CONFIG CPB = OFF      ; code protection bootblock  (ON/OFF)
;
 ;   Data EEPROM Code Protection bit:
 
CONFIG CPD = OFF      ; code protection eeprom (ON/OFF)
;
;   Write Protection bit Block 0 and 1:
;CONFIG WRTx = ON       ; Block x write-protected
;CONFIG WRTx = OFF      ; Block x not write-protected
  CONFIG WRT0 = OFF     ; Write protect block 0 (ON/OFF)
 
CONFIG WRT1 = OFF     ; Write protect block 1 (ON/OFF)
 
CONFIG WRTB = OFF     ; Write protect bootblock (ON/OFF)
;
;   Configuration Register Write Protection bit:
 
CONFIG WRTC = OFF     ; Write protecte configurations (ON/OFF)
;
;   Data EEPROM Write Protection bit:
 
CONFIG WRTD = OFF     ; Write protect eeprom (ON/OFF)
;
;   Table Read Protection bit Block 0 and 1:
;CONFIG EBTRx = ON      ; Block x protected from table reads in other blocks
;CONFIG EBTRx = OFF     ; Block x not protected from table reads in other blocks
 
CONFIG EBTR0 = OFF   
; Read protect table block 0 (ON/OFF)
 
CONFIG EBTR1 = OFF    ; Read protect table block 1 (ON/OFF)
;
;   Boot Block Table Read Protection bit:
;CONFIG EBTRB = ON      ; Boot block protected from table reads in other blocks
 
CONFIG EBTRB = OFF    ; Boot block not protected from table reads in other blocks

Cancellando le linee indesiderate, si otterrà facilmente una lista limitata:

;-----------------------------------------------------------------------------
; CONFIG List
;-----------------------------------------------------------------------------

 
CONFIG PBADEN = DIG    ; PORTB<4:0> pins are configured as digital I/O
 
CONFIG CCP2MX = RB3    ; CCP2 input/output is multiplexed with RB3
 
CONFIG XINST = OFF     ; Instruction set extension disabled (Legacy mode)
 
CONFIG DEBUG = OFF     ; Background debugger disabled, RB6 and RB7 as GPIO
 
CONFIG LVP = OFF       ; Single-Supply ICSP disabled
 
CONFIG OSC = HS        ; HS oscillator
 
CONFIG LPT1OSC = OFF   ; Timer1 configured for higher power operation
 
CONFIG FCMEN = OFF     ; Fail-Safe Clock Monitor disabled
 
CONFIG IESO = OFF      ; Oscillator Switchover mode disabled
 
CONFIG PWRT = ON       ; PWRT enabled
 
CONFIG BOR = ON        ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
 
CONFIG BORV = 1        ; Soglia reset 4.2V
 
CONFIG MCLRE = ON      ; MCLR pin enabled; RE3 input pin disabled
 
CONFIG WDT = OFF       ; WDT disabled (control on SWDTEN bit)
 
CONFIG STVREN = ON     ; Stack full/underflow will cause Reset
 
CONFIG CP0 = OFF       ; code protection block 0 (ON/OFF)
 
CONFIG CP1 = OFF       ; code protection block 1 (ON/OFF)
 
CONFIG CPB = OFF       ; code protection bootblock  (ON/OFF)
 
CONFIG CPD = OFF       ; code protection eeprom (ON/OFF)
 
CONFIG WRT0 = OFF      ; Write protect block 0 (ON/OFF)
 
CONFIG WRT1 = OFF      ; Write protect block 1 (ON/OFF)
 
CONFIG WRTB = OFF      ; Write protect bootblock (ON/OFF)
 
CONFIG WRTC = OFF      ; Write protecte configurations (ON/OFF)
 
CONFIG WRTD = OFF      ; Write protect eeprom (ON/OFF)
 
CONFIG EBTR0 = OFF    
; Read protect table block 0 (ON/OFF)
 
CONFIG EBTR1 = OFF     ; Read protect table block 1 (ON/OFF)
 
CONFIG EBTRB = OFF     ; Boot block not protected from table reads in other blocks

 


 

Va notato che :

  1. teoricamente, non è obbligatorio inizializzare tutti i bit dei registri di configurazione, potendo essere adeguato il valore che assumono di default (ad esempio, nella lista qui sopra non è importante configurare un prescaler per il Watch Dog se questo è disabilitato).
    In ogni caso è da ritenere pratica migliore il dichiarare sempre esplicitamente come si vuole configurato ogni registro. Questo non costa nulla in termini di risorse del processore e pochi
    secondi in termini di tempo per la scrittura del sorgente, ma evita interpretazioni dubbie, assicura dell' esattezza della configurazione voluta  e rende chiaro cosa si voglia ottenere.
     
  2. Inoltre è opportuno utilizzare simboli e non assoluti, ad esempio assegnando un valore esadecimale direttamente al registro di configurazione : questa pratica barbara e insensata non  porta nessunissimo vantaggio in fase di compilazione, mentre, per contro, rende criptica la lettura del sorgente.
     
  3. Non è ideale, anche se possibile, fissare i parametri di configurazione attraverso le utilities del dispositivo programmatore : in questo modo si rischia di ritrovarsi con una configurazione diversa da quella voluta. Invece, la definizione della configurazione nel sorgente, in qualsiasi buon programma, sovrapassa eventuali default e fornisce le giuste assegnazioni desiderate.
     
  4. Inoltre, un tool di sviluppo integrato come MPLAB IDE utilizza le opzioni indicate nel CONFIG per predisporre correttamente l' ambiente per il debug e la programmazione.

Dato che aggiungere qualche riga in più al sorgente non costa nulla, nè i termini battitura, nè in tempo di esecuzione della compilazione, non si vede alcuna ragione per non utilizzare una forma ragionevolmente chiara di lavoro.

Ovviamente, per la definizione dei vari parametri e delle loro opzioni, occorrerà consultare il foglio dati del componente usato, anche se, a parte i chip dotati di funzioni speciali (USB, CAN, ecc), registri e funzioni basilari sono gli stessi per tutti i PIC di una stessa famiglia.
Vedremo maggiori dettagli su questi argomenti nelle pagine che trattano le varie funzioni.

 

 

Nell' area di download è disponibile un template per il CONFIG dei PIC18


I  REGISTRI CONFIG

Diamo per conoscenza una breve panoramica dei registri più comuni nel CONFIG dei PIC18

Si tratta di registri a 16 bit che sono identificati da un numero e dall' indicatore H o L a seconda si tratti del byte basso o alto. Sono posti a partire da un indirizzo elevato, tipicamente 300000H, a cui si può accedere solamente usando le istruzioni di lettura/scrittura delle tabelle (table reads and writes) o in fase di programmazione.

Ad esempio, per i PIC della famiglia 18F4321, i registri CONFIG sono i seguenti :

Registro Indirizzo Funzioni
_CONFIG1H 30001H, contiene  i bit di selezione della modalità dell' oscillatore e i due bit di switch tra clock esterno e interno e  di abilitazione del fail safe clock monitor.
_CONFIG2L 30002H contiene i bit di controllo di BOR e PWRT
_CONFIG2H 30003H contiene le opzioni per il watchdog
_CONFIG3H 30005H abilita varie opzioni : funzione del pin MCLR, abilitazione dell' oscillatore low power di TMR1, abilitazione dei convertitori A/D sul POTB4:0, multiplex di CCP2
_CONFIG4L 30006H abilita le funzioni di debug, il set di istruzioni esteso, le dimensioni del boot block, la funzione di ICPORT, di LVP e la richiesta di reset a seguito di un errore di stack
_CONFIG5L 30008H contiene i code protection bit CP1:0
_CONFIG5H 300009H contiene i code protection bit CPD:B
_CONFIG6L 30000AH contiene i code protection bit WRT1:0
_CONFIG6H 30000BH contiene i code protection bit WRTD:C
_CONFIG7L 30000CH contiene i code protection bit EBTR1:0
_CONFIG7H 30000DH contiene il code protection bit EBTRB

Al di là della scrittura iniziale con il dispositivo di programmazione hardware, la programmazione software dei registri CONFIG si effettua allo stesso modo della flash, utilizzando il bit WR in EECON1 e le istruzioni TBLWT con il puntatore TBLPTR che punta ai registri di configurazione. Viene scritto un registro per volta.
Per modificare una cella, una istruzione TBLWT può scrivere un 1 o uno 0 nella cella stessa.

Attenzione, perchè anche se è possibile modificare aree di CONFIG durante l'esecuzione del programma, questa opzione va valutata in modo molto accurato, in quanto si tratta di andare a modificare le basi dell' hardware del processore, con la possibilità di avere risultati inaspettati o situazioni critiche.
 

 


I  REGISTRI ID

Ai registri CONFIG si accodano i registri di identificazione del dispositivo

Registro Indirizzo Funzione
DEVID1 3FFFFEH bit meno significativi dell' identificatore del chip e bit della revisione
DEVID2 3FFFFFH bit più significativi dell' identificatore del chip

Il contenuto di questi due registri è read only e, fissato dal costruttore, identifica il tipo di chip e la revisione del silicio.

Come sempre, la stesura di un sorgente ordinato e l' uso intensivo di label invece di assoluti, facilita grandemente il lavoro del programmatore quando si arriva alla fase di collaudo del software.
 


 

 

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