进入LPM3之后

[复制链接]
2043|21
 楼主| wuhany 发表于 2015-10-3 11:25 | 显示全部楼层 |阅读模式
各位大侠如果msp430f149用的是系统时钟,定时器用aclk  进入LPM3之后,是不是连基本的运算都不行了
 楼主| wuhany 发表于 2015-10-3 11:25 | 显示全部楼层
比如I++等
heweibig 发表于 2015-10-3 11:25 | 显示全部楼层

LPM3后CPU就停止了。
lizye 发表于 2015-10-3 11:25 | 显示全部楼层
需要用中断来唤醒
zhanghqi 发表于 2015-10-3 11:26 | 显示全部楼层
电路图呢
zhenykun 发表于 2015-10-3 11:26 | 显示全部楼层
是不是进入中断,什么事情都可以做了?
 楼主| wuhany 发表于 2015-10-3 11:26 | 显示全部楼层
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 发表于 2015-10-3 11:26 | 显示全部楼层
是不是LPM3的原因
wyjie 发表于 2015-10-3 11:27 | 显示全部楼层
进入中断后,CPU就被唤醒了,可以执行指令了。
wyjie 发表于 2015-10-3 11:27 | 显示全部楼层
recbuf[0],recbuf[1],J三个变量都应当设成全局变量。
yszong 发表于 2015-10-3 11:27 | 显示全部楼层
如果怀疑是LPM3的原因,建议楼主关掉LPM3模式测试看看是不是正常。
huangchui 发表于 2015-10-3 11:28 | 显示全部楼层
怀疑是接收缓冲区满了而没有及时取走所需的值
jiahy 发表于 2015-10-3 11:28 | 显示全部楼层
嗯,所以01 02中有一个消息没有接受到,所以位置错开了
jiahy 发表于 2015-10-3 11:28 | 显示全部楼层
楼主可以试着降低串口的速度
jiajs 发表于 2015-10-3 11:28 | 显示全部楼层
先把进入LPM3的程序去掉,死循环,看会不会出现这样的问题
huangchui 发表于 2015-10-3 11:28 | 显示全部楼层

进入中断会唤醒cpu,lpm3时cpu处于休眠状态。只有aclk可以用。
 楼主| wuhany 发表于 2015-10-3 11:29 | 显示全部楼层

那中断里 判断语句和累加语句还会执行吗?
zhenykun 发表于 2015-10-3 11:29 | 显示全部楼层
语句的执行需要cpu,
在中断里,cpu被唤醒,所以可以执行语句。
 楼主| wuhany 发表于 2015-10-3 11:29 | 显示全部楼层

哦,懂了, 多谢大家啊
豆腐块 发表于 2015-10-8 10:44 | 显示全部楼层
进入中断后,CPU就被唤醒了,语句是可以执行的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

879

主题

10435

帖子

4

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