极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11525|回复: 0

【大赛原创经验贴】msp430中断嵌套:“另类”的嵌套

[复制链接]
发表于 2012-7-18 09:24:59 | 显示全部楼层 |阅读模式
我也是即将参加TI杯电子竞赛的一名新手,在这里我看到了一些人的热情奉献还有斑竹认真负责的态度。一定程度上被感动了,也受到了相当的鼓舞!在此,我也希望通过自己的努力,为大家排除疑虑,尽自己所能,与大家共同进步,营造一个好的论坛环境!在这个新手的乐园里,共同探讨学习过程中的疑问.在TI杯,取得理想的成绩!
接下来切入正题吧,今天我要分享的内容源于斑竹的一个关于中断嵌套的帖子。其中有不少人认为斑竹的论述有误,持有怀疑的态度。对于大家质疑的精神,我并不否认。不过,斑竹建议的“程序验证”,不知大家可否有做过实验?很多时候,我们总是说的多,做的少,更多的喜欢别人验证给我们看。其实我们完全能通过自己动手,得到想要的答案。我将分享的程序,希望大家至少能懂得两点:1、理解好这个程序         2、平时多多实践,只有这样,我们才能学习的更好!
  1. /*   定时:LFXT1CLK作为ALCK的时钟源,频率:32768HZ   */
  2. #include  <msp430x14x.h>
  3. void delay(unsigned int x)
  4. {
  5.   unsigned int i,j;
  6.   for(i=x;i>0;i--)
  7.      for(j=1000;j>0;j--);
  8. }

  9. void main(void)
  10. {   
  11.     WDTCTL = WDTPW + WDTHOLD;      
  12. //TIMER_A相关设置
  13.     CCTL0 = CCIE;                  
  14. //    CCR0 = 2047;                    //设定周期0.5S
  15.     CCR0=60000;
  16.     TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
  17.     P2DIR |=0xff;                   //设置P2方向为输出
  18.     P1DIR=0X00;
  19.     P1IES=0xff;
  20.     P1IE=0XFF;
  21.     _EINT();                        //使能全局中断   
  22.     while(1)
  23.     {
  24.       P2OUT=0XFF;
  25.     }
  26. }

  27. #pragma vector = TIMERA0_VECTOR
  28. __interrupt void Timer_A (void)
  29. {  
  30.    _EINT();
  31.    P2OUT=0XFD;
  32.    delay(1000);
  33. }

  34. #pragma vector=PORT1_VECTOR
  35. __interrupt void timer()
  36. {
  37.   unsigned char temp;
  38.   if((P1IFG&0X0F)!=0X0F)
  39.   {
  40.     temp=P1IFG;
  41.     switch(temp)
  42.     {
  43.     case 1 :P2OUT=0XEF;break;
  44.     case 2  :P2OUT=0XDF;break;
  45.     case 4  :P2OUT=0XBF;break;
  46.     case 8  :P2OUT=0X7F;break;
  47.     }
  48.   }
  49.   delay(100);
  50.   P1IFG=0X00;
  51. }

复制代码
说明:此程序可用于验证“msp430中优先级低的中断是否能打断高优先级的中断”!
          首先我们可以查到:P1口的中断优先级比TIMERA0的要低。此程序main部分使led全灭,TA定时(>10s),产生中断,进入中断使P2.1的led亮,并且将维持一段时间,为了便于验证,我特意延时较长,差不多有5s。则有,led——亮,进入TA中断,led——灭,在main函数中。这时,我们只要在led刚亮的时候,按下按键触发P1口中断,导致led提前退出亮的状态,而点亮其他led,则证明P1中断打断了TA中断!否则,反之。

大家学习的过程中一定要多动手,实践才是检验真理的唯一标准。对于发帖,我觉得一个能帮大家排疑解难的贴,才是一个真正的好帖,我希望能得到大家的认可!大家亲手去验证一下它吧,甚至可以延伸性的验证自己其他的各种疑问!
回复

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 15:01 , Processed in 0.101009 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表