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.

[参考译文] MSP430FR4133:有助于了解计时器中断命名规则

Guru**** 2589275 points
Other Parts Discussed in Thread: MSP-EXP430FR4133

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/627837/msp430fr4133-help-understanding-the-timer-interrupt-nomenclature

器件型号:MSP430FR4133
主题中讨论的其他器件:MSP-EXP430FR4133

大家好、

我正在尝试学习如何使用 MSP-EXP430FR4133开发板上的计时器、但我很难理解计时器及其中断的命名规则。

根据产品特定数据表、 我看到这个特定的芯 片有"两个16位定时器、每个定时器有3个捕捉/比较寄存器(Timer_A3)"、所以我认为这个名称意味着"Timer_A3"是 TI 为 Timer_A 的特定变体指定的名称、而 Timer_A 恰好有3个捕捉/比较寄存器。  到目前为止、相当简单...

现在、我参考"MSP430FR4xx 和 MSP430FR2xx 系列用户指南"、其中指出"在给定的器件上可能存在多个 Timer_A 实例。 使用前缀 TAx、其中 x 大于等于零、表示 Timer_A 实例化。 对于具有一个实例化的器件、x = 0。 后缀 n、其中 n = 0至6、代表与 Timer_A 实例关联的特定捕捉/比较寄存器。"  

因此、这将使我相信我的两个计时器称为 TA0和 TA1。 是这样吗?

我感到困惑的是、当我尝试理解中断矢量的命名时... 我已获得以下示例代码、该代码在器件上按预期运行。

#include
#include

易失性 bool TimerA0_CCR0_INTERRUPT_HIT = 0;
volatile unsigned int TimerA0_period = 16000;


#pragma vector = TIMER0_A0_VECTOR //计时器 A0中断 ISR
_interrupt void TIMERA0_ISR0 (void)

TimerA0_CCR0_INTERRUPT_HIT=1;//在 A0中断命中时、设置标志

#pragma vector = TIMER0_A1_vector //计时器 A1中断 ISR
_interrupt void TIMERA0_ISR1 (void)

switch (__evo_in_range (TA0IV、10))//清除标志

;//未使用

在这里、我们看到计时器0被称为 TIMER0_A0_VECTOR。 这个"A"是从哪里来的、为什么它不是"A3"?

此外、据我了解、 上述 TIMERERA0_ISR0 (void)仅由计时器 TA0的捕捉/比较中断触发。 此外、 TIMERA0_ISR1 (void)由源自 TA0的任何其他中断触发、在本例中、我对此不感兴趣、因为我只需使用 c/c 中断来使 LED 闪烁。 我对此的理解是否正确?

很抱歉这个冗长的帖子。 我想我理解这些概念、但我真的很难理解中断矢量名称的复杂性。

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

    这两个定时器模块可以被称为 TA0/TA1或 Timer0_A3/Timer1_A3或 Timer_A0/Timer_A1。

    "A"表示定时器硬件的类型;其他芯片也可以有"B"或"D"定时器。

    至于中断矢量符号、由于历史原因、它们的名称结构略有不同;最好不要试图理解它们、而是通过头文件中的描述来查找它们(此处为 gcc):

    #define Timer1_A1_vector (54) /* 0xFFF2 Timer1_A3 CC1-2、TA */
    #define Timer1_A0_vector (55) /* 0xFFF4 Timer1_A3 cC0 */
    #define TIMER0_A1_Vector (56) /* 0xFFF6 Timer0_A3 CC1-2、TA */
    #define TIMER0_A0_VECTOR (57) /* 0xFFE8 Timer0_A3 cC0 */ 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢这位 Clemens、我当时正努力加入各种数据表和用户指南之间的差异。 向量的命名导致了我的一些困惑、我开始怀疑某些传统命名可能正在使用中。

    我对两个中断矢量如何交互的理解是否正确? 即:

    #pragma vector = TIMER0_A0_vector 

     是最高优先级的中断、由 TA0上的一个 c/c 事件触发

    并且:

    #pragma vector = TIMER0_A1_vector //计时器 A1中断 ISR
    
    __interrupt void TIMERRA0_ISR1 (void)
    
    {
    
    switch (_even_in_range (TA0IV、10))//清除标志
    
    {
    
    ;//未使用
    
    } 

    是同一个定时器触发的较低优先级中断、我们使用 switch 语句在各种中断情况/标志之间切换。

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