对定时器连续计数模式的不理解,请老师们指教!

楼主
对定时器连续计数模式的不理解,请老师们指教!
刚入手430,对定时器诸多不解

增计数模式好理解 计数到TCCR0,CCIFG置位,之后+1 回到0 TAIFG置位,进入
#pragma vector=TIMERA0_VECTOR
   __interrupt void Timer_A0 (void)  

但是在边续模式下,不理解,,,计数从0----FFFF,然后+1 回到0  TAIFG置位,,,也这就是这只要时钟固定了,这个定时时间是不变的,也就是每次进入中断的时间是不变的,

看示例程序为什么还要设置TCCR0,又有什么意义呢..0 计数到 TCCRO,只是产生一个比较中断,又不能进入定时中断,,,,不明白这个TCCR0是什么意思在这
//***********************************************************************
设MCLK=SMCLK=TACLK=DCO=800K,将P1.0每隔50000个DCO周期取反,产生16HZ方波

#include <msp430x20x3.h>
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL_2 + MC_2;                  // 连续计数模式
  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= 0x01;                            // Toggle P1.0
  CCR0 += 50000;                            // Add Offset to CCR0 ////////////
}


问题1:怎么产生16HZ方波呢,,,,,这是定时器中断呀,并不是比较中断呀,只有计数到了65536才进入中断,才取反的呀??

问题2:CCR0 += 50000; 溢出了??? 是否是进入中断后CCR0=0了,。然后再付值

问题3:计数器是否是从 当前值50000,然后继续计数--FFFF,回到0,,那它怎么产生的相同的时间间隔呢。明明多了个65536-50000的时间呀!!


最近被它搞的很郁闷,难道它是从0---50000,进入中断,然后因为 CCR0 += 50000,再计数50000个,那这样的话就和增计数模式一样了吗?,,那计到FFFF清0,有什么意思呢???越搞越糊涂
1楼
哎,来个直观比意吧~
比如计数器最大为10,比如初值为6,上面的程序中断处+6;也就是在中断间隔为6。那么将会在
6,2,8,4,10,6,2,8,....就会这些数值中断;每次中断中+6;这个6是偏移量。
2楼
DC老师呀,,,,你的这个意思我理解,我上面也说了,难不成它还有记忆功能,

但它进入中断的条件是由0到FFFF,要计数满了才进中断的呀,,,按你比方,,,,初值6  加到10 进入中断,然后再+6的呀..第一个即使加到6,它也进不了中断呀.


那我要是实现 偏移量为4的的呢,不是不行吗,,4 8 都小于10,都进不了中断的呀 

头大!!
3楼
那个终端向量可能不是溢出中断的向量,是比较中断,你查下手册,溢出中断应该和CCR1,CCR2共一个终端向量,但终端标志不一样。比较中断就跟DC说的原理一样,比较参数是连续加的。
4楼
头文件中注释 TIMERA0只能产生CCR0的中断
#define TIMERA1_VECTOR      (5 * 2u)  /* 0xFFEA Timer A CC1-2, TA */
#define TIMERA0_VECTOR      (6 * 2u)  /* 0xFFEC Timer A CC0 */

连续模式不占用捕获比较寄存器 CCR0 但是可以通过CCR0进入中段 此时不使用 TAIFG 若使用TAIFG 需在中段函数中 使用中断向量表判断 并且 必须是TIMERA1_VECTOR中断

电脑版 Page created in 0.1562 seconds width 3 queries.