1193

帖子

0

TA的资源

纯净的硅(高级)

21
 
__bis_SR_register(LPM0_bits + GIE);
上面这条语句是进入低功耗模式LPM0并开启全局中断。
在开启了全局中断的前提下,再次进入低功耗模式只需要下面这句就行了:
LPM0;
从LPM0唤醒也只需要下面这一句:
LPM0_EXIT;
如果你非得使用寄存器语句,那就是:
__bic_SR_register_on_exit(LPM0_bits);
低功耗模式0依旧属于低功耗模式,CPU同样没有工作。进入Active Mode才叫唤醒。

点评

版主您好~非常感谢您的回答~~ 不过我按照您给的程序框架思路试着写了一下 调试的时候会卡在AD中断里面,我不太明白为什么~~~给您看看我的截图~ 这个是主程序0的图 [attachimg]198046[/attachimg]  详情 回复 发表于 2015-5-15 15:10
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

22
 
本帖最后由 Ben讨厌苦咖啡 于 2015-5-15 15:35 编辑
qiushenghua 发表于 2015-5-15 09:51
__bis_SR_register(LPM0_bits + GIE);
上面这条语句是进入低功耗模式LPM0并开启全局中断。
在开启了全局中断的前提下,再次进入低功耗模式只需要下面这句就行了:
LPM0;
从LPM0唤醒也只需要下面这一句:
LPM0_EXIT;
如果你非得使用寄存器语句,那就是:
__bic_SR_register_on_exit(LPM0_bits);
低功耗模式0依旧属于低功耗模式,CPU同样没有工作。进入Active Mode才叫唤醒。

版主您好~非常感谢您的回答~~


因为我AD想精确控制采样率,想了个办法就是打开AD采集,然后将ADMEM0数据存到temp里面,然后用定时器5ms进入一次定时器中断,在定时器中断里面将采到的temp做转换传到电脑上。

那么AD其实是一直在开着的,我感觉如果按照这个思路的话,那么貌似主循环就没有什么用了呃。。。。。。

不知道我的想法对不对~~~



因为后面要和加速度传感器的数据结合到一起,我按照我的这个方法,同样把加速度传感器采到的数据在定时器中断里面和AD的电压数据一起发送,这样最后发送到电脑上的采样点少了很多,明显不是5ms发一次。。。。。。



不知道关于我想实现的功能版主在程序结构和想法上能给点什么意见不?困扰了好几天的采样率问题l了 实在是太伤了。。。。。。



非常感谢版主大人。
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

23
 
Ben讨厌苦咖啡 发表于 2015-5-15 15:10
版主您好~非常感谢您的回答~~


因为我AD想精确控制采样率,想了个办法就是打开AD采集,然后将ADMEM0数据存到temp里面,然后用定时器5ms进入一次定时器中断,在定时器中断里面将采到的temp做转换传到电脑上。

那么AD其实是一直在开着的,我感觉如果按照这个思路的话,那么貌似主循环就没有什么用了呃。。。。。。

不知道我的想法对不对~~~



因为后面要和加速度传感器的数据结合到一起,我按照我的这个方法,同样把加速度传感器采到的数据在定时器中断里面和AD的电压数据一起发送,这样最后发送到电脑上的采样点少了很多,明显不是5ms发一次。。。。。。



不知道关于我想实现的功能版主在程序结构和想法上能给点什么意见不?困扰了好几天的采样率问题l了 实在是太伤了。。。。。。



非常感谢版主大人。
  1. 初始化();
  2. while(1)
  3. {
  4. 休眠();
  5. 开始电压采集ADC转换();
  6. 休眠();
  7. 处理数据,暂时不外发();
  8. 开启加速度采集的ADC转换();
  9. 休眠();
  10. 处理数据,外发两个数据();
  11. }

  12. ADC中断服务()
  13. {
  14. 唤醒单片机();
  15. }


  16. 定时器中断服务()
  17. {
  18. 唤醒单片机();
  19. }
  20. 初始化()
  21. {
  22. 设定定时器中断每5毫秒执行一次
  23. 开启全局中断
  24. }

复制代码

点评

版主大人 还是有问题呃~~ 我按照你给的思路写~~我调试程序 程序一直在AD中断里面循环不出来了。。。。。 您帮我看看程序有什么问题呢?~~~非常感谢呢! 这个是main 里面的 [attachimg]19  详情 回复 发表于 2015-5-17 21:54
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

24
 

版主大人 还是有问题呃~~ 我按照你给的思路写~~我调试程序 程序一直在AD中断里面循环不出来了。。。。。



您帮我看看程序有什么问题呢?~~~非常感谢呢!



这个是main 里面的







这个是定时器中断及设置里面的~~~





这个是AD中断的


点评

心急吃不了热豆腐,先把低功耗等级改为LPM0试试,然后再逐步提高低功耗等级。貌似LPM4只能通过外部中断唤醒…  详情 回复 发表于 2015-5-17 22:21
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

25
 
Ben讨厌苦咖啡 发表于 2015-5-17 21:54
版主大人 还是有问题呃~~ 我按照你给的思路写~~我调试程序 程序一直在AD中断里面循环不出来了。。。。。



您帮我看看程序有什么问题呢?~~~非常感谢呢!



这个是main 里面的







这个是定时器中断及设置里面的~~~





这个是AD中断的

心急吃不了热豆腐,先把低功耗等级改为LPM0试试,然后再逐步提高低功耗等级。貌似LPM4只能通过外部中断唤醒…

点评

我在单步调试的时候没有看出来什么时候进入定时器中断。。。。。。  详情 回复 发表于 2015-5-17 22:50
改成了LPM0 不过程序还是卡在了AD中断里面 其实您给的思路我有点不太明白 就是如果按照您的思路的话 正常执行程序的顺序应该是??? 初始化 然后 进入定时器中断 5ms唤醒一次单片机 然后进入AD中断 唤  详情 回复 发表于 2015-5-17 22:37
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

26
 
qiushenghua 发表于 2015-5-17 22:21
心急吃不了热豆腐,先把低功耗等级改为LPM0试试,然后再逐步提高低功耗等级。貌似LPM4只能通过外部中断唤醒…

改成了LPM0 不过程序还是卡在了AD中断里面


其实您给的思路我有点不太明白 就是如果按照您的思路的话 正常执行程序的顺序应该是???

初始化 然后 进入定时器中断 5ms唤醒一次单片机 然后进入AD中断 唤醒单片机 然后while(1)里面的AD转换 然后处理数据 发送数据?

是这样的吗??


点评

用手机回的,打字不方便,明天到公司再看你的程序。 思路就是主函数循环执行,每5毫秒进入定时中断,唤醒开始ADC转换。转换的时候CPU不参与工作,将其设置为休眠。 ADC转换完成之后进入中断,唤醒单片机继续执  详情 回复 发表于 2015-5-17 23:16
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

27
 
qiushenghua 发表于 2015-5-17 22:21
心急吃不了热豆腐,先把低功耗等级改为LPM0试试,然后再逐步提高低功耗等级。貌似LPM4只能通过外部中断唤醒…

我在单步调试的时候没有看出来什么时候进入定时器中断。。。。。。
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

28
 
Ben讨厌苦咖啡 发表于 2015-5-17 22:37
改成了LPM0 不过程序还是卡在了AD中断里面


其实您给的思路我有点不太明白 就是如果按照您的思路的话 正常执行程序的顺序应该是???

初始化 然后 进入定时器中断 5ms唤醒一次单片机 然后进入AD中断 唤醒单片机 然后while(1)里面的AD转换 然后处理数据 发送数据?

是这样的吗??

用手机回的,打字不方便,明天到公司再看你的程序。

思路就是主函数循环执行,每5毫秒进入定时中断,唤醒开始ADC转换。转换的时候CPU不参与工作,将其设置为休眠。

ADC转换完成之后进入中断,唤醒单片机继续执行主函数里的处理数据工作。


处理完数据,一个循环结束,进入下一次循环,休眠等待下一次定时器中断来唤醒。



点评

我明白了~谢谢版主~~~  详情 回复 发表于 2015-5-18 08:54
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

29
 
qiushenghua 发表于 2015-5-17 23:16
用手机回的,打字不方便,明天到公司再看你的程序。

思路就是主函数循环执行,每5毫秒进入定时中断,唤醒开始ADC转换。转换的时候CPU不参与工作,将其设置为休眠。

ADC转换完成之后进入中断,唤醒单片机继续执行主函数里的处理数据工作。


处理完数据,一个循环结束,进入下一次循环,休眠等待下一次定时器中断来唤醒。

我明白了~谢谢版主~~~
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

30
 
从你的代码看上去,问题还是挺多的。
ADC12IV是不是等于6,只有当它等于6的情况下才能退出低功耗模式。你卡在ADC中断里需要好好检查这一点。
另外,你没有完成转换就读取ADC12MEM了(你先读的数据再进的休眠,读数据的时候转换还没完成)
还有,在ADC配置的时候别忘记开启ADC中断。看不到你ADC配置的代码,但是从你“卡在ADC中断”的描述判断,应该是开启了。

点评

版主你好~ 我调试了程序发现ADC12IV是6呃。。。。。。。 [attachimg]198323[/attachimg] 2.您指出的第二个问题我有点没有明白~ADC12MEM不是AD转换转换后的数据吗? 3.是开启了AD中断了~~  详情 回复 发表于 2015-5-18 10:59
 
 
 

回复

186

帖子

0

TA的资源

一粒金砂(中级)

31
 
qiushenghua 发表于 2015-5-18 10:42
从你的代码看上去,问题还是挺多的。
ADC12IV是不是等于6,只有当它等于6的情况下才能退出低功耗模式。你卡在ADC中断里需要好好检查这一点。
另外,你没有完成转换就读取ADC12MEM了(你先读的数据再进的休眠,读数据的时候转换还没完成)
还有,在ADC配置的时候别忘记开启ADC中断。看不到你ADC配置的代码,但是从你“卡在ADC中断”的描述判断,应该是开启了。

版主你好~



我调试了程序发现ADC12IV是6呃。。。。。。。





2.您指出的第二个问题我有点没有明白~ADC12MEM不是AD转换转换后的数据吗?



3.是开启了AD中断了~~



劳您费心了~~~~非常感谢~

点评

ADC12CTL0|=ADC12SC; result=ADC10MEM0; LPM4; 上面这三句,第一句说的是开启ADC转换,也就是这个时候开始让ADC模块开始采样。 第二句,直接读取,由于ADC采样是需要时间的,所以你这个时候读出来的数据是不可  详情 回复 发表于 2015-5-18 23:17
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

32
 
Ben讨厌苦咖啡 发表于 2015-5-18 10:59
版主你好~



我调试了程序发现ADC12IV是6呃。。。。。。。





2.您指出的第二个问题我有点没有明白~ADC12MEM不是AD转换转换后的数据吗?



3.是开启了AD中断了~~



劳您费心了~~~~非常感谢~

ADC12CTL0|=ADC12SC;
result=ADC10MEM0;
LPM4;

上面这三句,第一句说的是开启ADC转换,也就是这个时候开始让ADC模块开始采样。
第二句,直接读取,由于ADC采样是需要时间的,所以你这个时候读出来的数据是不可靠的。
第三句,进入低功耗模式,这个时候数据已经读出来了,再进低功耗模式已经没用了。

下面这个链接是我之前写的ADC读取语句,你可以参考一下(读Vcc电压):


https://bbs.eeworld.com.cn/forum. ... 6450&fromuid=354619

补充一下宏定义和中断服务。
其中flag是全局变量,作用是将其的8个bit分别作为8个标志位使用。
在这里可以不使用这个标志位。
我这么写的原因是我的程序架构比较混乱,唤醒MCU的中断源可能有好几个,不加的话在执行过程中容易出错。


#define ADC_Interrupt flag&0x04
#define Set_ADC_Interrupt flag|=0x04
#define Reset_ADC_Interrupt flag&=0xFB

__interrupt void ADC10_ISR (void)
{
        Set_ADC_Interrupt;
        LPM3_EXIT;     // Clear LPM3 bits from 0(SR)
}



 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表