Part Number: MSP432P401R
Hello everyone,
My Chip platform is MSP432P401R ,SDK is simplelink_msp432p4_sdk_1_60_00_12. The power all are 2.2V design. I want to use oscillator(16.384Mhz,oscillator output voltage Vpp >0.8V) for HFXT ,and SMCLK/MCLK from HFXT:
Scenario 1 : i known when use oscillator shoule enable passby mode "CS_startHFXT(true);"but it stop in " if (boolTimeout && ((--timeout) == 0)) " statement. as show following code and picture.
Scenario 2 : when i disable passby mode"CS_startHFXT(false);",it can work well and MCLK frequency is 16.384Mhz,but HFXTIFG remains set,can't be clear.
i don't known where i had some mistake.
The oscillator i had attachment.
/*this is clock function*/
void InitCS(SYSTEM_CLOCK *pt_clk) { /* Configuring pins for peripheral/crystal usage */ MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_PJ, GPIO_PIN3 | GPIO_PIN2, GPIO_PRIMARY_MODULE_FUNCTION); CS_setExternalClockSourceFrequency(CS_LFXT_FREQ, CS_HFXT_FREQ); /* Starting HFXT in bypass mode without a timeout. Before we start * we have to change VCORE to 1 to support the 16.384MHz frequency */ MAP_PCM_setPowerMode(PCM_DCDC_MODE); MAP_PCM_setCoreVoltageLevel(PCM_VCORE1); MAP_FlashCtl_setWaitState(FLASH_BANK0, 2); MAP_FlashCtl_setWaitState(FLASH_BANK1, 2); CS_startHFXT(true); // CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_48); /* Initializing MCLK to HFXT */ MAP_CS_initClockSignal(CS_MCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); /* Initializing SMCLK to HFXT */ MAP_CS_initClockSignal(CS_SMCLK, CS_HFXTCLK_SELECT, CS_CLOCK_DIVIDER_1); //SystemCoreClockUpdate(); //TEST // MAP_GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN0);//ADC2_CLK MAP_SysTick_enableModule(); //system tick MAP_SysTick_setPeriod(SYS_TICK_1MS); MAP_SysTick_enableInterrupt(); MAP_Interrupt_enableMaster(); }
/*this is CS_startHFXT function*/
bool CS_startHFXT(bool bypassMode)
{
return CS_startHFXTWithTimeout(bypassMode, 0);
}
/*this is CS_startHFXTWithTimeout function*/
bool CS_startHFXTWithTimeout(bool bypassMode, uint32_t timeout)
{
uint32_t wHFFreqRange;
uint_fast8_t bNMIStatus;
bool boolTimeout;
/* Unlocking the CS Module */
CS->KEY = CS_KEY;
/* Saving status and temporarily disabling NMIs for UCS faults */
#ifdef __MCU_HAS_SYSCTL_A__
bNMIStatus = SysCtl_A_getNMISourceStatus() & SYSCTL_A_CS_SRC;
SysCtl_A_disableNMISource(SYSCTL_A_CS_SRC);
#else
bNMIStatus = SysCtl_getNMISourceStatus() & SYSCTL_CS_SRC;
SysCtl_disableNMISource(SYSCTL_CS_SRC);
#endif
/* Determining which frequency range to use */
wHFFreqRange = _CSGetHFXTFrequency();
boolTimeout = (timeout == 0) ? false : true;
/* Setting to maximum drive strength */
BITBAND_PERI(CS->CTL2, CS_CTL2_HFXTDRIVE_OFS) = 1;
CS->CTL2 = (CS->CTL2 & (~CS_CTL2_HFXTFREQ_MASK)) | (wHFFreqRange);
if (bypassMode)
{
BITBAND_PERI(CS->CTL2, CS_CTL2_HFXTBYPASS_OFS) = 1;
} else
{
BITBAND_PERI(CS->CTL2, CS_CTL2_HFXTBYPASS_OFS) = 0;
}
/* Starting and Waiting for frequency stabilization */
BITBAND_PERI(CS->CTL2, CS_CTL2_HFXT_EN_OFS) = 1;
while (BITBAND_PERI(CS->IFG, CS_IFG_HFXTIFG_OFS))
{
if (boolTimeout && ((--timeout) == 0)) // Program stop here ,it can't go on ,as show following picture
break;
BITBAND_PERI(CS->CLRIFG,CS_CLRIFG_CLR_HFXTIFG_OFS) = 1;
}
/* Setting the drive strength */
if (!bypassMode)
{
if (wHFFreqRange != CS_CTL2_HFXTFREQ_0)
BITBAND_PERI(CS->CTL2, CS_CTL2_HFXTDRIVE_OFS) = 1;
else
BITBAND_PERI(CS->CTL2, CS_CTL2_HFXTDRIVE_OFS) = 0;
}
/* Locking the module */
BITBAND_PERI(CS->KEY, CS_KEY_KEY_OFS) = 1;
/* Enabling the NMI state */
#ifdef __MCU_HAS_SYSCTL_A__
SysCtl_A_enableNMISource(bNMIStatus);
#else
SysCtl_enableNMISource(bNMIStatus);
#endif
if (boolTimeout && timeout == 0)
return false;
return true;
}
