请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432P401R
大家好、
我的 芯片平台是 MSP432P401R、SDK 是 simplelink_msp432p4_sdk_1_60_00_12。 电源全部为2.2V 设计。 我想将 振荡器(16.384Mhz、振荡 器输出电压 Vpp >0.8V)用于 HFXT、并使用 来自 HFXT 的 SMCLK/MCLK:
方案1 :我知道使用 振荡器时启用了直通模式"CS_startHFXT (true);"但它在" if (boolTimeout &&(--timeout)==0)" 语句中停止。 如以下代码和图片所示。
场景2 : 当我禁用 passby 模式“CS_startHFXT (false);”时,它可以正常工作,MCLK 频率为16.384Mhz,但 HFXTIFG 保持置位,无法清除。
我不知道我 在哪里出错了。
我有 附件的振荡器。
/*这是时钟 函数*/
void InitCS (system_clock * pt_clk) { /*配置用于外设/晶体的引脚*/ MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_PJ、 GPIO_PIN3 | GPIO_PIN2、GPIO_PRIMARY_MODULE_FUNCTION); CS_setExternalClockSourceFrequency (CS_LFXT_FREQ、CS_HFXT_FREQ); /*在旁路模式下启动 HFXT 而不超时。 开始之前 *我们必须将 VCORE 更改为1以支持16.384MHz 频率*/ 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 (真); // CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48); /*将 MCLK 初始化为 HFXT */ MAP_CS_initClockSignal (CS_MCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1); /*将 SMCLK 初始化为 HFXT */ MAP_CS_initClockSignal (CS_SMCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1); //SystemCoreClockUpdate(); //测试 // map_GPIO_setAsOutputPin (GPIO_PORT_P4、GPIO_PIN0);// ADC2_CLK MAP_SysTK_enableModule ();//system tick MAP_SysTK_setPeriod (SYS_tick_1ms); MAP_SysTK_enableInterrupt (); MAP_Interrupt_enableMaster(); }
/*这是 CS_startHFXT 函数*/
bool CS_startHFXT (bool bypassMode)
{
返回 CS_startHFXTWithTimeout (bypassMode,0);
}
/*这是 CS_startHFXTWithTimeout 函数*/
bool CS_startHFXTWithTimeout (bool bypassMode、uint32_t timeout) { uint32_t wHFFreqRange; uint_fast8_t bNMStatus; bool boolTimeout; /*解锁 CS 模块*/ CS->KEY = CS_KEY; // #ifdef __MCU_HAS_SYSCTL_A__为 UCS 故障保存状态并暂时禁用 NMI bNMIStatus = SYSCTL_A_getNMISSourcedStatus ()& SYSCTL_A_CS_SRC; SYSCTL_A_disableNMISSOURCE (SYSCTL_A_CS_SRC); #else bNMIStatus = SYSCTL_getNMISSourcedStatus()& SYSCTL_CS_SRC; SYSCTL_DisableNMISSource (SYSCTL_CS_SRC); #endif /*确定要使用的频率范围*/ wHFFreqRange =_CSGetHFXTFrequency (); boolTimeout =(超时=0)? false:true; /*设置为最大驱动强度*/ BITBAND_PERI (CS->CTL2、CS_CTL2_HFXTDRIVE_OFS)= 1; CS->CTL2 =(CS->CTL2 &(~CS_CTL2_HFXTFREQ_MASK)|(wHFFreqRange); IF (旁路模式) { BITBAND_PERI (CS->CTL2、CS_CTL2_HFXTBYPASS)= 1; } 其他 { BITBAND_PERI (CS->CTL2、CS_CTL2_HFXTBYPASS)= 0; } /*启动并等待频率稳定*/ BITBAND_PERI (CS->CTL2、CS_CTL2_HFXT_EN_OFS)= 1; while (BITBAND_peri (CS->IFG、CS_IFG_HFXTIFG_OFS)) { 如果(boolTimeout &&(--timeout)=0)//程序在这里停止,它无法继续,如下图所示 中断; BITBAND_PERI (CS->CLRIFG、CS_CLRIFG_CLR_HFXTIFG_OFS)= 1; } /*设置驱动强度*/ if (!bypassMode) { IF (wHFFreqRange!= CS_CTL2_HFXTFREQ_0) BITBAND_PERI (CS->CTL2、CS_CTL2_HFXTDRIVE_OFS)= 1; 其他 BITBAND_PERI (CS->CTL2、CS_CTL2_HFXTDRIVE_OFS)= 0; } /*锁定模块*/ BITBAND_PERI (CS->KEY、CS_KEY_OFS)= 1; //启用 NMI 状态*/ #ifdef __MCU_HAS_SYSCTL_A__ SYSCTL_A_enableNMISSOURCE (bNMIStatus); #else SYSCTL_enableNMISSOURCE (bNMIStatus); #endif if (boolTimeout && timeout =0) 返回 false; 返回 true; }
