Om man vill köra en PIC18F47J53 på 48MHz med hjälp av den interna oscillatorn måste man använda PLL'en. Den interna oscillatorn är på 8MHz och PLL'en förväntar sig 4MHz på sin ingång. Vi behöver dela 8MHz klockan med två. Ur databladet:
PLLDIV <2:0> skall alltså inta värdet 6 för att prescalern skall dela med två, vilket också stöds av flera tabeller i databladet, bland annat förklaringen av CONFIG1L (där de relevanta bitarna lever):
Kod: Markera allt
bit 3-1 PLLDIV<2:0>: Oscillator Selection bits
Divider must be selected to provide a 4 MHz input into the 96 MHz PLL.
111 = No divide – oscillator used directly (4 MHz input)
110 = Oscillator divided by 2 (8 MHz input)
101 = Oscillator divided by 3 (12 MHz input)
100 = Oscillator divided by 4 (16 MHz input)
011 = Oscillator divided by 5 (20 MHz input)
010 = Oscillator divided by 6 (24 MHz input)
001 = Oscillator divided by 10 (40 MHz input)
000 = Oscillator divided by 12 (48 MHz input)
Kod: Markera allt
; PLL Prescaler Selection:
; PLLDIV = 12 Divide by 12 (48 MHz oscillator input)
; PLLDIV = 10 Divide by 10 (40 MHz oscillator input)
; PLLDIV = 6 Divide by 6 (24 MHz oscillator input)
; PLLDIV = 5 Divide by 5 (20 MHz oscillator input)
; PLLDIV = 4 Divide by 4 (16 MHz oscillator input)
; PLLDIV = 3 Divide by 3 (12 MHz oscillator input)
; PLLDIV = 2 Divide by 2 (8 MHz oscillator input)
; PLLDIV = 1 No prescale (4 MHz oscillator input drives PLL directly)
Jag har inget direkt problem, allt fungerar som det ska men det är "lite" förvirrande och jag är nyfiken. Kan någon förklara var denna "ommappning" sker? Är optionerna definierade i någon fil jag missat eller sker detta automagiskt i assemblern?