This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401R:振荡器问题

Guru**** 2618835 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/677284/msp432p401r-oscillator-issue

器件型号: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;
} 


e2e.ti.com/.../TG2520SBN_5F00_en.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Hu 您好!

    您对振荡器的问题是否与以下帖子相同?

    e2e.ti.com/.../676826

    如果是、那么我们正在研究该问题、以查看是否存在违反规范的情况?