主题中讨论的其他器件:MSP430WARE、
各位专家、您好!
背景:
我的客户遇到了大约1%的余波、他的 MSP430应用将会停止、例如振荡器未转换。
对于现场的一小部分主应用、 在时钟的主应用配置后很快停止。
我仍在尝试确定 确切的位置、但电流消耗很小且是静态的。
示波器探针表明25MHz 时钟正在正确振荡。
通过在微控制器的运行跳闸点附近快速循环向电路板供电、可以重现故障。
下面是 kicker: 在连续清理上电时、电路板将在第二组时钟初始化之后继续失败。
该故障可通过快速循环通电来清除、之后将正常启动。
代码:
固件从引导带部分开始、该部分在执行到主代码的盲跳转之前验证主代码。
它具有以下时钟初始化代码(与 TI 示例非常一致):
-------- BSL ---
SetVCore (3);
P5SEL |= BIT2+BIT3; //端口选择 XT2
UCSCTL6 &=~XT2OFF; //启用 XT2
//将驱动强度[01]设置为12MHz
UCSCTL6 &=~(XT2DRIVE1); //关闭驱动位1
UCSCTL6 |= XT2DRIVE0; //打开 驱动位0
//将驱动强度[00]设置为32kHz
UCSCTL6 &=~(XT1DRIVE1); //关闭驱动位1
UCSCTL6 &=~(XT1DRIVE0); //关闭驱动位1
//设置 XT1
P7SEL |= BIT0+BIT1; //选择 XT1
UCSCTL6 &=~(XT1OFF); // XT1打开
//循环直到 XT1、XT2和 DCO 稳定-在本例中循环直到 XT2稳定
操作
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
UCSCTL4 = 0X0055; //Acclk= xt1、SMclk = XT2、 MCLK = XT2clk
UCSCTL1 |= DISMOD ; //关闭调制
{ 对主应用程序内存执行校验和检查后,它将跳转到主应用 程序}
------------ 主应用 程序-------------------------------------------------------
{ 在其中,它会经历类似的时钟启动过程 }
{之所以实现冗余,是因为 BSL 的性质不适合在调试期间进行仿真}
SetVCore (3);
P5SEL |= BIT2+BIT3; //端口选择 XT2
UCSCTL6 &=~XT2OFF; //启用 XT2
//将驱动强度[01]设置为12MHz
UCSCTL6 &=~(XT2DRIVE1); //关闭驱动位1
UCSCTL6 |= XT2DRIVE0; //打开 驱动位0
//将驱动强度[00]设置为32kHz
UCSCTL6 &=~(XT1DRIVE1); //关闭驱动位1
UCSCTL6 &=~(XT1DRIVE0); //关闭驱动位1
//设置 XT1
P7SEL |= BIT0+BIT1; //选择 XT1
UCSCTL6 &=~(XT1OFF); // XT1打开
//循环直到 XT1、XT2和 DCO 稳定-在本例中循环直到 XT2稳定
操作
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG; //清除故障标志
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
UCSCTL4 = 0X0055; //Acclk= xt1、SMclk = XT2、 MCLK = XT2clk
UCSCTL1 |= DISMOD ; //关闭调制
这只是代码的复制。
问题:
- SetVcore (3)可以两次吗?
- 对于最终用于汇编的25MHz 时钟、驱动强度设置不正确。
- 尽管时钟会达到正常振荡的优先级、MSP 的内部时钟是否会受到影响?
- 一般来说、可以对 UCS 寄存器进行两次操作吗?
谢谢!
簧片