当我设置 CAP = 1时、我发现 TA0R 不会递增。
首先、我将 TA0与 TB1和 TB2一起设置、并将它们紧密地开始:
//将 P2.3配置为用于 TA0CCR0捕捉的 CCI0B 输入
P2SEL0 |= BIT3;
P2SEL1 &=~(BIT3);
P2DIR &=~(BIT3);
//将时基设置为从与其他所有内容相同的时钟源
TA0CTL |= TASSEL_ACLK | ID_8;
//将 TA0CCR0设置为:
// --在上升/下降沿进行捕捉(CM_3)
// --选择 CCI0B (P2.3)作为捕捉输入引脚
// --将捕捉与时钟同步(.SCS 位/位11)
// --启用捕捉模式(.cap 位/位8)=1
TA0CCTL0 |= CM_3 | CCIS_1 | BIT8 | BITB;
//完成所有配置后,启用 CCR0捕获中断
TA0CCTL0 |= CCIE;
我还配置 TB1/TB2 (仅显示时钟/计时器正在运行)
TB1CCR0 = 62500;
TB2CCR0 = 62500;
TB1CCTL0 |= CCIE;
TB2CCTL0 |= CCIE;
然后、我启动全部三个计时器 TA0、TB1、TB2:
//启动实际计时器...
TB2CTL = TBSSEL_ACLK | ID_8 | MC_UP;
TB1CTL = TBSSEL_ACLK | ID_8 | MC_UP;
TA0CTL = TASSEL_ACLK | ID_8 | MC__UP;
//然后将计时器重置为所有从0开始
TB2CTL |= TBCLR;
TB1CTL |= TBCLR;
TA0CTL |= TACLR;
当我在调试环境中观察 TA0CTL 和 TA0CCTL0时、一切设置似乎都正确、就像在我的代码中一样:
看起来 TA0R 永远不会递增! 当 TACTL0配置正确时、我无法弄清这是为什么。 为了显示 ACLK 和 TB1/TB2正在运行:
当我向 P2.3/CCI0B 输入脉冲时、中断被触发、程序进入 ISR、我可以告诉它进入 ISR、因为我在其中放置了一个断点:
#pragma vector = TIMER0_A0_VECTOR
__INTERRUPT void Timer0_A0_ISR (void)
{
__no_operation();//此行上的断点
myBufferValue = TA0CCR0;
}
但是、由于 TA0R 永远不会递增、因此 myBufferValue 的值 始终为零。
我在这里出了什么问题? 为什么尽管选择了 UP_MODE、TA0R 也不会递增? 根据 TA0CTL/TA0CCTL0中的状态位、它看起来是按照手册进行配置的。

