进入LPM3之后

[复制链接]
1461|21
 楼主| wuhany 发表于 2018-2-11 15:14 | 显示全部楼层 |阅读模式
各位大侠如果msp430f149用的是系统时钟,定时器用aclk  进入LPM3之后,是不是连基本的运算都不行了
 楼主| wuhany 发表于 2018-2-11 15:17 | 显示全部楼层

比如I++等
heweibig 发表于 2018-2-11 15:20 | 显示全部楼层


LPM3后CPU就停止了。
lizye 发表于 2018-2-11 15:22 | 显示全部楼层

需要用中断来唤醒
zhanghqi 发表于 2018-2-11 15:26 | 显示全部楼层

电路图呢
zhenykun 发表于 2018-2-11 15:28 | 显示全部楼层

是不是进入中断,什么事情都可以做了?
 楼主| wuhany 发表于 2018-2-11 15:32 | 显示全部楼层
while(1)
   {
     LPM3;
      
    motor(recbuf[0],recbuf[1]); //方向, 偏转次数
   }


/*****UART0 RX ISR will for exit from LPM3 in Mainloop**/
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
    while (!(IFG1 & UTXIFG0));           // USART0 TX buffer ready  
    recbuf[J] = RXBUF0;                          // RXBUF0 to recbuf[]
    J++;
    if(J==2)
     {  
       J=0;
       LPM3_EXIT;                                //跳出LPM3
     }

有时recbuf[0],recbuf[1]接收不正确,举个例子我发01 02然后再发03 04 大多情况都对的,但是有时发完03 04 我看寄存器发现recbuf[0],recbuf[1]的值为04 03不知是什么原因??
huangchui 发表于 2018-2-11 15:35 | 显示全部楼层

是不是LPM3的原因
wyjie 发表于 2018-2-11 15:39 | 显示全部楼层

进入中断后,CPU就被唤醒了,可以执行指令了。
wyjie 发表于 2018-2-11 15:44 | 显示全部楼层

recbuf[0],recbuf[1],J三个变量都应当设成全局变量。
yszong 发表于 2018-2-11 15:46 | 显示全部楼层
如果怀疑是LPM3的原因,建议楼主关掉LPM3模式测试看看是不是正常。
huangchui 发表于 2018-2-11 15:51 | 显示全部楼层

怀疑是接收缓冲区满了而没有及时取走所需的值
jiahy 发表于 2018-2-11 15:53 | 显示全部楼层

嗯,所以01 02中有一个消息没有接受到,所以位置错开了
jiahy 发表于 2018-2-11 15:56 | 显示全部楼层

楼主可以试着降低串口的速度
jiajs 发表于 2018-2-11 16:01 | 显示全部楼层
先把进入LPM3的程序去掉,死循环,看会不会出现这样的问题
huangchui 发表于 2018-2-11 16:03 | 显示全部楼层


进入中断会唤醒cpu,lpm3时cpu处于休眠状态。只有aclk可以用。
 楼主| wuhany 发表于 2018-2-11 16:07 | 显示全部楼层
那中断里 判断语句和累加语句还会执行吗?
zhenykun 发表于 2018-2-11 16:09 | 显示全部楼层

语句的执行需要cpu,
在中断里,cpu被唤醒,所以可以执行语句。
spark周 发表于 2018-2-11 16:13 | 显示全部楼层

进入中断后,CPU就被唤醒了,语句是可以执行的
zhaoxqi 发表于 2018-2-11 16:16 | 显示全部楼层

休眠后应该保持RTC或者神马的,只有重新被唤醒才执行别的操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

879

主题

10435

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部