TI中文支持网
TI专业的中文技术问题搜集分享网站

2812定时器中断函数的问题

2812中断问题

     各位大虾,帮我解决一下小疑问吧?谢谢啦! 我今天发现定时器中断一个小问题,当定时器中断时间到时,进入中断,然后运行中断程序,此时我在中断程序里面放置了全局数组 string1[num] (之所以说是全局数组,是因为我在main函数的最后while(1)死循环里面也要用它)。以我以前的了解,进入中断程序,只会运行一次中断程序,然后再返回到 main中的 while(1)死循环里面,可现在的问题是我觉得进入中断程序后运行了好几次中断程序,不知道为什么?

     或许这样讲,大家看文字不如看代码,我把我的程序简单贴上来,大家帮我分析一下吧,谢谢啦……

  interrupt void  TINT0_ISR(void)      // CPU-Timer 0

 {

   DINT;

  CpuTimer0Regs.TCR.bit.TIF=1;//clear 中断标志

  StopCpuTimer0();

          number2++;        //此为全局变量,在main函数中同样可以调用

          string1[number2]='a';//给当前数组第number2中赋值'a'

          if(number2>=100)

          {

          number2=0;

          }

  ReloadCpuTimer0();

  StartCpuTimer0();

  PieCtrlRegs.PIEACK.bit.ACK1 = 1;

  EINT;

 }

下面是main函数的while(1)死循环里面的函数

while(1)

{

          number2++;        //此为全局变量,在main函数中同样可以调用

          string1[number2]='b';//给当前数组第number2中赋值'a'

          if(number2>=100)

          {

          number2=0;

          }

}

      我初步设计思路是,按照中断含义,数组string1的内容是  b…bab…bab..b 就是说每次b和b之间只会出现一次a,而b会出现多次,因为等待定时器的同时while(1)或许执行很多次,而中断程序只能执行一次。  可是实际的结果不是这样,实际的结果,a也会连续出现好几次,即类似于b..ba..ab..b,这是为什么呢?

      请高手指点,谢谢啦!!

Jones Chen:

您好!

请参考TI的C2000 Cpu Timer的历程。

谢谢!

2812中断问题

     各位大虾,帮我解决一下小疑问吧?谢谢啦! 我今天发现定时器中断一个小问题,当定时器中断时间到时,进入中断,然后运行中断程序,此时我在中断程序里面放置了全局数组 string1[num] (之所以说是全局数组,是因为我在main函数的最后while(1)死循环里面也要用它)。以我以前的了解,进入中断程序,只会运行一次中断程序,然后再返回到 main中的 while(1)死循环里面,可现在的问题是我觉得进入中断程序后运行了好几次中断程序,不知道为什么?

     或许这样讲,大家看文字不如看代码,我把我的程序简单贴上来,大家帮我分析一下吧,谢谢啦……

  interrupt void  TINT0_ISR(void)      // CPU-Timer 0

 {

   DINT;

  CpuTimer0Regs.TCR.bit.TIF=1;//clear 中断标志

  StopCpuTimer0();

          number2++;        //此为全局变量,在main函数中同样可以调用

          string1[number2]='a';//给当前数组第number2中赋值'a'

          if(number2>=100)

          {

          number2=0;

          }

  ReloadCpuTimer0();

  StartCpuTimer0();

  PieCtrlRegs.PIEACK.bit.ACK1 = 1;

  EINT;

 }

下面是main函数的while(1)死循环里面的函数

while(1)

{

          number2++;        //此为全局变量,在main函数中同样可以调用

          string1[number2]='b';//给当前数组第number2中赋值'a'

          if(number2>=100)

          {

          number2=0;

          }

}

      我初步设计思路是,按照中断含义,数组string1的内容是  b…bab…bab..b 就是说每次b和b之间只会出现一次a,而b会出现多次,因为等待定时器的同时while(1)或许执行很多次,而中断程序只能执行一次。  可是实际的结果不是这样,实际的结果,a也会连续出现好几次,即类似于b..ba..ab..b,这是为什么呢?

      请高手指点,谢谢啦!!

Jay:

楼主的设计的思路中只开了一个100大小的数组来循环储存‘a'或者'b',每当指针移动到最后一个元素时并没有清空数组。这样,程序的运行中具有以下风险。比如,某次进入定时中断后a[x]被赋值成'a',退出中断后进入主循环从x+1开始赋值'b',而在这之后的第N次进入中断,此时的数据指针,也就是number2刚好等于'x-1',那么进入中断后a[x-1]就会赋值成'a'。那么,您将看到数组中会出现两个连续的'a',即a[x-1]='a', a[x]='a'。不过这种概率很小,与定时时间有一定关系,且不会出现两个以上连续的'a'。

如果楼主的运行结果中出现了两个以上连续的'a'或者出现两个连续'a'的频率很高的话,请提供更详细的代码或检查定时器设置。

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 2812定时器中断函数的问题
分享到: 更多 (0)