75 #elif !USE_CLOCK_TIMEOUT 77 void checkClockTimeout(
void) {
86 # define CLOCKTIMEOUT_MAX 200000L 87 # if ( defined(__PIC24H__) || defined(__dsPIC33F__) || \ 88 defined(__PIC24E__) || defined(__dsPIC33E__) ) 89 # define FRC_FCY 3685000L 90 # elif ( defined(__PIC24F__) || defined(__PIC24FK__) ) 91 # define FRC_FCY 4000000L 93 # error "Unknown processor." 107 # define SET_HB_LED(x) (HB_LED = x) 109 # define SET_HB_LED(x) (void) x 119 # define FRC_CYCLE_PER_MS (FRC_FCY*0.001) 120 # define DOT_CYCLES (FRC_CYCLE_PER_MS*100) 121 # define DASH_CYCLES (DOT_CYCLES*3) 123 static void morse_blink(
const char* sz_morse_code) {
124 for (; *sz_morse_code; ++sz_morse_code) {
125 switch (*sz_morse_code) {
128 __delay32(DOT_CYCLES);
133 __delay32(DASH_CYCLES);
139 __delay32(DOT_CYCLES*2);
144 __delay32(DOT_CYCLES);
149 __delay32(DOT_CYCLES*6);
153 static void configFrcUART(
void) {
159 # if (DEFAULT_UART == 1) 161 U1MODEbits.BRGH = FRC_BRGH;
162 # elif (DEFAULT_UART == 2) 164 U2MODEbits.BRGH = FRC_BRGH;
165 # elif (DEFAULT_UART == 3) 167 U3MODEbits.BRGH = FRC_BRGH;
168 # elif (DEFAULT_UART == 4) 170 U4MODEbits.BRGH = FRC_BRGH;
172 # error "Invalid DEFAULT_UART." 176 static uint32_t u32_timeoutCount;
177 static void checkClockTimeout(
void) {
181 if (u32_timeoutCount < CLOCKTIMEOUT_MAX) {
202 outString(
"\n\nYour clock choice failed to initialize. See " __FILE__
203 " line " TOSTRING(__LINE__)
" for more details.");
206 morse_blink(
"... --- ...");
215 OSCCONBITS OSCCONBITS_copy;
228 OSCCONBITS_copy = OSCCONbits;
229 OSCCONBITS_copy.NOSC = u8_source;
230 OSCCONBITS_copy.CLKLOCK = 0;
231 OSCCONBITS_copy.OSWEN = 1;
233 __builtin_write_OSCCONH(
BITS2BYTEH(OSCCONBITS_copy));
235 __builtin_write_OSCCONL(
BITS2BYTEL(OSCCONBITS_copy));
243 # if USE_CLOCK_TIMEOUT 244 u32_timeoutCount = 0;
246 while (_OSWEN == 1) {
260 while (_COSC != u8_source) checkClockTimeout();
264 #if IS_CLOCK_CONFIG(SIM_CLOCK) 265 # warning "Clock configured for simulation, FCY = 1 Mhz." 267 #if (GET_IS_SUPPORTED(SIM_CLOCK) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(SIM_CLOCK) 268 void configClockSim(
void) {
273 #if IS_CLOCK_CONFIG(FRCPLL_FCY16MHz) 274 # warning "Clock configured for FRCPLL, FCY = 16 MHz." 276 #if (GET_IS_SUPPORTED(FRCPLL_FCY16MHz) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(FRCPLL_FCY16MHz) 277 void configClockFRCPLL_FCY16MHz(
void) {
301 # elif defined(PLLDIV_NODIV) 302 # warning "Ensure that the PLLDIV value is set to divide by 2 in the configuration bits for FRCPLL_FCY16MHz clock option!!" 306 # warning "PLL Enabled." 313 #if IS_CLOCK_CONFIG(FRC_FCY4MHz) 314 # warning "Clock configured for FRC, FCY = 4 MHz." 315 # warning "Baud rates of 19200 or lower recommended for this clock choice." 317 #if (GET_IS_SUPPORTED(FRC_FCY4MHz) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(FRC_FCY4MHz) 318 void configClockFRC_FCY4MHz(
void) {
326 #if IS_CLOCK_CONFIG(PRI_NO_PLL_7372KHzCrystal) 327 # warning "Clock configured for a 7.372 MHz crystal primary oscillator, no PLL." 329 #if (GET_IS_SUPPORTED(PRI_NO_PLL_7372KHzCrystal) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(PRI_NO_PLL_7372KHzCrystal) 330 void configClockPRI_NO_PLL_7372KHzCrystal(
void) {
336 #if IS_CLOCK_CONFIG(FRC_FCY3685KHz) 337 # warning "Clock configured for FRC, FCY = 3.685 MHz." 339 #if (GET_IS_SUPPORTED(FRC_FCY3685KHz) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(FRC_FCY3685KHz) 340 void configClockFRC_FCY3685KHz(
void) {
351 #if IS_CLOCK_CONFIG(FRCPLL_FCY40MHz) 352 # warning "Clock configured for FRCPLL, FCY = 40 MHz." 354 #if (GET_IS_SUPPORTED(FRCPLL_FCY40MHz) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(FRCPLL_FCY40MHz) 355 void configClockFRCPLL_FCY40MHz(
void) {
383 #if IS_CLOCK_CONFIG(FRCPLL_FCY60MHz) 384 # warning "Clock configured for FRCPLL, FCY = 60 MHz." 386 #if (GET_IS_SUPPORTED(FRCPLL_FCY60MHz) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(FRCPLL_FCY60MHz) 387 void configClockFRCPLL_FCY60MHz(
void) {
411 #if IS_CLOCK_CONFIG(FRCPLL_FCY70MHz) 412 # warning "Clock configured for FRCPLL, FCY = 70 MHz." 414 #if (GET_IS_SUPPORTED(FRCPLL_FCY70MHz) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(FRCPLL_FCY70MHz) 415 void configClockFRCPLL_FCY70MHz(
void) {
441 #if IS_CLOCK_CONFIG(PRIPLL_7372KHzCrystal_40MHzFCY) 442 # warning "Clock configured for PRIPLL using a 7.3727 Mhz primary oscillator, FCY = 40 MHz." 444 #if (GET_IS_SUPPORTED(PRIPLL_7372KHzCrystal_40MHzFCY) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(PRIPLL_7372KHzCrystal_40MHzFCY) 445 void configClockPRIPLL_7372KHzCrystal_40MHzFCY(
void) {
458 #if IS_CLOCK_CONFIG(PRIPLL_8MHzCrystal_40MHzFCY) 459 # warning "Clock configured for PRIPLL using an 8.0 Mhz primary oscillator, FCY = 40 MHz." 461 #if (GET_IS_SUPPORTED(PRIPLL_8MHzCrystal_40MHzFCY) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(PRIPLL_8MHzCrystal_40MHzFCY) 462 void configClockPRIPLL_8MHzCrystal_40MHzFCY(
void) {
479 #if IS_CLOCK_CONFIG(PRIPLL_8MHzCrystal_16MHzFCY) 480 # warning "Clock configured for PRIPLL using a 8.0 Mhz primary oscillator, FCY = 16 MHz." 482 #if (GET_IS_SUPPORTED(PRIPLL_8MHzCrystal_16MHzFCY) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(PRIPLL_8MHzCrystal_16MHzFCY) 483 void configClockPRIPLL_8MHzCrystal_16MHzFCY(
void) {
507 # elif defined(PLLDIV_NODIV) 508 # warning "Ensure that the PLLDIV value is set to divide by 2 in the configuration bits for PRIPLL_8MHzCrystal_16MHzFCY clock option!!" 512 # warning "PLL Enabled." 519 #if IS_CLOCK_CONFIG(PRI_8MHzCrystal_4MHzFCY) 520 # warning "Clock configured for PRI using a 8.0 Mhz primary oscillator, FCY = 4 MHz." 521 # warning "Baud rates of 19200 or lower recommended for this clock choice." 523 #if (GET_IS_SUPPORTED(PRI_8MHzCrystal_4MHzFCY) && !defined(BOOTLOADER)) || IS_CLOCK_CONFIG(PRI_8MHzCrystal_4MHzFCY) 524 void configClockPRI_8MHzCrystal_4MHzFCY(
void) {
void configHeartbeat(void)
Configures the system clock.
#define BITS2BYTEL(sfrBitfield)
Return the low byte (as a uint8_t) of a bitfield.
void configDefaultUART(uint32_t u32_baudRate)
void outString(const char *psz_s)
void switchClock(uint8_t u8_source)
uint16_t compute_brg(uint32_t u32_fcy, uint16_t u16_brgh, uint32_t u32_baudrate)
#define BITS2BYTEH(sfrBitfield)
Return the high byte (as a uint8_t) of a bitfield.
#define GET_OSC_SEL_BITS(bits)
unsigned char uint8_t
An abbreviation for an 8-bit unsigned integer.