RESET
I PIC 18F, pur avendo una gamma di sorgenti maggiore, rispondono agli
stessi reset dei mid-range.
Per il controllo delle sorgenti, il registro PCON è rinominato come
RCON e
i bit TO e PD passano dallo STATUS a questo registro.
POR - Power On Reset
La funzione del bit POR è inalterata; passa solamente da PCON a
RCON
BOR - Brown Out Reset
Pure il bit BOR passa da PCON a RCON.
Però la gestione del BOR è più sofisticata nei PIC18.
- Quando BOR è abilitato, il Power Up Timer (PWRT) è abilitato
automaticamente e lo stato del bit PWRTEN, CONFIG2L<0> è ignorato
- Il configuratore iniziale offre la possibilità di selezionare almeno 4
livelli di tensione di BOR con i bit BORV1:0, CONFIG2L<3:2> che
vanno adeguati alla tensione di alimentazione scelta
- Il tempo per cui la Vdd rimane al di sotto di VBOR (parametro D005) è
aumentato rispetto ai mid-range (parametro 35, TBOR)
Quindi il passaggio da PIC16 a PIC18 richiede:
- Cambiare la label PCON con RCON
- Cambiare STATUS, NOT_TO con RCON, NOT_TO
- Cambiare STATUS, NOT_PD con RCON, NOT_PD
- Nel CONFIG iniziale, selezionare il livello di BOR (se usato) in
relazione alla tensione di alimentazione
MCLR - Master Clear
Nessun bisogno di modifiche tra il circuito di reset dei mid-range e dei 18F, tenen do presente la possibilità di utilizzare il pin del MCLR come
ingresso GPIO, attraverso la configurazione iniziale.
WDT - WatchDog Timer
Nei PIC18, WDT non condivide più il postscaler con Timer0, ma dispone di
uno proprio, indipendente da quello del Timer.
Come per i PIC16, WDT è abilitato nel config iniziale alttraverso il bit WDTE,
CONFIG2H<0>, mentre il postscaler è configurato con i bit WDTPS2:0,
CONFIG2H <3:1>, in un range da 1:1 a 1:128 nei PIC18Fxx2 e con WDTPS3:0
per i PIC18Fxxxx, fino a 1:32768.
Questo consente operazioni con tempi di WDT molto lunghi.
Se WDT è disabilitato nel CONFIG, è possibile comunque abilitarlo da
programma usando il bit SWDTE, WDTCON<0>.
Se WDT è abilitato attraverso WDTE, ogni azione su SWDTE non ha effetto.
Stack Underflow-Overflow
Per quanto riguarda la priorità dell' interrupt, il controllo avviene con
il bit IPEN, RCON<7> (Interrupt Priority Enable) che al POR è a 0 e
quindi, se non alterato, origina la compatibilità ad un solo livello.
Se si intende sfruttare il doppio livello, occorre documentarsi
sufficientemente sulle manovre necessarie, dato che vengono apportati
sostanziali cambiamenti alla gestione. In breve:
- Quando IPEN = 1 le funzioni di GIE, INTCON<7> e PEIE,
INTCON<6> vengono modificate.
Con interrupt ad un solo livello, GIE è l' abilitazione generale dell'
interrupt, mentre PEIE solo quella degli interrupt periferici.
Nella doppia priorità GIE diventa GIEH e abilita tutti gli interrupt,
mentre PEIE diventa GIEL ed abilita gli interrupt a basso livello. Si
viene così a formare una differenza non tra interrupt globale e interrupt
periferici, ma tra interrupt globale e interrupt a basso livello di
priorità, che richiede una piccola revisone della filosofia di approcio.
- Ogni sorgente di interrupt ha associato un bit che permette di gestirla
a bassa o alta priorità.
Se il bit di controllo della priorità è a 1, all' interrupt viene
assegnato il livello superiore e viceversa.
La gestione a doppia priorità genera un secondo vettore di interrupt a
0018h di cui bisognerà tenere conto.
Se una sorgente di interrupt ha il flag nel bit x di PIR1 o PIR2, il
corrispondente bit x di IPIR1 o IPIR2 sarà l' indicatore del livello di
priorità e il corrispondente bit x dei registri PIE1 p o PIE2 sarà l'
abilitazione.
- Le priorità non contenute in questi registri si ritrovano in INTCON2 e
INTCON3.
Timer0 e RBIF hanno il settaggio in TMR0IP, INTCON2<2> e RBIP,
INTCON<2>. Così pure i controlli di INT1 e INT2, che si trovano in
INTCON3
Istruzione RESET
I PIC 18 dispongono di una istruzione RESET che costringe il processore in
una situazione simile a quella prodotta da un livello basso al pin MCLR: tutte
le periferiche sono resettate e il PC viene riportato al vettore di Reset..
Il registro RCON contiene ora un bit RI che è settato da BOR, POR e WDT e
portato a zero dall' istruzione RESET.
Testando questo bit si può determinare l' avvenuto reset a causa dell'
istruzione.
Azione
Se si prevedono concorrenti diverse cause di reset, è opportuno
implementare l' analisi della sorgente e le relative misure
correttive. |
|