请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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;
}