8.3.1 New Oscillator Source (NOSC) and New Divider Selection Request (NDIV) Bits
The New Oscillator Source (NOSC) and New Divider Selection Request (NDIV) bits select the system clock source and frequency that are used for the CPU and peripherals.
When new values of NOSC and NDIV are written to OSCCON1, the current oscillator selection will continue to operate while waiting for the new clock source to indicate that it is stable and ready. In some cases, the newly requested source may already be in use, and is ready immediately. In the case of a divider-only change, the new and old sources are the same, so the old source will be ready immediately. The device may enter Sleep while waiting for the switch, as described in 8.3.3 Clock Switch and Sleep.
When the new oscillator is ready, the New Oscillator is Ready
(NOSCR) bit of OSCCON3 is set and also the Clock Switch Interrupt Flag (CSWIF) bit of PIR1
is set. If Clock Switch Interrupts are enabled (CSWIE = 1
), an interrupt will be generated at that time. The Oscillator Ready (ORDY)
bit of OSCCON3 can also be polled to determine when the oscillator is ready in lieu of an
interrupt.
If the Clock Switch Hold (CSWHOLD) bit is clear, the oscillator switch will occur when the New Oscillator is Ready (NOSCR) bit is set, and the interrupt (if enabled) will be serviced at the new oscillator setting.
If CSWHOLD is set, the oscillator switch is suspended, while execution continues using the current (old) clock source. When the NOSCR bit is set, software must:
- Set CSWHOLD =
0
so the switch can complete, or - Copy COSC into NOSC to abandon the switch.
If Doze is in effect, the switch occurs on the next clock cycle, whether or not the CPU is operating during that cycle.
Changing the clock post-divider without changing the clock source
(i.e., changing FOSC from 1 MHz to 2 MHz) is handled in the same manner as a
clock source change, as described previously. The clock source will already be active, so
the switch is relatively quick. CSWHOLD must be clear (CSWHOLD = 0
) for the switch to complete.
The current COSC and CDIV are indicated in the OSCCON2 register up to the moment when the switch actually occurs, at which time OSCCON2 is updated and ORDY is set. NOSCR is cleared by hardware to indicate that the switch is complete.