2825|9

3404

帖子

6

TA的资源

裸片初长成(初级)

楼主
 

请教关于MSP430 launchPad 定时器中断的问题 [复制链接]

本帖最后由 jishuaihu 于 2014-6-21 00:00 编辑

拿到MSP430 launchPad的好久了,一直闲着,今天拿出来玩玩,遇到了这样两个问题,请教一下大家:
第一个是例程中的这一句_BIS_SR(LPM0_bits + GIE);到底起到了什么作用,看资料上LPM0到LPM4是低功耗的模式。这个是只中断后进入的模式吗?我如果用了两个中断,一个是外部IO的中断,比如P1.3,另外的是定时器TIMER0_A3,我如何分别设置这两个不同的中断到不同的低功耗模式,或者如何设置成两个中断在同一个模式。

另一个问题是关于定时器TIMER0_A3,看资料里面有三个CCR寄存器,看样子是比较之后可以产生中断的,但这个中断向量是同一个,需要判断TA0IV的位来判断具体是那个比较或者是定时器溢出。目前遇到的问题是我设置了两个比较值,但是进入中断后TA0IV所有的位都是0,根本没法判断。还有T0AR的值可以随时修改吗?看资料是R/W型的,理论上应该可以吧?

最后说一下我打算实现的功能,看看那位童鞋玩过430的给出点儿主意。我想在收到一个信号的上升沿后启动定时器,延时一段时间后某一个IO输出一个高电平,然后再延时一段时间这个IO输出低电平,同时停止计时器。整个过程在外部信号的一个周期之内完。
我现在打算把定时器设置为上升计数模式。收到外部上升沿信号后TAR清零,启动定时器,到达CCR0时进入中断,输出高电平(好像有个管脚可以直接设置为输出,这个以后再说),到达CCR1时输出低电平,同时停止定时器。
main.rar (725 Bytes, 下载次数: 4)

main.rar (725 Bytes, 下载次数: 4)

代码是不能用的,由于第一次玩430,很多东西都不清楚,资料一时半会肯定看不全,有熟悉的给指点一下吧


最新回复

做好了跟大家分析分析哈!  详情 回复 发表于 2014-6-21 14:56
 
点赞 关注(2)

回复
举报

2781

帖子

419

TA的资源

五彩晶圆(中级)

沙发
 
请看我的签名!

点评

谢谢!  详情 回复 发表于 2014-6-21 08:53
 
个人签名
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

板凳
 
低功耗时,CPU内核是停止的,而中断处理过程中恰恰是活动的呀,所以进入中断就自动进入活动模式,中断程序执行完后又会回到中断前的状态,如果中断前是LPM0,那么还是LPM0。不过可以在中断程序的最后更改中断结束后的功耗模式。
CCR0的中断是单独的
其余的共用
TA0IV被读时会自动清除里面的标志位,看手册呀

点评

也就是说_BIS_SR(LPM0_bits + GIE);其实相当于一般单片机的while(1)是吧。 TA0IV不能在watch窗口查看吗? 资料太多了,懒得看嘛,只看例程了[/backcolor]  详情 回复 发表于 2014-6-21 08:57
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

4
 

谢谢!
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

5
 
看到一些初学者貌似可能是故意找茬的
不过楼主好像是老用户了,还是版主,可能确实是以前没接触msp430,所以还是回复一下。

没验证,也匆忙,仅供参考,不能盲信,很可能低级错误

  1. #include <msp430.h>


  2. int main(void)
  3. {
  4.          WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  5.         //没有设置时钟,默认使用1M?
  6.           P1DIR = BIT0;//MSP430习惯这样用,有利于分别使用的哪些管脚 0x01;                             // P1.0 output, else input
  7.           P1OUT = BIT3; //0x08;                            // P1.3 set, else reset
  8.           P1REN |= 0x08;                            // P1.3 pullup
  9.           P1IE  |= 0x08;                             // P1.3 interrupt enabled
  10.           //P1IES |= 0x08;                            // P1.3 Hi/lo edge
  11.         P1IES &= ~0x08;  //我想在收到一个信号的上升沿后启动定时器                          // P1.3 lo/Hi edge
  12.           P1IFG &= ~0x08;                           // P1.3 IFG cleared

  13.         CCR0 = 40000;
  14.           CCTL0 = CCIE;                            // CCR0 interrupt enabled
  15.           
  16.         CCR1 = 50000;
  17.           CCTL1 = CCIE;                            // CCR1 interrupt enabled
  18.           

  19.           TA0CTL = TASSEL_2 + MC_0;                  // SMCLK, StopTimerA

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

  21.           _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/interrupt
  22.         while(1);//没有这一句搞不好不合规范呀
  23.         return 0;
  24. }


  25. // Port 1 interrupt service routine
  26. #pragma vector=PORT1_VECTOR
  27. __interrupt void Port_1(void)
  28. {
  29.         TA0R = 0;
  30.         TA0CTL = TASSEL_2 + MC_2;//不能用增技术模式,否则到CCR0值就回头了。MC_1;                  // SMCLK, StopTimerA                                //启动定时器
  31. // P1OUT ^= 0x01;                            // P1.0 = toggle
  32.         P1IFG &= ~0x08;                           // P1.3 清除中断标志
  33. }

  34. #pragma vector=TIMER0_A0_VECTOR//具体名称请查一下头文件定义,记不清了
  35. __interrupt void Timer_A (void)
  36. {
  37.         P1OUT ^= 0x01;
  38. }

  39. // Timer A0 interrupt service routine
  40. #pragma vector=TIMER0_A1_VECTOR //具体名称请查一下头文件定义,记不清了TIMER0_A0_VECTOR
  41. __interrupt void Timer_A (void)
  42. {
  43.         switch(TA0IV)
  44.         {
  45.                 case 2:
  46.                 {
  47.                         //P1OUT ^= 0x01;
  48.                         TA0CTL &=  MC_0; //停止定时器
  49.                         P1OUT ^= 0x01;
  50.                         break;
  51.                 }
  52.                 case 4:
  53.                 {
  54.                         //TA0CTL &=  MC_0;                  //停止定时器
  55.                         //P1OUT ^= 0x01;
  56.                         break;
  57.                 }
  58.                 case 10:break;
  59.                 default:break;
  60.         }


  61. //  P1OUT ^= 0x01;                            // Toggle P1.0
  62. // CCR0 += 50000;                            // Add Offset to CCR0
  63. }
复制代码





点评

谢谢!上次辛昕给了一个MSP430 launchPad ,没时间玩,又送人了。前些日子论坛又送了一个,一直没开封,想用这个做个交流调速装置,跟工作也相关,先用这个练练手,才拿出来玩的,昨天晚上真是第一次接触,现下的430  详情 回复 发表于 2014-6-21 09:02
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

6
 
wangfuchong 发表于 2014-6-21 08:25
低功耗时,CPU内核是停止的,而中断处理过程中恰恰是活动的呀,所以进入中断就自动进入活动模式,中断程序 ...

也就是说_BIS_SR(LPM0_bits + GIE);其实相当于一般单片机的while(1)是吧。
TA0IV不能在watch窗口查看吗?
资料太多了,懒得看嘛,只看例程了

点评

也就是说_BIS_SR(LPM0_bits + GIE);其实相当于一般单片机的while(1)是吧。 不是,LPM0,cpu是停止的,也就是说MCLK好像是停止的,而while(1)可是在全速运行是活动模式呀 TA0IV能在register窗口看  详情 回复 发表于 2014-6-21 09:03
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

7
 
wangfuchong 发表于 2014-6-21 08:57
看到一些初学者貌似可能是故意找茬的
不过楼主好像是老用户了,还是版主,可能确实是以前没接触msp430,所 ...

谢谢!上次辛昕给了一个MSP430 launchPad ,没时间玩,又送人了。前些日子论坛又送了一个,一直没开封,想用这个做个交流调速装置,跟工作也相关,先用这个练练手,才拿出来玩的,昨天晚上真是第一次接触,现下的430ware学的。你有时间不?一块弄弄交流调速装置吧

 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

8
 
jishuaihu 发表于 2014-6-21 08:57
也就是说_BIS_SR(LPM0_bits + GIE);其实相当于一般单片机的while(1)是吧。
TA0IV不能在watch窗口查看 ...

也就是说_BIS_SR(LPM0_bits + GIE);其实相当于一般单片机的while(1)是吧。
不是,LPM0,cpu是停止的,也就是说MCLK好像是停止的,而while(1)可是在全速运行是活动模式呀

TA0IV能在register窗口看

点评

这个我明白了,就是表达的不太清楚。反正就是单片机进入低功耗模式了,不做别的工作了,等待进入中断了。  详情 回复 发表于 2014-6-21 09:15
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

9
 
wangfuchong 发表于 2014-6-21 09:03
也就是说_BIS_SR(LPM0_bits + GIE);其实相当于一般单片机的while(1)是吧。
不是,LPM0,cpu是停止的, ...

这个我明白了,就是表达的不太清楚。反正就是单片机进入低功耗模式了,不做别的工作了,等待进入中断了。
 
 
 

回复

6066

帖子

90

TA的资源

裸片初长成(初级)

10
 
做好了跟大家分析分析哈!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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