This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5739:当 TA0CCTL0设置为捕获模式时、TA0R 不会递增

Guru**** 2524550 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/832917/msp430fr5739-ta0r-does-not-increment-when-ta0cctl0-is-set-to-capture-mode

器件型号:MSP430FR5739

当我设置 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中的状态位、它看起来是按照手册进行配置的。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当 TA0CCR0=0时、您以向上计数模式运行 TA0、因此它不能递增到0以上。

    尝试将 TA0CCR0设置为非0值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这就是问题、Bruce。   
    在我的应用中、当器件处于不同的工作模式时、我将 TA0用于比较和捕捉。  
    在比较中、我必须使用 MC__UP 模式。    
    在捕获中、我是事件之间的时序、因此我可以在任何方面使用 MC__Continuous.   

    感谢您的回答。