Tips & Tricks - PIC

 

 


5.- Configurazione del processore.

E' importante, prima di iniziare ad utilizzare il processore, configurarne le risorse di base.
Questa operazione è relativa a ciascun processore o famiglia, in quanto le risorse interne potranno essere molto differenti.

;********************************************************************
;====================================================================
; CONFIGURAZIONE
;====================================================================

 
#if DEBUG == 1
; debug configuration
 
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON
 __CONFIG _CONFIG1, _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_ON
 __CONFIG _CONFIG1, _IESO_OFF & _FCMEN_OFF


 
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19
 __CONFIG _CONFIG2, _LVP_OFF

 
#else
; standard configuration
 
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON
 __CONFIG _CONFIG1, _CP_ON & _CPD_ON & _BOREN_ON & _CLKOUTEN_OFF
 __CONFIG _CONFIG1, _IESO_OFF & _FCMEN_OFF

 __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19
 __CONFIG _CONFIG2, _LVP_OFF

 #endif

La configurazione non è parte secondaria del programma, dato che tanto più è complesso il processore tanto più è necessario verificare cosa sia attivato e cosa no nei default.
Per evitare questo è molto più pratico inserire un CONFIG completo: non costa nulla, non rallenta l' assemblaggio ed evita sorprese sgradevoli e situazioni difficili da debuggare. 

Vediamo un esempio di "tutorial" minimalista relativo alle opzioni possibili del CONFIG e ad una diversa espressione delle alternative di configurazione per un PIC18F.
Una direttiva dell' assembler NOLIST blocca la stampa nel file listato (.LST) della parte solo descrittiva; la stampa viene ripresa dopo la direttiva LIST.

 NOLIST
;=============================================================================
; CONFIGURAZIONE =
;=============================================================================
;-----------------------------------------------------------------------------
; Funzioni possibili in CONFIG
;-----------------------------------------------------------------------------
; PORTB A/D Enable bit:
; PBADEN = DIG ; PORTB<4:0> as digital I/O
; PBADEN = ANA ; PORTB<4:0> as analog input
;
; CCP2 MUX bit:
; CCP2MX = RB3 ; CCP2 input/output is multiplexed with RB3
; CCP2MX = RC1 ; CCP2 input/output is multiplexed with RC1
;
; Extended Instruction Set Enable bit:
; XINST = OFF ; Instruction set extension disabled (Legacy mode)
; XINST = ON  ; Instruction set extension enabled
;
; Background Debugger Enable bit:
; DEBUG = ON  ; Background debugger enabled, RB6 and RB7 are dedicated
; DEBUG = OFF ; Background debugger enabled, RB6 and RB7 as GPIO
;
; Single-Supply ICSP Enable bit:
; LVP = OFF ; Single-Supply ICSP disabled
: LVP = ON Single-Supply ICSP enabled
;
; Oscillator Selection bits:
; OSC = HS     ; Oscillatore principale
; OSC = LP     ; LP
; OSC = XT     ; XT
; OSC = HS     ; HS
; OSC = RC     ; External RC , CLKO on RA6
; OSC = EC     ; EC , CLKO on RA6
; OSC = ECIO   ; EC , GPIO on RA6
; OSC = HSPLL  ; HS , PLL enabled (Clock Frequency = 4 x FOSC1)
; OSC = RCIO   ; External RC , GPIO on RA6
; OSC = INTIO2 ; Internal oscillator, GPIO on RA6 and RA7
; OSC = INTIO1 ; Internal oscillator, CLKO on RA6, GPIO on RA7
;
; Low-Power Timer1 Oscillator Enable bit:
; LPT1OSC = OFF ; Timer1 for higher power operation
; LPT1OSC = ON  ; Timer1 for low-power operation
;
; Fail-Safe Clock Monitor Enable bit:
; FCMEN = OFF   ; Fail-Safe Clock Monitor disabled
; FCMEN = ON    ; Fail-Safe Clock Monitor enabled
;
; Internal/External Oscillator Switchover bit:
; IESO = OFF    ; Oscillator Switchover mode disabled
; IESO = ON     ; Oscillator Switchover mode enabled
;
; Power-up Timer Enable bit:
; PWRT = ON     ; PWRT enabled
; PWRT = OFF    ; PWRT disabled
;
; Brown-out Reset Enable bits:
; BOR = ON      ; enabled in hardware only - SBOREN disabled
; BOR = OFF     ; disabled in hardware and software
; BOR = SOFT    ; enabled and controlled SBOREN
; BOR = NOSLP   ; enabled in hrdwr only, disabled in Sleep mode
;
; Brown-out Reset Voltage bits:
; BORV = 0 ; Soglia reset 4.5V
; BORV = 1 ; Soglia reset 4.2V
; BORV = 2 ; Soglia reset 2.7V
; BORV = 3 ; Soglia reset 2.0V
;
; MCLR Pin Enable bit:
; MCLRE = OFF ; RE3 input pin enabled, MCLR disabled
; MCLRE = ON  ; MCLR pin enabled, RE3 input pin disabled
;
; Watchdog Timer Enable bit:
; WDT = OFF   ; WDT disabled - control by SWDTEN bit
; WDT = ON    ; WDT enabled
;
; Watchdog Timer Postscale Select bits:
; WDTPS = 1     ; 1:1
; WDTPS = 2     ; 1:2
; WDTPS = 4     ; 1:4
; WDTPS = 8     ; 1:8
; WDTPS = 16    ; 1:16
; WDTPS = 32    ; 1:32
; WDTPS = 64    ; 1:64
; WDTPS = 128   ; 1:128
; WDTPS = 256   ; 1:256
; WDTPS = 512   ; 1:512
; WDTPS = 1024  ; 1:1024
; WDTPS = 2048  ; 1:2048
; WDTPS = 4096  ; 1:4096
; WDTPS = 8192  ; 1:8192
; WDTPS = 16384 ; 1:16384
; WDTPS = 32768 ; 1:32768
;
; Stack Full/Underflow Reset Enable bit:
; STVREN = OFF ; will not cause Reset
; STVREN = ON  ; will cause Reset
;
; Boot Block Size Select bits:
; BBSIZ = BB256 ; 256 Word
; BBSIZ = BB512 ; 512 Word
; BBSIZ = BB1K  ; 1024 Word
;
; Code Protection bit Block 0 and 1 (ON/OFF):
; CPx = ON  ; Block x code-protected
; CPx = OFF ; Block x not code-protected
; CP0 = OFF ; code protection block 0
; CP1 = OFF ; code protection block 1
;
; Boot Block Code Protection bit (ON/OFF):
; CPB = OFF ; code protection bootblock off
; CPB = ON  ; code protection bootblock on
;
; Data EEPROM Code Protection bit (ON/OFF):
; CPD = OFF ; code protection eeprom disabled
; CPD = ON  ; code protection eeprom enabled
;
; Write Protection bit Block 0 and 1 (ON/OFF):
; WRTx = ON  ; Block x write-protected
; WRTx = OFF ; Block x not write-protected
; WRT0 = OFF ; Write protect block 0
; WRT1 = OFF ; Write protect block 1
; WRTB = OFF ; Write protect bootblock
;
; Configuration Register Write Protection bit (ON/OFF):
; WRTC = OFF ; Write protecte config. disabled
; WRTC = ON  ; Write protecte config. enabled
;
; Data EEPROM Write Protection bit (ON/OFF):
; WRTD = OFF ; Write protect eeprom disabled
; WRTD = ON  ; Write protect eeprom enabled
;
; Table Read Protection bit Block 0 and 1 (ON/OFF):
; Block x protected from table reads executed in other blocks
; EBTRx = ON  ; table block x protected
; EBTRx = OFF ; table block x not protected
; EBTR0 = OFF ; Read protect table block 0
; EBTR1 = OFF ; Read protect table block 1
;
; Boot Block Table Read Protection bit:
; EBTRB = ON  ; Boot block protected
; EBTRB = OFF ; Boot block not protected

 
LIST

 #if DEBUG == 1        ; condizionale per configurazione in debug
;======================================================================
; CONFIGURAZIONS IN MODO DEBUG CON PICKIT
;======================================================================
;----------------------------------------------------------------------
; Modificare le linee con le scelte volute
;-----------------------------------------------------------------------
  CONFIG PBADEN = DIG  ; PORTB<4:0> pins as digital I/O on Reset
  CONFIG XINST = OFF   ; Instruction set extension and IA mode disabled
  CONFIG DEBUG = ON    ; Background debugger enabled on RB6 and RB7
  CONFIG LVP = OFF     ; Single-Supply ICSP disabled
  CONFIG OSC = INTIO1  ; Internal oscillator, CLKO on RA6, GPIO on RA7
  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 = OFF    ; PWRT disabled
  CONFIG BOR = ON      ; Brown-out 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 is placed on the 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

 
#else

;======================================================================
; CONFIGURAZIONS di lavoro
;======================================================================
;----------------------------------------------------------------------
; Modificare le linee con le scelte volute
;-----------------------------------------------------------------------
  CONFIG PBADEN = DIG  ; PORTB<4:0> pins as digital I/O on Reset
  CONFIG XINST = OFF   ; Instruction set extension and IA mode disabled
  CONFIG DEBUG = OFF   ; Background debugger disabled on RB6 and RB7
  CONFIG LVP = OFF     ; Single-Supply ICSP disabled
  CONFIG OSC = INTIO1  ; Internal oscillator, CLKO on RA6, GPIO on RA7
  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 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 is placed on the SWDTEN bit)
  CONFIG STVREN = ON   ; Stack full/underflow will cause Reset
  CONFIG CP0 = ON      ; code protection block 0 ON
  CONFIG CP1 = ON      ; code protection block 1 ON
  CONFIG CPB = OFF     ; code protection bootblock OFF
  CONFIG CPD = OFF     ; code protection eeprom OFF
  CONFIG WRT0 = OFF    ; Write protect block 0 OFF
  CONFIG WRT1 = OFF    ; Write protect block 1 OFF
  CONFIG WRTB = OFF    ; Write protect bootblock OFF
  CONFIG WRTC = OFF    ; Write protecte configurations OFF
  CONFIG WRTD = OFF    ; Write protect eeprom OFF
  CONFIG EBTR0 = OFF   ; Read protect table block 0 OFF
  CONFIG EBTR1 = OFF   ; Read protect table block 1 OFF
  CONFIG EBTRB = OFF   ; Boot block not protected from table reads

 
#endif

 

Certamente se non si ritiene di avere bisogno di un dettaglio simile, questa parte sarà tagliata a piacere.


 

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 17/05/12 .