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);
static void configClock()
void switchClock(uint8_t u8_source)
#define CONFIG_DEFAULT_CLOCK()
unsigned char uint8_t
An abbreviation for an 8-bit unsigned integer.