/**********************************************************************//** * @brief Set function for MCLK frequency. * * @param systemClockSpeed Intended frequency of operation - SYSCLK_xxMHZ. * * @return none *************************************************************************/ void halBoardSetSystemClock(unsigned char systemClockSpeed) { unsigned char setDcoRange, setVCore; unsigned int setMultiplier; halBoardGetSystemClockSettings( systemClockSpeed, &setDcoRange, \ &setVCore, &setMultiplier); halBoardSetVCore( setVCore ); __bis_SR_register(SCG0); // Disable the FLL control loop UCSCTL0 = 0x00; // Set lowest possible DCOx, MODx UCSCTL1 = setDcoRange; // Select suitable range UCSCTL2 = setMultiplier + FLLD_1; // Set DCO Multiplier UCSCTL4 = SELA__XT1CLK | SELS__DCOCLKDIV | SELM__DCOCLKDIV ; __bic_SR_register(SCG0); // Enable the FLL control loop // Loop until XT1,XT2 & DCO fault flag is cleared do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags }while (SFRIFG1&OFIFG); // Test oscillator fault flag // Worst-case settling time for the DCO when the DCO range bits have been // changed is n x 32 x 32 x f_FLL_reference. See UCS chapter in 5xx UG // for optimization. // 32 x 32 x / f_FLL_reference (32,768 Hz) = .03125 = t_DCO_settle // t_DCO_settle / (1 / 25 MHz) = 781250 = counts_DCO_settle __delay_cycles(781250); }
/************************************************************************ * @brief Set function for MCLK frequency. * * @param systemClockSpeed Intended frequency of operation - SYSCLK_xxMHZ. * * @return none *************************************************************************/ void halBoardSetSystemClock(unsigned char systemClockSpeed) { unsigned char setDcoRange = 0; unsigned char setVCore = 0; unsigned int setMultiplier = 0; halBoardGetSystemClockSettings( systemClockSpeed, &setDcoRange, \ &setVCore, &setMultiplier); if (setVCore > (PMMCTL0 & PMMCOREV_3)) // Only change VCore if necessary halBoardSetVCore( setVCore ); UCSCTL0 = 0x00; // Set lowest possible DCOx, MODx UCSCTL1 = setDcoRange; // Select suitable range UCSCTL2 = setMultiplier + FLLD_1; // Set DCO Multiplier UCSCTL4 = SELA__XT1CLK | SELS__DCOCLKDIV | SELM__DCOCLKDIV ; // Worst-case settling time for the DCO when the DCO range bits have been // changed is n x 32 x 32 x f_FLL_reference. See UCS chapter in 5xx UG // for optimization. // 32 x 32 x / f_FLL_reference (32,768 Hz) = .03125 = t_DCO_settle // t_DCO_settle / (1 / 18 MHz) = 562500 = counts_DCO_settle // __delay_cycles(562500); int i; for (i=0;i<10;i++){ __delay_cycles(56250); } }