Other Parts Discussed in Thread: MSP430F5529
大家好、我很感谢您对 UCS 奇怪行为的想法:
我们有一个使用 MSP430F5529的设计、其中只有24MHz XTAL 连接到 XT2。 我们制造了数十块电路板、所有电路板都可以正常工作、但少数电路板无法正常启动。 经过一些调查、我发现固件在 UCSCTL4寄存器中的 SELM_5位置位(设置 MCLK=XT2)后崩溃。 我的初始化代码:
------
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
P5SEL |= BIT2+BIT3;//端口选择 XT2
UCSCTL6 &=~XT2OFF;//启用 XT2
UCSCTL6 |= XT2DRIVE_3;// XT2振荡电流至最大值
UCSCTL3 |= SELREF_2;// FLLref = REFO
//由于未使用 LFXT1,
//使用 LFXT1提供 FLL 可能会导致
UCSCTL4 = SELA_2+SELS_3+SELM_3;// ACLK = REFO、SMCLK = DCO、MCLK = DCO
UCSCTL6 |= XT1OFF;// XT1OFFG 标志置1
//循环直到 XT1、XT2和 DCO 稳定-在本例中循环直到 XT2稳定
操作
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG;//清除故障标志
} while (SFRIFG1&OFIFG);//测试振荡器故障标志
UCSCTL4 = SELA_2+SELS_5+SELM_5;// ACLK = REFO、SMCLK = MCLK = XT2 = 24MHz
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
SFRIFG1 &=~OFIFG;
------
例如、如果我为 SELM_3更改 SELM_5、则软件运行正常(请注意 SMCLK=XT2=24MHz)、尽管某些外设由于 MCLK 频率不正确而无法正常运行。
起初、我认为可能是 XTAL 或负载电容器问题、但3个电路板已经显示了完全相同的行为。 另一件奇怪的事情是、由于此设计允许使用 USB 进行固件升级(使用 TI 自举例程)、因此在从更新过程软重启后电路板运行正常、但如果您重启电源、电路板将不会再次运行。 如果你对它进行调试、它会一直运行到 UCSCTL4、在那里、经过几条指令后、它只是崩溃并跳转到一个随机地址。
有什么想法会导致 UCS 的这种行为?
Gabriel