2929|12

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

msp430中斷疑問 [复制链接]


中断的使用是否一定要进入LPM模式?
使用TI范例TA来做修改


int ta=0;
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode

// _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

  if(ta == 10)
    {
       P1OUT ^= 0x01;                            // Toggle P1.0
       ta = 0;
    }
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  ta = ta+1;
}


(1)运行时发现TA动作,但没有进入中断

加入_BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
(2)如进入LPM模式,则进入中断 ta 增加
但ta会远大于10,无法进入if回圈

求指教,谢谢

最新回复

现在明白了MSP430低功耗应用的程序模板了吧。 一般的MSP430中断程序范例是这样:        初始化后,进入低功耗,靠外部中断唤醒,                中断处理完后可以唤醒,唤醒后在主程序中处理,处理完继续休眠。   详情 回复 发表于 2014-5-8 11:31
 
点赞 关注

回复
举报

15

帖子

0

TA的资源

一粒金砂(中级)

推荐
 
lingergz 发表于 2014-5-8 11:31
现在明白了MSP430低功耗应用的程序模板了吧。



程序确实是依照这样的流程走没错,学习了!
 
 

回复

165

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
try:
while(1)
{
if(ta == 10)
    {
       P1OUT ^= 0x01;                            // Toggle P1.0
       ta = 0;
    }
}

点评

试了一下情况与(2)相同  详情 回复 发表于 2014-5-7 11:18
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

试了一下情况与(2)相同
 
 
 

回复

165

帖子

0

TA的资源

一粒金砂(中级)

4
 
我在launchpad 上式了下,看上去完全可以.
#include "io430.h"
int ta=0;  //add volatile ??
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode
  //ta=0;
  asm ("EINT;");                           /////////// Enter LPM0 w/ interrupt
  
  while(1)
  {
    if(ta == 10)               
    {
       P1OUT ^= 0x01;                            // Toggle P1.0
       ta = 0;
    }
  }
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  ta = ta+1;
}
 
 
 

回复

230

帖子

0

TA的资源

一粒金砂(中级)

5
 
老兄,你这个程序肯定有问题啦,
  1. int ta=0;
  2. int main(void)
  3. {
  4.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  5.   P1DIR |= 0x01;                            // P1.0 output
  6.   CCTL0 = CCIE;                             // CCR0 interrupt enabled
  7.   CCR0 = 50000;
  8.   TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode

  9.    _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt

  10.     while(1)
  11. {
  12.   if(ta == 10)
  13.     {
  14.        P1OUT ^= 0x01;                            // Toggle P1.0
  15.        ta = 0;
  16.     }
  17. }
  18. }

  19. // Timer A0 interrupt service routine
  20. #pragma vector=TIMER0_A0_VECTOR
  21. __interrupt void Timer_A (void)
  22. {
  23.   ta = ta+1;
  24. LPM0;
  25. }


复制代码

点评

有什么问题呢?求指教  详情 回复 发表于 2014-5-7 23:01
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

6
 
lingergz 发表于 2014-5-7 17:45
老兄,你这个程序肯定有问题啦,

有什么问题呢?求指教

点评

我已经写了啊,你看看  详情 回复 发表于 2014-5-8 09:46
 
 
 

回复

230

帖子

0

TA的资源

一粒金砂(中级)

7
 
jk4857 发表于 2014-5-7 23:01
有什么问题呢?求指教

我已经写了啊,你看看

点评

加入LPM0;后 出现Warning : CPU is OFF (Low Power Mode) 此时 ta = 1  详情 回复 发表于 2014-5-8 09:55
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

8
 
lingergz 发表于 2014-5-8 09:46
我已经写了啊,你看看

加入LPM0;后

出现Warning : CPU is OFF (Low Power Mode)

此时 ta = 1

点评

不好意思,应该是 退出LPM0模式,LPM0_EXIT;  详情 回复 发表于 2014-5-8 10:50
 
 
 

回复

230

帖子

0

TA的资源

一粒金砂(中级)

9
 
jk4857 发表于 2014-5-8 09:55
加入LPM0;后

出现Warning : CPU is OFF (Low Power Mode)

不好意思,应该是 退出LPM0模式,LPM0_EXIT;

点评

test ok! 非常谢谢!!  详情 回复 发表于 2014-5-8 11:10
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

10
 
lingergz 发表于 2014-5-8 10:50
不好意思,应该是 退出LPM0模式,LPM0_EXIT;

test ok!  非常谢谢!!

点评

现在明白了MSP430低功耗应用的程序模板了吧。 一般的MSP430中断程序范例是这样: 初始化后,进入低功耗,靠外部中断唤醒, 中断处理完后可以唤醒,唤醒后在主程序中处理,处理完继续休  详情 回复 发表于 2014-5-8 11:31
 
 
 

回复

230

帖子

0

TA的资源

一粒金砂(中级)

11
 
jk4857 发表于 2014-5-8 11:10
test ok!  非常谢谢!!

现在明白了MSP430低功耗应用的程序模板了吧。



一般的MSP430中断程序范例是这样:        初始化后,进入低功耗,靠外部中断唤醒,                中断处理完后可以唤醒,唤醒后在主程序中处理,处理完继续休眠。


点评

程序确实是依照这样的流程走没错,学习了!  详情 回复 发表于 2014-5-8 11:50
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

13
 
int ta=0;
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode



    while(1)
{
     _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
  if(ta == 100)
    {
       P1OUT ^= 0x01;                            // Toggle P1.0
       ta = 0;
    }
}
}

// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  ta = ta+1;
  LPM0_EXIT;
}
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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