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:MSP430F5419A - REV H 与 REV F - XT1HFOFFG 标志

Guru**** 2537360 points
Other Parts Discussed in Thread: MSP430F5419A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/611234/msp430f5419a-msp430f5419a---rev-h-vs-rev-f---xt1hfoffg-flag

器件型号:MSP430F5419A

您好!  

我们正在开发两个相同的原型。 唯一的区别是我们使用的 MSP430F5419A 版本、一个是 REV F、另一个是 REV H

问题是、当我们尝试为两者运行相同的代码时、只有 REV F 可以工作。

由于 UCSCTL7中的 XT1HFOFFG 被置位、代码一直停留在 while 环路中以实现 REV H 中的时钟稳定。

REV F 和 REV H 之间是否有任何差异、我们必须在示例代码中插入一行?

在设置时钟配置之前、我已经尝试重置 UCSCTL7、但它不起作用。

谢谢、

#include 

void SetVcoreUp (unsigned int level);

int main (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT

P10DIR |= BIT7;
P10OUT |= BIT7;

SetVcoreUp (PMMCOREV_1);
SetVcoreUp (PMMCOREV_2); //将20MHz 的 VCORE 设置为1.8MHz

P11DIR = BIT2 + BIT1 + BIT0; // P11.2、1、0到输出方向
P11SEL = BIT2 + BIT1 + BIT0; // P11.2至输出 SMCLK、P11.1
//将 MCLK 和 P11.0输出到
//输出 ACLK
P7SEL |= 0x03; //端口选择 XT1
UCSCTL3 |= SELREF_2; // FLL Ref = REFO
UCSCTL6 &&~XT1OFF; //在
UCSCTL6上设置 XT1 |= XT1DRIVE_3 + XTS; //最大驱动强度,调整
//根据晶振频率。
// LFXT1 HF 模式
UCSCTL7 = 0;

//直到 XT1、XT2和 DCO 稳定
的循环执行
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
} while (SFRIFG1&OFIFG); //测试振荡器故障标志

UCSCTL4 = SELA_0 + SELS_4 + SELM_0; //选择 ACLK = LFXT1
// SMCLK = DCO
// MCLK = LFXT1
while (1)
{
P10OUT ^=BIT7;
__delay_cycles (1000000);
}
//循环就地
}

void SetVcoreUp (无符号 int 级别)
{
//打开 PMM 寄存器以写入
PMMCTL0_H = PMMPW_H;
//设置 SVS/SVM 高电平新电平
SVSMHCTL = SVSHE + SVSHRVL0 *电平+ SVMHE + SVSMHRRL0 *电平;
//将 SVM 低电平设置为新电平
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 *电平;
//等待 SVM 稳定
,而 SVSMLCTL = SVSMLCTL (SVSMLLY0)= SVSMLPMIFG = SVSMLPM0);//等待 SVSMLPMIFG (= SVSM
//清除已设置的标志
PMMIFG &=~(SVMLVLRIFG + SVMLIFG);
//将 VCORE 设置为新的电平
PMMCTL0_L = PMMCOREV0 *电平;
//如果
((PMMIFG & SVMLIFG)))、则等待达到新的电平
while (((PMMIFG & SVMLVLRIFG)=0);
//将 SVS/SVM 低电平设置为新的电平
SVSMLCTL = SVSLE + SVSLRVL0 *电平+ SVMLE + SVSMLRRL0 *电平;
//锁定 PMM 寄存器以进行写访问
PMMCTL0_H = 0x00;
} 

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

    你(们)好

    Rev.F 和 H 之间没有区别、它是具有相同功能的相同设计。

    您是否在两个器件上使用过相同的晶体?

    您能否更换器件以检查电路板是否正常?

    此致

    Lukas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看到您遗漏了 UG 页109中推荐的 setVCOREUP 函数的以下指令。
    while ((PMMIFG& SVSMHDLYIFG)=0);
    while (((PMMIFG& SVSMLDLYIFG)=0);

    请添加并重试吗?