
PIC24FJ128GA010 FAMILY
DS39747F-page 104
2005-2012 Microchip Technology Inc.
A recommended code sequence for a clock switch
includes the following:
1.
Disable interrupts during the OSCCON register
unlock and write sequence.
2.
Execute the unlock sequence for the OSCCON
high byte by writing 78h and 9Ah to
OSCCON<15:8>
in
two
back-to-back
instructions.
3.
Write new oscillator source to the NOSC control
bits in the instruction immediately following the
unlock sequence.
4.
Execute the unlock sequence for the OSCCON
low
byte
by
writing
46h
and
57h
to
OSCCON<7:0> in two back-to-back instructions.
5.
Set the OSWEN bit in the instruction immediately
following the unlock sequence.
6. Continue to execute code that is not
clock-sensitive (optional).
7.
Invoke an appropriate amount of software delay
(cycle counting) to allow the selected oscillator
and/or PLL to start and stabilize.
8.
Check to see if OSWEN is ‘0’. If it is, the switch
was successful. If OSWEN is still set, then
check the LOCK bit to determine the cause of
the failure.
The core sequence for unlocking the OSCCON register
EXAMPLE 8-1:
BASIC CODE SEQUENCE
FOR CLOCK SWITCHING
.global __reset
.include "p24fxxxx.inc"
.text
__reset:
;Place the new oscillator selection in W0
;OSCCONH (high byte) Unlock Sequence
DISI #18
PUSH
w1
PUSH
w2
PUSH
w3
MOV
#OSCCONH, w1
MOV
#0x78, w2
MOV
#0x9A, w3
MOV.b
w2, [w1]
MOV.b
w3, [w1]
;Set new oscillator selection
MOV.b
WREG, OSCCONH
;OSCCONL (low byte) unlock sequence
MOV
#OSCCONL, w1
MOV
#0x46, w2
MOV
#0x57, w3
MOV.b
w2, [w1]
MOV.b
w3, [w1]
;Start oscillator switch operation
BSET OSCCON, #0
POP
w3
POP
w2
POP
w1
.end