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.

[参考译文] TMS320F28379D:什么是清除 QEPSTS。 eQEP 模块中的 UPEVNT?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1435355/tms320f28379d-what-is-clearing-qepsts-upevnt-in-eqep-module

器件型号:TMS320F28379D

工具与软件:

您好!

我将编写代码、以从 F28379D 处理器上的编码器读取电机位置和速度信息。

我想验证 QEPSTS 寄存器中 UPEVNT 标志的功能。

我知道此标志是由 eQEP 外设在发生可配置数量的 QCLK 事件后设置的、其中 QCLK 事件 表示在任一编码器通道上检测到边沿。

UPEVNT 标志状态的说明:

单元位置事件标志

复位类型:SYSRSn

0h (R/W)=未检测到单元位置事件

1h (R/W)=检测到单元位置事件。 写入1以清零。

这似乎意味着、一旦置位、UPEVNT 标志将保持置位状态、直到软件将1写入该标志以将其清零。

然而、在我的当前软件中、我没有写入该标志、但可以通过调试器看到它定期复位。

那么、我的问题是、什么会复位该标志?

谢谢。

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

    尊敬的 Stephen:

    将状态寄存器中的 UPEVNT 位清零的唯一机制是:对该位执行写操作、或通过 QPEN 位复位 eQEP 模块。 您能否仔细检查实施情况、看看您是否正在执行其中的任何操作。 我还会检查您是如何读取和写入状态寄存器中的其他位的。 您可能会意外地写入寄存器中的多个位、或者完全写入寄存器(而不是仅仅是单个位)

    此致、

    Peter

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

    我不认为我写的 UPEVNT 标志直接在任何地方。  

    我将使用以下代码复位同一寄存器中的 COEF 标志:

    EQep1Regs.QEPSTS.bit.COEF = 1;  /*通过向其写入1来清除计数器溢出标志*/

    是否会以某种方式写入整个寄存器?

    我同时使用以下代码读取 UPEVNT 标志:

    if (EQep1Regs.QEPSTS.bit.UPEVNT == 1)

    但据我所知、读取寄存器或标志应该不会影响寄存器内容。

    谢谢!
    Steve

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

    我注释掉了此行:

    EQep1Regs.QEPSTS.bit.COEF = 1;  /*通过向其写入1来清除计数器溢出标志*/

    因此、现在没有写入 QEPSTS 寄存器、UPEVNT 标志也不复位。 上面这一行似乎是导致复位的、我想这意味着要写入整个寄存器。 我不知道为什么会这样。

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

    尊敬的 Stephen:  

    当您使用该代码行清除计数器溢出标志时、COEF 和 UPEVNT 位是否都被复位? 您使用的是哪个版本的 SDK?

    此致、

    Peter