82 # define PIC24F_DEFINED 1
84 # define PIC24F_DEFINED 0
88 # define PIC24H_DEFINED 1
90 # define PIC24H_DEFINED 0
94 # define dsPIC33F_DEFINED 1
96 # define dsPIC33F_DEFINED 0
100 # define PIC24FK_DEFINED 1
102 # define PIC24FK_DEFINED 0
106 # define PIC24E_DEFINED 1
108 # define PIC24E_DEFINED 0
112 # define dsPIC33E_DEFINED 1
114 # define dsPIC33E_DEFINED 0
155 #define SIM_CLOCK 0, -1, 1000000L, POSCMD_NONE, -1, configClockSim, 1, 498
156 #define FRCPLL_FCY16MHz 1, FNOSC_FRCPLL, 16000000L, POSCMD_NONE, -1, configClockFRCPLL_FCY16MHz, (PIC24F_DEFINED || PIC24FK_DEFINED), 498
157 #define FRC_FCY4MHz 2, FNOSC_FRC, 4000000L, POSCMD_NONE, -1, configClockFRC_FCY4MHz, (PIC24F_DEFINED || PIC24FK_DEFINED), 498
158 #define PRI_NO_PLL_7372KHzCrystal 3, FNOSC_PRI, 3686400L, POSCMD_XT, 7372800L, configClockPRI_NO_PLL_7372KHzCrystal, (PIC24F_DEFINED || PIC24FK_DEFINED || PIC24H_DEFINED || dsPIC33F_DEFINED), 498
159 #define FRC_FCY3685KHz 4, FNOSC_FRC, 3685000L, POSCMD_NONE, -1, configClockFRC_FCY3685KHz, (PIC24E_DEFINED || dsPIC33E_DEFINED || PIC24H_DEFINED || dsPIC33F_DEFINED), 498
160 #define FRCPLL_FCY40MHz 5, FNOSC_FRCPLL, 40000000L, POSCMD_NONE, -1, configClockFRCPLL_FCY40MHz, (PIC24E_DEFINED || dsPIC33E_DEFINED || PIC24H_DEFINED || dsPIC33F_DEFINED), 498
161 #define PRIPLL_7372KHzCrystal_40MHzFCY 6, FNOSC_PRIPLL, 39920833L, POSCMD_XT, 7372800L, configClockPRIPLL_7372KHzCrystal_40MHzFCY, (PIC24H_DEFINED || dsPIC33F_DEFINED), 498
162 #define PRIPLL_8MHzCrystal_40MHzFCY 7, FNOSC_PRIPLL, 40000000L, POSCMD_XT, 8000000L, configClockPRIPLL_8MHzCrystal_40MHzFCY, (PIC24H_DEFINED || dsPIC33F_DEFINED || PIC24E_DEFINED || dsPIC33E_DEFINED), 498
163 #define PRIPLL_8MHzCrystal_16MHzFCY 8, FNOSC_PRIPLL, 16000000L, POSCMD_XT, 8000000L, configClockPRIPLL_8MHzCrystal_16MHzFCY, (PIC24F_DEFINED || PIC24FK_DEFINED), 498
164 #define PRI_8MHzCrystal_4MHzFCY 9, FNOSC_PRI, 4000000L, POSCMD_XT, 8000000L, configClockPRI_8MHzCrystal_4MHzFCY, (PIC24F_DEFINED || PIC24FK_DEFINED || PIC24H_DEFINED || dsPIC33F_DEFINED || PIC24E_DEFINED || dsPIC33E_DEFINED), 498
165 #define FRCPLL_FCY60MHz 10, FNOSC_FRCPLL, 59881250L, POSCMD_NONE, -1, configClockFRCPLL_FCY60MHz, (PIC24E_DEFINED || dsPIC33E_DEFINED), 498
166 #define FRCPLL_FCY70MHz 11, FNOSC_FRCPLL, 70015000L, POSCMD_NONE, -1, configClockFRCPLL_FCY70MHz, (PIC24E_DEFINED || dsPIC33E_DEFINED), 498
176 # define POSCMD_EC POSCMOD_EC
177 # define POSCMD_XT POSCMOD_XT
178 # define POSCMD_HS POSCMOD_HS
179 # define POSCMD_NONE POSCMOD_NONE
188 #define GET_CLOCK_CONFIG_INDEX(params) _GET_CLOCK_CONFIG_INDEX(params)
189 #define GET_FNOSC_SEL(params) _GET_FNOSC_SEL(params)
190 #define GET_FCY(params) _GET_FCY(params)
191 #define GET_POSCMD_SEL(params) _GET_POSCMD_SEL(params)
192 #define GET_POSC_FREQ(params) _GET_POSC_FREQ(params)
193 #define GET_CONFIG_DEFAULT_CLOCK(params) _GET_CONFIG_DEFAULT_CLOCK(params)
194 #define GET_IS_SUPPORTED(params) _GET_IS_SUPPORTED(params)
195 #define GET_MAGIC(params) _GET_MAGIC(params)
199 #define _GET_CLOCK_CONFIG_INDEX(ndx, oscSel, Fcy, posCmdSel, poscFreq, configClockFunc, isSupported, magic) ndx
200 #define _GET_FNOSC_SEL(ndx, oscSel, Fcy, posCmdSel, poscFreq, configClockFunc, isSupported, magic) oscSel
201 #define _GET_FCY(ndx, oscSel, Fcy, posCmdSel, poscFreq, configClockFunc, isSupported, magic) Fcy
202 #define _GET_POSCMD_SEL(ndx, oscSel, Fcy, posCmdSel, poscFreq, configClockFunc, isSupported, magic) posCmdSel
203 #define _GET_POSC_FREQ(ndx, oscSel, Fcy, posCmdSel, poscFreq, configClockFunc, isSupported, magic) poscFreq
204 #define _GET_CONFIG_DEFAULT_CLOCK(ndx, oscSel, Fcy, posCmdSel, poscFreq, configClockFunc, isSupported, magic) configClockFunc
205 #define _GET_IS_SUPPORTED(ndx, oscSel, Fcy, posCmdSel, poscFreq, configClockFunc, isSupported, magic) isSupported
206 #define _GET_MAGIC(ndx, oscSel, Fcy, posCmdSel, poscFreq, configClockFunc, isSupported, magic) magic
211 # if GET_MAGIC(CLOCK_CONFIG) != 498
212 # error "***********************************************************************"
213 # error "* Value chosen for CLOCK_CONFIG does not exist or is not valid! *"
214 # error "* This produces very confusing compiler errors below. *"
215 # error "***********************************************************************"
221 #define CLOCK_CONFIG_INDEX (GET_CLOCK_CONFIG_INDEX(CLOCK_CONFIG))
222 #define FNOSC_SEL (GET_FNOSC_SEL(CLOCK_CONFIG))
223 #define FCY (GET_FCY(CLOCK_CONFIG))
224 #define POSCMD_SEL (GET_POSCMD_SEL(CLOCK_CONFIG))
225 #define POSC_FREQ (GET_POSC_FREQ(CLOCK_CONFIG))
226 #define CONFIG_DEFAULT_CLOCK() (GET_CONFIG_DEFAULT_CLOCK(CLOCK_CONFIG)())
229 #if !GET_IS_SUPPORTED(CLOCK_CONFIG)
230 # error "The clock configuration chosen is not supported by this processor."
234 #if !( (POSCMD_SEL == POSCMD_EC) || (POSCMD_SEL == POSCMD_XT) || \
235 (POSCMD_SEL == POSCMD_HS) || (POSCMD_SEL == POSCMD_NONE) )
236 # error "Unknown primary oscillator selection."
241 #if (POSCMD_SEL == POSCMD_XT) && ( (POSC_FREQ < 3500000L) || (POSC_FREQ > 10000000L) )
242 # error "The XT oscialltor chosen in POSCMD_SEL does not support this frequency!"
243 # error "Valid ranges are from 3.5 MHz to 10 MHz."
245 #if (POSCMD_SEL == POSCMD_HS) && ( (POSC_FREQ < 10000000L) || (POSC_FREQ > 32000000L) )
246 # error "The HS oscialltor chosen in POSCMD_SEL does not support this frequency!"
247 # error "Valid ranges are from 10 MHz to 32 MHz."
332 #define CYCLES_PER_MS ((uint32_t)(FCY * 0.001))
338 #define CYCLES_PER_US ((uint32_t)(FCY * 0.000001))
353 #define IS_CLOCK_CONFIG(clockConfig) (_GET_CLOCK_CONFIG_INDEX(clockConfig) == CLOCK_CONFIG_INDEX)
359 #define GET_OSC_SEL_BITS(bits) _GET_OSC_SEL_BITS(bits)
361 #if defined(__PIC24H__) || defined (__PIC24FK__) || defined(__dsPIC33F__) || defined(__PIC24E__) || defined(__dsPIC33E__) || defined(__DOXYGEN__)
362 # define _GET_OSC_SEL_BITS(bits) ((bits >> 0) & 0x07)
363 #elif defined (__PIC24F__)
364 # define _GET_OSC_SEL_BITS(bits) ((bits >> 8) & 0x07)
366 # error "Unknown processor."
372 #define OSC_SEL_BITS GET_OSC_SEL_BITS(FNOSC_SEL)
375 #if ( (OSC_SEL_BITS < 0) || (OSC_SEL_BITS > 7) )
376 # error "Invalid oscillator selection FNOSC_SEL."
384 #if GET_IS_SUPPORTED(SIM_CLOCK)
393 void configClockSim(
void);
396 #if GET_IS_SUPPORTED(FRCPLL_FCY16MHz)
397 void configClockFRCPLL_FCY16MHz(
void);
400 #if GET_IS_SUPPORTED(FRC_FCY4MHz)
401 void configClockFRC_FCY4MHz(
void);
404 #if GET_IS_SUPPORTED(PRI_NO_PLL_7372KHzCrystal)
405 void configClockPRI_NO_PLL_7372KHzCrystal(
void);
408 #if GET_IS_SUPPORTED(FRC_FCY3685KHz)
409 void configClockFRC_FCY3685KHz(
void);
412 #if GET_IS_SUPPORTED(FRCPLL_FCY40MHz)
413 void configClockFRCPLL_FCY40MHz(
void);
416 #if GET_IS_SUPPORTED(FRCPLL_FCY60MHz)
417 void configClockFRCPLL_FCY60MHz(
void);
420 #if GET_IS_SUPPORTED(FRCPLL_FCY70MHz)
421 void configClockFRCPLL_FCY70MHz(
void);
424 #if GET_IS_SUPPORTED(PRI_NO_PLL_7372KHzCrystal)
425 void configClockPRIPLL_7372KHzCrystal_40MHzFCY(
void);
428 #if GET_IS_SUPPORTED(PRIPLL_8MHzCrystal_40MHzFCY)
429 void configClockPRIPLL_8MHzCrystal_40MHzFCY(
void);
432 #if GET_IS_SUPPORTED(PRIPLL_8MHzCrystal_16MHzFCY)
433 void configClockPRIPLL_8MHzCrystal_16MHzFCY(
void);
436 #if GET_IS_SUPPORTED(PRI_8MHzCrystal_4MHzFCY)
437 void configClockPRI_8MHzCrystal_4MHzFCY(
void);