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.

[参考译文] MSP-EXP430FR2433:关于捕获定时器相关问题的咨询

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027499/msp-exp430fr2433-consultation-on-capture-timer-related-issues

器件型号:MSP-EXP430FR2433

大家好、我们正在尝试使用16MHz SMCLK 配置来调试捕获计时器、目前我们需要捕获 us 级别的低电平持续时间。
但目前有以下两个问题、我想请您帮助确认:
1. CS 的相关配置(sys_cs_init)是否正常、尤其是代码中的 CS_MCLK_FLLREF_Ratio 参数。
2.捕获中断中的 elapsedTime 计算方法是否正确,单位是 us.e2e.ti.com/.../PUMA_2D00_MCU_2D00_test.zip

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

    您好、周 GE

    我们提供 了有关 MSP430FR2xx 和 MSP430FR4xx DCO+FLL 应用指南的应用手册。 希望这对问题1有所帮助。

    谢谢!

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

    您好、可以帮助验证附件中的项目吗? 看看是否可以捕获 US 电平的低电平持续时间?

    [引用 userid="495676" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027499/msp-exp430fr2433-consultation-on-capture-timer-related-issues ]PUMA-MCU-test.zip[/quot]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这看起来与这里的线程非常相似:

    https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027447/msp-exp430fr2433-msp-exp430fr2433

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027499/msp-exp430fr2433-consultation-on-capture-timer-related-issues/3799788 #3799788"]

    这看起来与这里的线程非常相似:

    https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027447/msp-exp430fr2433-msp-exp430fr2433

    [/报价]

    大家好 

    这似乎与我先前提到的情况相同,包括问题和附件。 我想请您帮助确认捕获是否可以使用当前 CS 配置捕获"us"的低电平持续时间。 谢谢。

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

    我们需要测试300us 的持续时间、我们预计误差不会超过30us

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

    计时器捕捉对计时器的分辨率是准确的。

    如果我可以建议、我会在这里看到两种危险:

    1) 1)从0开始(使用 TACLR)的技术会在启动时间中引入软件延迟、因此 CPU 达到 TACLR 设置所需的时间会是错误的。 您应该使用在 CCR1中捕获的值、该值是正确的

    2) 2)计数溢出在大多数时间都有效、但易受角/竞态条件的影响。 在您的应用中、您无需这样做。

    因此我建议您:

    a)请勿在前导(下降)边沿使用 TACLR、只需记录捕获的(TA0CCR1)值即可。 在后沿(上升沿)、从(新) TA0CCR1值中减去该值。 无符号减法的规则将为您提供正确的结果、即使 TA0R 在两者之间"换行"为0也是如此。

    b)通过设置 Id=3将定时器时钟除以/8。 那么 您的分辨率为0.5 μ s、但您的最大周期为32毫秒以上;(看起来在原始代码所期望的范围内)、并且不需要计数溢出。

    如果您担心超时(我总是)、以下是一种方法:

    c)采用第二个 CCR (例如 TA0CCR2)并设置其 CCIE。 在前缘、将 TA0CCR1存储到 TA0CCR2中。 如果您从 TA0CCR2获得比较匹配(CCIFG)、TA0R 为全圆(32ms)、因此您已超时。 然后、您可以采取补救措施(可能只是扔掉该读数)。

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

    很抱歉、我对您提到的修改配置不是很清楚。 您可以修改之前上传的代码并进行解释吗?

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027499/msp-exp430fr2433-consultation-on-capture-timer-related-issues/3799927 #3799927]1)从0开始的技术(使用 TACLR)会将软件延迟引入到启动时间中,因此 CPU 达到 TACLR 设置所需的时间是错误的。 您应该使用在 CCR1中捕获的值、该值是正确的

    目前、中断中的 EndTime 使用 TA0CCR1。 同时、我仍然不理解您对 TACLR 的看法。

    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027499/msp-exp430fr2433-consultation-on-capture-timer-related-issues/3799927 #3799927"]B)通过设置 ID=3将计时器时钟除以/8。 然后 、您的分辨率为0.5 μ s、但您的最大周期为32毫秒以上;(看起来在原始代码所期望的范围内)、并且不需要对溢出进行计数。

    关于此修改、我还可以将16MHz 更改为2MHz 吗? 这是否相同?在本例中、如果我们要捕获15.6ms、则无需考虑溢出情况。

    在此、我想解释一下、我们需要捕获以下三个数据:15.6ms、330us 和670us。

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

    a) i)替换

    >StartTime = 0;//重置计时器变量和 CCR2,以连续模式启动计时器
    >TA0CCR1 = 0;
    >TA0CTL |= TACLR | MC_2;

    使用

    >StartTime = TA0CCR1;//捕捉前沿
    >TA0CCR2 = StartTime; //保存以进行超时检查;

    (二)和替换

    > elapsedTime =(4096*溢出计数器)+(EndTime/16);

    使用

    > elapsedTime =(EndTime - StartTime)/2; //用微秒表示的低周期

    (三)并加上

    >案例 TA0IV_TACCR2://超时

    >edgeFlag = 0;  //未解决--重新开始
    >中断;//

    ----

    b)是的、如果您不需要 CPU (MCLK)以16MHz 运行、则可以将 MCLK/SMCLK 降低至2MHz 并获得相同的结果。

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

    大家好、我有一个问题要确认、宏控制参数 CS_MCLK_FLLREF_Ratio 的计算是否正确? 16000000 / 32768≈488。
    此参数是否正确用作 CS_initFLLCalculateTrim 函数的比率参数?
    如果不正确、应如何计算?

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

    主要原因是我尝试使用当前配置测试睡眠1。 它似乎不准确。 我尝试调用 Mg_sleep 接口进行测试。

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

    您是如何测试的? 您得到了什么结果?

    488是正确的值。 它成为 CSCTL2:FLLN (driverlib 函数为您执行-1)。

    正如我在另一个线程中提到的、我获取了您的代码并将 SMCLK 输出到引脚上。 我的示波器的测量值为15.9-16.1 MHz (这是一个平庸的示波器)。 这告诉我、所有呼叫的最终结果都符合预期。

    我在另一个线程中提到的另一点是、我无法使您的项目(如发布的那样)正常工作、因此我创建了一个新项目并将 main.c 复制到其中。 您可能希望执行同样的操作、因为您的项目可能会有一些奇怪的设置、会妨碍您的工作。

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

    大家好、我使用以下定义
    #define mg/sleep __delay_cycles (16000000*s)
    我尝试在主函数中添加一个 while (1)循环、调用 Mg_sleep 接口、在1S 中翻转 P1.0引脚一次、然后使用示波器测试 P1.0引脚的波形。但测试情况周期不会每1S 改变一次。

    +#define mg_sleep(s)  __delay_cycles(16000000*s)
    
    int main(void) {
    
    +   GPIO_setAsOutputPin(
    +       GPIO_PORT_P1,
    +       GPIO_PIN0
    +   );
    +   while(1)
    +   {
    +       GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
    +       mg_sleep(1);//sleep 1s
    +   }
    }

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

    大家好、我检查了代码、发现睡眠不准确的原因是我们的代码中配置了与 ADC 相关的配置。 这部分代码包含 SMCLK 的配置。 在屏蔽 ADC_init 接口后、Sleep 1S 是正常的、但我们的项目也需要 ADC 多通道采样功能。 您能提供一些建议吗? 看看 ADC 中 TA1的配置是否需要进行一些修改?

    请参阅附件以了解代码工程

    e2e.ti.com/.../8015.PUMA_2D00_MCU_2D00_test.zip

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

    由于这是一个新问题、我建议您创建一个新主题。

    下周之前、我将无法提供帮助

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

    好的,我将创建一个新问题。

    谢谢。