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.

[参考译文] MSP430FR2433:2个计时器之间的相位模糊性

Guru**** 2544700 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1044872/msp430fr2433-phase-ambiguity-between-2-timers

器件型号:MSP430FR2433

观察结果:使用 Timer0_A3和 Timer1_A3时、均由 SMCLK 驱动、观察到2个输出的相位关系并不总是恒定的、例如由电源中断引起的。

目的解决方案:使用 Timer0_A3输出作为 Timer1_A3的输入。

问题是了解如何执行此操作。  系列指南13.2.1.1指示"定时器时钟可以来自 ACLK、SMCLK 或外部来自 TAxCLK 或 INCLK。" 如图1-6所示。  我不清楚提供内部或外部连接的代码。

例如、我有用于驱动 P1.1的 Timer0_A3的工作代码、如下所示

   到 P1.1的//设置硬件时钟输出
   TA0CCR0 =(16*8)-1;                                               // PWM 周期
   TA0CCTL1 = OUTMOD_7;                               // CCR1复位/置位
   TA0CCR1 = 16*4;                                         // CCR1 PWM 占空比
   TA0CTL = tassel_SMCLK | MC__UP | TACLR; // SMCLK、向上计数模式、清除 TAR

然后、第二部分将 Timer0_A3输出连接到 Timer1_A3输入、并根据 Timer1_A3 (不起作用)产生中断。 我认为我对建立计时器内部或外部连接的代码缺乏了解。  如果我仅限于外部连接、我可以控制哪个引脚吗? 或者、如 MSP430FR3422数据表的表6-12所示、它可能仅限于 P1.6

   //设置中断来控制开/关时序
   TA1CCTL0 = CCIE;                                                   //启用 TACCR0中断
   TA1CCR0 =(16*200)-1;                                                                   //周期
   TA1CTL = tassel_TACLK | ID_8 | MC__Continous;       //设置外部输入、/8
   //TA1CTL = tassel__INCLK | ID_8 | MC__Continous;       //设置内部输入、/8

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

    在您的问题陈述("观察")中、您是否说对于两个单独(完全配置)的计时器:(a)输出彼此异相、或(b)两个输出之间的相位关系随时间变化? (a)或多或少是预期行为、因为在同一时间(模周期周期)启动两个计时器并不容易。 我认为我从未观察到(b)。

    在解决方案中、您似乎级联了两个计时器、即一个计时器相当于第二个计时器的预分频器。 MSP430不提供内部通道来实现此目的、您需要在 TA0.1 (P1.1)至 TA1CLK (P1.6)之间运行一条接线。 当我完成此操作时、它按预期运行。

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

    这些计时器的配置不相同。  例如、第一个可能是4us、而第二个可能是200us。 原始时钟为16MHz。 由于如果一个时钟周期在一个分频器中丢失、这两个时钟都从16MHz 分频、因此这两个时钟之间的关系会发生变化。  除非受到干扰、否则关系通常是恒定的。

    我尝试从 P1.1到 P1.6进行外部连接、但这似乎还不够、因为我没有收到中断。 我想我在将 P1.6配置为 TA1CLK 的代码中缺少一些简单的东西、或者这是自动的吗?

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

    啊,发现了问题。 我失踪了:

    P1SEL1 |= BIT6;

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

    要将 P1.1配置为 TA0.1、您需要 PSEL=10和 DIR=1。 对于 TA1CLK、它的 PSEL=10且 DIR=0。 [参考数据表(SLASE59D)表6-17.

    我的算术是期望第一个 TA1CCR0中断在(16*8*8*16*200) SMCLK 周期(SMCLK=1MHz 时大约为3.2秒)。 之后(16*8*8*65536) SMCLK 周期(在 SMCLK=1MHz 时大约67秒)。