打印

仿真过程中低功耗问题

[复制链接]
978|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiahy|  楼主 | 2016-8-19 22:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当我让程序全速进行时,发现CPU进入低功耗不响应ADC10的中断,但是只要这时候,我按一下BREAK按钮,也就是那个红色的小手,接着通过查看寄存器得知ADC10中断标志已经置位。不可思议的是:紧接着,我按一下单步执行,发现响应了中断。再全速运行,仍然是同样的问题。每次都是这样

相关帖子

沙发
jlyuan| | 2016-8-19 22:28 | 只看该作者
仿真过程有问题??

使用特权

评论回复
板凳
yszong| | 2016-8-19 22:29 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
地板
jiahy|  楼主 | 2016-8-19 22:31 | 只看该作者
程序代码如下:
#include <msp430.h>
void main(void)
{  unsigned int i;
   WDTCTL = WDTPW + WDTHOLD;
   if(CALBC1_1MHZ==0XFF || CALDCO_1MHZ==0XFF)
   {
          while(1);   
   }
   do
   {
     IFG1 &= ~OFIFG;
     for(i=0xff;i>0;i--);
   }
   while((IFG1&OFIFG));
   P1DIR |= BIT0;
   P1OUT =0;
   ADC10CTL0 |= ADC10ON + ADC10IE + SREF_1 + ADC10SHT_3 + REF2_5V + REFON;
   ADC10CTL1 |= INCH_10 + ADC10SSEL_2 + SHS_1 + CONSEQ_2;
   __enable_interrupt();                  
   TA0CCR0 = 30;                        
   TA0CCTL0 |= CCIE;                          
   TA0CTL = TASSEL_2 | MC_1;               
   LPM0;
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void timer0_isr(void)
{
   TA0CTL = 0;
   TA0CCR0 =32767;
   TA0CCR1 = 2500;
   TA0CCTL0 &=~CCIE;
   TA0CCTL1 = OUTMOD_3;
   TA0CTL = TASSEL_2 + MC_1;
   ADC10CTL0 |= ENC;
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_isr(void)
{
  P1OUT ^= BIT0;
}

使用特权

评论回复
5
wuhany| | 2016-8-19 22:32 | 只看该作者
然后呢?你是怎么应对这个的呢

使用特权

评论回复
6
lizye| | 2016-8-19 22:33 | 只看该作者
一句注释都没有。

使用特权

评论回复
7
shimx| | 2016-8-19 22:35 | 只看该作者
楼主能否讲讲程序的思路,难道使用ADC10就是为了让引脚电平翻转?

使用特权

评论回复
8
jiahy|  楼主 | 2016-8-19 22:36 | 只看该作者
编这个程序本来就是打算看一下ADC10的SHI信号是边沿触发还是电平触发。ADC10的触发源来自TA1,TA1的输出高电平时间足够ADC采样几百次,但是运行起来发现,LED是闪烁的,说明SHI是边沿触发。

使用特权

评论回复
9
jiahy|  楼主 | 2016-8-19 22:37 | 只看该作者
因为就是一个小实验,所以没有注释。问题上午刚刚解决:当CPU进入LPM0时,MAIN CLOCK 是关闭的,而我的ADC10时钟选的是它,所以进入低功耗之后,肯定不会有中断响应的。

使用特权

评论回复
10
huangchui| | 2016-8-19 22:38 | 只看该作者
再执行为什么能够响应

使用特权

评论回复
11
jiahy|  楼主 | 2016-8-19 22:42 | 只看该作者
还不知道。将ADC10的时钟源改为子系统时钟就可以。

使用特权

评论回复
12
zhanghqi| | 2016-8-19 22:43 | 只看该作者

if(CALBC1_1MHZ==0XFF || CALDCO_1MHZ==0XFF)
    {
           while(1);   
    }
这个会不会进入死循环的呢?

使用特权

评论回复
13
wyjie| | 2016-8-19 22:44 | 只看该作者
这段程序的意思是:如果发现segmentA对应的位置有校正参数,则继续运行,若其里面的值没有程序就进入死循环不执行下面的程序了

使用特权

评论回复
14
jiahy|  楼主 | 2016-8-19 22:45 | 只看该作者
哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
15
xiaolong12| | 2016-8-20 19:03 | 只看该作者
好像没有清除中断标志的。还有,主函数也不规范。

使用特权

评论回复
16
迪卡| | 2016-8-20 21:43 | 只看该作者
当CPU进入LPM0时,MAIN CLOCK 是关闭的

使用特权

评论回复
17
baimiaocun2015| | 2016-8-20 23:42 | 只看该作者
仿真过程中的低功耗是可以的啊,不要随意中断程序的进程的

使用特权

评论回复
18
tongbu2015| | 2016-8-21 17:27 | 只看该作者
进入低功耗模式后,程序是不会在继续运行的了

使用特权

评论回复
19
zhangbo1985| | 2016-8-21 19:07 | 只看该作者
这个设置断点仿真的吧,,尽量不要用但不运行的。

使用特权

评论回复
20
chuntian2016| | 2016-8-21 19:48 | 只看该作者
具体问题具体分析的,,这个楼上几位数的都可以参考下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

862

主题

9861

帖子

4

粉丝