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.

[参考译文] MSP430F5419A:系统陷入停滞状态

Guru**** 2529320 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/576836/msp430f5419a-system-going-to-stuck

部件号:MSP430F5419A

大家好,

 1. 我正在处理三相能量计应用,使用SPI通信将MSP430作为主中继器,并将Ade7880作为从中继器。

 2.在MCLK=16 MHz DCO时钟上工作 ,对于外设,我们使用XTL2 = SMCLK =4 MHz。

后面的东西是面对的  

场景1: 无交流电源和负载。  (电流和电压为零)。仅向MCU (3.3 V)提供电源。

           无论何时打开至关闭 或关闭至打开,都不会出现问题,但是

场景2: 带交流电源和负载。  

每当切换为“关闭” 或“关闭”时,微控制器就会卡在意外的随机位置上

有时会在DO-while循环中停止CPU执行,库函数如printf,strstr函数。   

它在 非常小的负载(15瓦)下积载。

 

面临 场景2的问题。  

是时钟问题,核心电压问题还是任何其他问题。

请检查以下代码时钟初始化和内核电压设置。

 

//时钟初始化==>MCLK=16MHz SMCLK=4MHz ACLK=32kHz
void clock_init()

SetVcoreUp (PMMCOREV_1);
SetVcoreUp (PMMCOREV_2);//将VCORE设置为1.8V,用于20MHz


P11DIR = BIT2 + BIT1 + BIT0;// WFP 11.2 ,1.0至输出方向

P11SEL = BIT2 + BIT1 + BIT0;// WFP 11.2 至输出SMCLK,WFP 11.1

//输出MCLK和WFP 11.0 至
//输出ACLK
P5SEL || 0x0C;//端口选择XT2
P7SEL |= 0x03;//端口选择XT1

UCSCTL6 &=~(XT1OFF + XT2OFF);//将XT1和XT2设置为打开
UCSCTL6 |= XCAP_3;//内部负载盖

//循环直到XT1,XT2和DCO稳定
   做
    {
     UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);

//清除XT2,XT1,DCO故障标志
SFRIFG1 &=~OFIFG;//清除故障标志

} While (SFRIFG1&OFIFG);//测试振荡器故障标志

UCSCTL6 &=~XT2DRIVE0;//根据减少XT2驱动器

UCSCTL3 |= SELREF_2;//SELREF__XT2CLK;//SELREF__XT2CLK;//SELREF_XT2CLK;//SELREF_5;

__bis_sr_register(SCG0);//禁用FLL控制回路

UCSCTL0 |=0x0000;

UCSCTL1|=DCORSEL_7;

UCSCTL2 |= FLLD_1 + 488;


__BIC_SR_REGISTER(SCG0);//禁用FLL控制环路

__DELAY周期(50万); //结算DCO

UCSCTL4 |=拉美经济体系2 + SESS_5;//+ SELM_3;

}

//配置的PMM控制寄存器SVM,SVS控制寄存器
void SetVcoreUp (无符号int级别)

//打开PMM寄存器进行写入
PMMCTL0_H = PMMPW_H;//PMM密码始终为0x45表示写入,0x96表示读取
//将SVS/SVM高侧设置为新级别
SVSMHCTL = SVSHE + SVSHRVL0 *级别+ SVMHE + SVSMHRRL0 *级别;
//将SVM低侧设置为新级别
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 *级别;
//等待SVM结算
同时((PMMIFG和SVSMLDLYIFG)== 0);
//清除已设置的标志
PMMIFG &=~(SVMLVLRIFG + SVMLIFG);
//将VCORE设置为新级别
PMMCTL0_L = PMMCOREV0 *级别;
//等待到达到新级别
IF ((PMMIFG和SVMLIFG))
同时(PMMIFG和SVMLVLRIFG)== 0);
//将SVS/SVM低侧设置为新级别
SVSMLCTL = SVSLE + SVSLRVL0 *级别+ SVMLE + SVSMLRRL0 *级别;
//锁定PMM寄存器以进行写入访问
PMMCTL0_H = 0x00;
}

请帮我解决这个卡住的问题。

 

此致,

Sanjay M.

 



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

    UCSCTL6应清除工作范围为4至8 MHz的XT2DRIVE_3。 如TI提供的UCS示例所示,UCSCTL[0,1,2]通常只分配(=),而不是分配位(|=)。 在UCSCTL4中设置分频器之前,所有时钟都已初始化并等待稳定时间后,也应出现时钟稳定环路。 但这些更改只会对时钟操作产生轻微的影响,不应是所述问题的原因。 您可以将内核提高到级别3,以查看这是否会改善系统行为。

    请确保Vcore电容为470 nF,并且VCC引脚上有> 4.7 UF去耦电容器。 问题发生时,您能否提供Vcc,MCLK,SMCLK,ACLK和RST的示波器屏幕截图? XT1和XT2是否继续振荡? 切换发生时MCU是否在LPM中,是否每次都出现问题?

    此致,
    Ryan