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.

[参考译文] MSP430FR2155:计时器 CCR0中断失败

Guru**** 2451970 points
Other Parts Discussed in Thread: MSP430FR2155

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1479510/msp430fr2155-timer-ccr0-interrupt-fail

器件型号:MSP430FR2155

工具与软件:

尊敬的专家:

我的客户正在 MSP430FR2155上测试 timer_b_ex1_continuousModeCCR0

他发现、如果将计时器 CCR0的周期从 TB0设置为几微秒、将不会有 CCR0中断  

如果他将计时器 CCR0的周期设置为 毫秒、 CCR0中断是正常的。

对此问题有何建议?

谢谢!

LEO

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

    如何判断 CCR0中断始终不会触发? (ISR 中的断点? 发光二极管(LED)

    如果您将 COMPARE_VALUE 设置为小于(可能类似) 100的值、我会期望 CCR0中断大约每65ms 发生一次、因为截至 ISR 更新 CCR0值时、计数器已计数过此值、因此必须在达到(新)比较值之前循环。

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

    中断处理程序花费的时间是否比计时器周期长?

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

    看起来几乎可以肯定的是、计时器周期为微秒。 我想不出有充分的理由按该速率安排计时器中断。

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

    Bruce、您好!

    计时器中断触发间隔为50微秒(COMPARE_VALUE 为50)。 客户端在 ISR 中添加 IO 切换。 它无法捕获切换开关。

    谢谢

    LEO

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

    我在 FR2355 (Launchpad)上看不到这种行为。 我导入了示例并将(仅限) compare_value 更改为50、所看到的时间跨度约为62ms。

    探测 P1.0:

    我能够通过 compare_value=125获得一个较短的跨度(~120us)、从而了解 ISR 运行所需的时间。

    我能够使用 compare_value=25、将(整个) ISR 替换为:

        TB0CCR0 += COMPARE_VALUE;
        P1OUT ^= BIT0;
    

    我不确定我们的做法有何不同。

    [编辑:细微澄清。]

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

    Bruce、您好!

    感谢您的确认。

    我的客户报告他使用 API 解决了这个问题。 您能检查一下吗?

    谢谢!

    LEO

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

    此更改必须与 main()中的一项匹配:

      GPIO_setAsOutputPin(GPIO_PORT_P6, GPIO_PIN1);

    进行这两项更改时、我看到 COMPARE_VALUE=50 (~62ms)时的结果与上面的 P1.0相同。

    调整 COMPARE_VALUE 不会(本身)启用/禁用 P6.1输出。 基本示例是否有其他更改?

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

    Bruce、您好!

    您能否再次确认时间是 62ms 或62us?

    客户端希望将周期发送为50us。

    谢谢!

    LEO

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

    我这里没有我的设备、但上面的示波器迹线指示62ms (不是62us)[*]。 我的其他实验表明——用示例代码——你不会比大约120us (compare_value=125)更好[*]、因为这大约是 ISR 需要多长时间。 他们还建议了一种方法(不同的 ISR 编码),可以达到大约25us [*]。

    我没有遇到任何从未调用 ISR 的情况。

    更笼统地说:这里的目标是什么? 此示例说明了一个有趣但有点不寻常的情况: 假设您的设计需要使用连续模式、在 TBX.0上生成方波。 如果您可以改用向上计数模式+ TB0.1引脚、则可以使用该模式在硬件中生成可变占空比 PWM。 或者、如果您只想让占空比为50%、则可以将 OUTMOD=4与 TB0.0搭配使用。

    [*]它的测量值为62ms 而不是65ms (大概)、因为系统时钟运行速度稍快(未调谐)。  这些都假定您的系统中没有发生其他情况、而在实际应用中可能不会出现这种情况。

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

    Bruce、您好!

    我的客户使用此代码

        TB0CCR0 += COMPARE_VALUE;
        P1OUT ^= BIT0;

    他可以得到的最小周期为900us。

    更一般地说:这里的目标是什么?

    我的客户希望生成一个周期为50us 的串联中断。 因此、他尝试使用计时器生成 周期为50us 的串联中断

    谢谢!

    LEO  

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

    您能否发布您实际使用的代码? 我怀疑您发布的内容之外有一些相关代码。

    更笼统地说:在50us 的周期 ISR 中做一些有用的事情并不容易、尤其是当您希望系统做任何其他事情时。 您应该计划进一步加快 MCLK 速度。