大家好,
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.