Brian,
I don't use bootloaders very often, so this isn't the way I normally do things.
But I thought I'd give some food for thought on setting configs with either a bootloader or ICSP on 18F's.
Code:
ASM
;--[CONFIG1H]--------------------------------------------------
CFG_1H = _OSC_HSPLL_1H ; Oscillator
CFG_1H = CFG_1H & _FCMEN_OFF_1H ; Fail-safe Clock Monitor
CFG_1H = CFG_1H & _IESO_OFF_1H ; Int/Ext Osc Switchover
;--[CONFIG2L]--------------------------------------------------
CFG_2L = _PWRT_ON_2L ; Power-ON Timer
CFG_2L = CFG_2L & _BOREN_ON_2L ; Brown Out
CFG_2L = CFG_2L & _BORV_2_2L ; Brown Out voltage
;--[CONFIG2H]--------------------------------------------------
CFG_2H = _WDT_ON_2H ; Watch Dog Timer
CFG_2H = CFG_2H & _WDTPS_512_2H ; WDT Prescaler
;--[CONFIG3H]--------------------------------------------------
CFG_3H = _MCLRE_ON_3H ; Master Clear Reset
CFG_3H = CFG_3H & _LPT1OSC_OFF_3H ; Low Power TMR1 Osc
CFG_3H = CFG_3H & _PBADEN_OFF_3H ; PORTB Analog
CFG_3H = CFG_3H & _CCP2MX_PORTC_3H ; CCP Multiplexer
;--[CONFIG4L]--------------------------------------------------
CFG_4L = _STVREN_ON_4L ; Stack Over/Under Reset
CFG_4L = CFG_4L & _LVP_OFF_4L ; Low Voltage Programming
CFG_4L = CFG_4L & _XINST_OFF_4L ; Extended Instructions
CFG_4L = CFG_4L & _DEBUG_OFF_4L ; Hardware Debugger
;--------------------------------------------------------------
ifdef LOADER_USED ; If bootloader is used
#include "RTconfig.inc" ; change Configs at runtime
WriteConfig?CC _CONFIG1H, CFG_1H
WriteConfig?CC _CONFIG2L, CFG_2L
WriteConfig?CC _CONFIG2H, CFG_2H
WriteConfig?CC _CONFIG3H, CFG_3H
WriteConfig?CC _CONFIG4L, CFG_4L
else ; If bootloader NOT used
__CONFIG _CONFIG1H, CFG_1H ; set __configs in program
__CONFIG _CONFIG2L, CFG_2L
__CONFIG _CONFIG2H, CFG_2H
__CONFIG _CONFIG3H, CFG_3H
__CONFIG _CONFIG4L, CFG_4L
endif
ENDASM
;----------------------------------------------[ END Configs]--
If the bootloader is being used. It includes the Run-Time Config module from ...
http://www.picbasic.co.uk/forum/showthread.php?t=4093
Then sets the configuration manually at run-time.
The module checks the configs on every reset, but only writes them if they are different.
If the bootloader is Not being used, it saves space by not including the Run Time Config module and puts the __CONFIG's in the program like normal.
Be carefull when changing Oscillator settings!
If you set a mode that does not provide a system clock, or gives a clock at a frequency that the bootloader does not expect, ...
You will have to re-Flash the bootloader to make it work again.
You may even want to comment out the WriteConfig?CC _CONFIG1H line, just to make sure it doesn't get changed.
HTH,
Bookmarks