Part Number:MSP430FR5738
下面是出现无法睡眠时,打印出来的寄存器的值,目前无法判断哪里出问题
特别注意的是,以下标记为0
Susan Yang:
能否说明一下您使用的程序?另外建议您在下面的勘误表内搜索 LPMx.5
https://www.ti.com/lit/er/slaz391af/slaz391af.pdf
,
tim zhuang:
程序其实很简单的,
if (SYSRSTIV == SYSRSTIV_LPM5WU) {//reset from LPM35clockInit();rtcReStart();__enable_interrupt();taskRun();enterLPM35();} else {//POR initclockInit();rtcInit();enterLPM35();} }static void enterLPM35(void) {PMMCTL0_H = PMMPW_H;PMMCTL0_L &= ~SVSLE;PMMCTL0_L |= PMMREGOFF;PMMCTL0_H = 0;__enable_interrupt();__bis_SR_register(LPM3_bits + GIE);// LPM3 + Enable interrupt }
,
tim zhuang:
如果不能进入睡眠,程序则跑到死循环,目前就是有时会进入死循环,这个位置不应该出现的,正常情况下,__bis_SR_register(LPM3_bits + GIE)后就会切断CPU Core电源,不会继续跑的
,
tim zhuang:
麻烦帮我问海外原厂,目前海外论坛发不了帖子,谢谢了,目前从勘误表看调试模式会导致进入不了睡眠,也尝试过将TEST脚用4.7K下拉电阻,避免TEST被拉高,PJ0-PJ3这4个IO都设置输出但是还是会出现不能进入睡眠
,
Susan Yang:
好的,我会在之后po上论坛链接
,
tim zhuang:
麻烦了您,尽快,这个问题拖了好久了,现在产品都不敢卖
,
Susan Yang:
请您跟踪下面帖子的回复
https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1033928/msp430fr5738-can-not-enter-lpm3-5-sometimes
,
Gary Gao:
你好
LPM3.5 在Debug模式下可能会出现问题, 建议free run 使用串口或者GPIO 配合调试
,
tim zhuang:
但是目前我这个不是Debug模式,是在发布版本下使用的,而且TEST下拉电阻了
,
Gary Gao:
不是版本问题,是LPM3.5 不建议进入debug 调试, 建议让芯片下载好程序后上电自由跑,然后使用GPIO 指示运行状态。 其它逻辑部分可以使用LPM3 在debug 模式下调试。
,
tim zhuang:
现在不是调试,现在就是芯片下载好程序正常上电自由跑了,每分钟定时唤醒,出现有时进不了LPM3.5
,
Gary Gao:
你是怎么判断程序没有进入LPM3.5, 并进入死循环的?
,
tim zhuang:
死循环我有亮灯,还有串口消息打印,那个地方不可能跑进去的
if (SYSRSTIV == SYSRSTIV_LPM5WU) {//reset from LPM35clockInit();rtcReStart();__enable_interrupt();TaskRun();//printfReg();enterLPM35();} else {//POR initclockInit();rtcInit();//printfReg();enterLPM35();}//should never run to here!while (1) {Delay_s(20);dbgLED_blink(1);uart_init();Delay_ms(2);printfReg();}
,
Gary Gao:
方便把整个测试程序发过来吗?
,
tim zhuang:
生产环境代码估计没办法发出来,有什么情况会导致进入不了睡眠?从芯片设计角度来看,海外TI团队没回复
,
tim zhuang:
或者说进入睡眠需要时间等待?
,
tim zhuang:
或者说进入睡眠需要时间等待?这块细节我不清楚,文档上没有任何说明
,
Gary Gao:
方便弄个可以复现问题的简易程序吗?
顺便问下你测试了多少个芯片?有多少芯片会有这个问题? 这个问题在出现过问题的芯片上多久可以再次复现问题?
,
tim zhuang:
至少10%以上芯片出现了,1000台有差不多100台,概率非常大,所以非常急,也不能改方案,但这个问题肯定有原因的
,
Gary Gao:
这个问题在出现过问题的芯片上多久可以再次复现问题?
方便弄个可以复现问题的简易程序吗?
建议在进入LPM3.5之前清除LOCKLPM5
,
tim zhuang:
是的,这个启动代码都是从TI资源库里面拿出来用的,没改过
void main(void) {uint8_t wksrc = WKSRC_RTC;WDTCTL = WDTPW + WDTHOLD;// Stop WDT//Unlock the GPIO pins./** By default, the pins are unlocked unless waking* up from an LPMx.5 state in which case all GPIO* are previously locked.**/PM5CTL0 &= ~LOCKLPM5;if (SYSRSTIV == SYSRSTIV_LPM5WU) {//reset from LPM35clockInit();rtcReStart();__enable_interrupt();taskRun();enterLPM35();} else {//POR initclockInit();rtcInit();enterLPM35();} }
,
Gary Gao:
可以先回答一下这两个问题吗?
这个问题在出现过问题的芯片上多久可以再次复现问题?
方便弄个可以复现问题的简易程序吗?
,
tim zhuang:
这个时间不确定的,快则几个小时,慢则1-2个月出现,有些设备则不出现,所以这个没规律的,简易程序可能但不好复现,从芯片设计角度,不能知道什么原因会导致睡眠不了吗?
,
Gary Gao:
建议在enterLPM35();之前再清除一遍LOCKLPM5。
建议使用简易程序进行测试如有问题复现请将测试程序发我分析,谢谢
我这边再帮你看看有没有其它影响因素