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时钟MCLK,SMCLK抖动问题,急!!!

Other Parts Discussed in Thread: MSP430F5438A

平台为MSP432P401R的LauchPad,我们的产品原有在MSP430F5438A,目前打算做产品升级

原有在MSP430F5438A,通过外部晶振16MHz作为主时钟源,在SMCLK采用外部时钟 ,通过特定管脚输出16MHz,通过安捷伦频谱仪查看频率稳定性很好,SPAN带宽10KHz,不会产生漂移现象。

而评估MSP432P401R,通过外部晶振48MHz作为主时钟源,在SMCLK采用外部时钟,分频至12MHz,通过仪器看,时钟一致在漂移,应该在100PPM里漂移抖动,很不正常,感觉像是失锁。

配置时钟代码如下:基本完全参考官方示例了。

uint32_t currentPowerState;

currentPowerState = PCM->CTL0 & PCM_CTL0_CPM_MASK;
if (currentPowerState != PCM_CTL0_CPM_0)
error();

while ((PCM->CTL1 & PCM_CTL1_PMR_BUSY));
PCM->CTL0 = PCM_CTL0_KEY_VAL | PCM_CTL0_AMR_1;
while ((PCM->CTL1 & PCM_CTL1_PMR_BUSY));
if (PCM->IFG & PCM_IFG_AM_INVALID_TR_IFG)
error(); // Error if transition was not successful
if ((PCM->CTL0 & PCM_CTL0_CPM_MASK) != PCM_CTL0_CPM_1)
error(); // Error if device is not in AM1_LDO mode

/* Step 2: Configure Flash wait-state to 1 for both banks 0 & 1 */
FLCTL->BANK0_RDCTL = (FLCTL->BANK0_RDCTL & ~(FLCTL_BANK0_RDCTL_WAIT_MASK)) |
FLCTL_BANK0_RDCTL_WAIT_1;
FLCTL->BANK1_RDCTL = (FLCTL->BANK0_RDCTL & ~(FLCTL_BANK1_RDCTL_WAIT_MASK)) |
FLCTL_BANK1_RDCTL_WAIT_1 ;

/* Step 3: Configure HFXT to use 48MHz crystal, source to MCLK & HSMCLK*/


PJ->SEL0 |= BIT2 | BIT3; // Configure PJ.2/3 for HFXT function
PJ->SEL1 &= ~(BIT2 | BIT3);

CS->KEY = CS_KEY_VAL ; // Unlock CS module for register access
CS->CTL2 |= CS_CTL2_HFXT_EN | CS_CTL2_HFXTFREQ_6 | CS_CTL2_HFXTDRIVE;
while(CS->IFG & CS_IFG_HFXTIFG)
CS->CLRIFG |= CS_CLRIFG_CLR_HFXTIFG;

/* Select MCLK & HSMCLK = HFXT, no divider */
CS->CTL1 = CS->CTL1 & ~(CS_CTL1_SELM_MASK | CS_CTL1_DIVM_MASK | CS_CTL1_SELS_MASK | CS_CTL1_DIVS_MASK) |
CS_CTL1_SELM__HFXTCLK | CS_CTL1_SELS__HFXTCLK | CS_CTL1_DIVS_2;

CS->KEY = 0; // Lock CS module from unintended accesses