7071|12

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

430F5529的AD利用单通道多次转换模式,无法退出中断执行下一语句。求教! [复制链接]

我在AD的单通道多次转换模式中想利用中断实现多次采样,采样一定次数后执行下一语句。可现在的问题是执行完中断里的最后一条指令后,无法跳出中断执行下一语句。急啊。有没有大侠给小弟指点一下!
部分代码如下:
void main(void)
{
  P6SEL |= 0x01;                            // Enable A/D channel A0
  ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC; // Turn on ADC12, set sampling time
                                            // set multiple sample conversion
  ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2;//+ADC12SSEL_3;       // Use sampling timer, set mode,SCLK selected
  
  ADC12IE = 0x01;                           // Enable ADC12IFG.0
  ADC12CTL0 |= ADC12ENC;                    // Enable conversions
  ADC12CTL0 |= ADC12SC;                     // Start conversion
  
  __bis_SR_register(LPM4_bits + GIE);       // Enter LPM4, Enable interrupts
 
  ...//等待采样后要执行的代码
 ...
}
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
 static unsigned char index = 0; 
  switch(__even_in_range(ADC12IV,34))
  {
  case  0: break;                           // Vector  0:  No interrupt
  case  2: break;                           // Vector  2:  ADC overflow
  case  4: break;                           // Vector  4:  ADC timing overflow
  case  6:                                  // Vector  6:  ADC12IFG0
    if(index<32)
    {
      sample_in[index++] = ADC12MEM0;             //                                 
    }
    else
    {
      __bic_SR_register(LPM4_bits);
      //ADC12CTL0 &= ~ADC12SC;
      ADC12CTL0 &= ~ADC12ENC;
      index = 0;
      
      break;
    }      
  case  8: break;                           // Vector  8:  ADC12IFG1
  case 10: break;                           // Vector 10:  ADC12IFG2
  case 12: break;                           // Vector 12:  ADC12IFG3
  case 14: break;                           // Vector 14:  ADC12IFG4
  case 16: break;                           // Vector 16:  ADC12IFG5
  case 18: break;                           // Vector 18:  ADC12IFG6
  case 20: break;                           // Vector 20:  ADC12IFG7
  case 22: break;                           // Vector 22:  ADC12IFG8
  case 24: break;                           // Vector 24:  ADC12IFG9
  case 26: break;                           // Vector 26:  ADC12IFG10
  case 28: break;                           // Vector 28:  ADC12IFG11
  case 30: break;                           // Vector 30:  ADC12IFG12
  case 32: break;                           // Vector 32:  ADC12IFG13
  case 34: break;                           // Vector 34:  ADC12IFG14
  default: break; 
 }
}

最新回复

楼主,把你程序给我看看吧。Cj20131126@126.com  详情 回复 发表于 2014-7-14 20:17
 
点赞 关注

回复
举报

15

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
自己顶一下,期待有人能够解答。。
 
 

回复

41

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

我觉得这个break应该放到括号外面呢~
不知道对不对~

点评

唔,我试了一下,还是不行。。 光标指在 __bis_SR_register(LPM4_bits + GIE); // Enter LPM4, Enable interrupts的下一指令就再也不动了。。  详情 回复 发表于 2012-7-14 11:54
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 fanqiaoyan 的帖子

唔,我试了一下,还是不行。。
光标指在 __bis_SR_register(LPM4_bits + GIE);       // Enter LPM4, Enable interrupts的下一指令就再也不动了。。
 
 
 

回复

41

帖子

0

TA的资源

一粒金砂(中级)

5
 
你先把里面的睡眠都屏蔽掉~
5529有一个MSP430F552x Demo - ADC12, Repeated Single Channel Conversions的范例程序
你可以在这个基础上一点一点改,这样比较容易发现问题~

点评

好吧。我发现了。。我在调试程序的时候把关看门狗的那句话给/*了。。。原来如此  详情 回复 发表于 2012-7-14 14:33
嗯,我按你说的把睡眠关掉然后在底下关了中断后面的程序貌似可以运行了。 但有个很奇怪的问题又产生了,就是后面有一个延迟程序,计数unsigned int i从40000减到0,结果程序就卡在里面不出来。抑郁,我把40000变成  详情 回复 发表于 2012-7-14 14:24
 
 
 

回复

132

帖子

0

TA的资源

一粒金砂(中级)

6
 
ADC中断标志要不要清除掉嘞??

点评

中断标志在执行中断函数后是自动清除的吧~  详情 回复 发表于 2012-7-14 14:25
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 5楼 fanqiaoyan 的帖子

嗯,我按你说的把睡眠关掉然后在底下关了中断后面的程序貌似可以运行了。
但有个很奇怪的问题又产生了,就是后面有一个延迟程序,计数unsigned int i从40000减到0,结果程序就卡在里面不出来。抑郁,我把40000变成400就可以了。。我晕了,这是个什么问题,连40000都减不了。可是单独的另外一个程序这个是可以跑的。难道是USB供电太低?
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 6楼 mdq123 的帖子

中断标志在执行中断函数后是自动清除的吧~
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 5楼 fanqiaoyan 的帖子

好吧。我发现了。。我在调试程序的时候把关看门狗的那句话给/*了。。。原来如此
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

10
 
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

11
 
我也遇到过这种问题  在中断最后几一句  ADC12CTL0&=~ENC;  就OK 了

点评

嗯呢,我后来也加了一句是清除其中断标志位,就可以了,应该是最后一次虽然中断但由于没有取出存储器的值,所以中断标志位始终置位,把他手动关掉就行了。  详情 回复 发表于 2012-8-7 23:44
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 11楼 24号杀手 的帖子

嗯呢,我后来也加了一句是清除其中断标志位,就可以了,应该是最后一次虽然中断但由于没有取出存储器的值,所以中断标志位始终置位,把他手动关掉就行了。
 
 
 

回复

101

帖子

1

TA的资源

一粒金砂(中级)

13
 
楼主,把你程序给我看看吧。Cj20131126@126.com
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表