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.

[参考译文] TMS570LC4357:HALCoGen HET CAP 功能的详细信息

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/602854/tms570lc4357-details-on-halcogen-het-cap-functions

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我们正在研究使用 N2HET 引脚通过使用 HALCoGen 生成 CAP 代码来测量脉冲序列。

HALCoGen 可以生成"capGetSignal()函数、该函数"获取给定捕捉信号的当前信号"。  (要求我们已经使用 HALCoGen 将我们选择的引脚映射到 HET 电容器块。)

此函数报告"占空比、单位为%"和"周期、单位为 us"。

我假设这是报告最近捕获的单个完整周期的数据、这是正确的吗?  (例如、基础 HET 微机器码在多个周期的时间段内不执行任何平均值计算。)

capGetSignal()正在对 HET RAM 中的数据执行两次连续读取。  我们是否应该注意到任何原子性问题、其中 HET 微机可能会在读取它们的同时更新其中一个或两个、从而导致我们获得无效数据?

执行这些读取是否会产生副作用?  (读取它们是否会以任何方式复位它们?)

capGetSignal()正在使用从 HET RAM 中读取的值作为除数执行除法运算,但不首先确认该值为非零值。  在调用 capGetSignal()之前,我们可以做些什么来确保不会出现错误?

-thx

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

    您好!

    HALCoGen 生成的捕获代码使用 PCNT 指令来捕获输入信号的高/低脉冲时间或周期。 PCNT 不会在多个周期的时间段内进行任何平均值计算。

    读取 NHET RAM 与从寄存器中读取值相似。 读取占空比和读取周期不同步、可能处于不同的 LR 环路中。
    NHET 指令具有一个特性、此特性使得能够在数据字段被主机 CPU 或 DMA 读取后立即自动清零数据字段。 此特性使能控制位(位 C26)。

    如果 PCNT 被配置为自动读清零、那么当 CPU 读取 PCNT 数据字段 时、它将被自动清零。 然后 CPU 可以再次轮询 PCNT 数据字段、只要该字段返回零值、主机 CPU 程序就会知道没有发生新的捕获事件。 如果未清除数据字段、CPU 将无法确定数据字段是保存来自前一捕获事件的数据、还是它碰巧是来自具有相同值的新捕获事件的数据。

    当 NHET 模块被启用时、NHET RAM 中的微代码开始执行、并且 PCNT 开始捕捉输入信号的边沿。 如果输入信号的周期非常长、并且您在 THYE NHET 模块被启用后立即读取周期值、那么您可能会得到一个零周期值。 对于这种特殊情况,您需要修改代码(capGetSignal()),以确保该周期不等于零个执行除法的边核。 另一种方法是使用 PCNT 指令的中断功能。

    此致、

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

    感谢您的跟进!

    因此,您已经确定了两种情况,在这两种情况下,如果我们在错误的时间调用 capGetSignal(),则 HET RAM 中存储的周期可能为零,从而导致零除问题:

    1) 1)由于控制位 C26被置位、在一个早期读取期间数据字段被自动清零。
    2) 2)尚未捕获任何期间。

    是否还有其他情况下周期可以为0? 脉冲是否可能足够长、以至于被微代码注意和捕获、但又足够短、以至于其值存储为0?

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

    如果 NHET 时钟为100MHz、最高分辨率为10ns。 脉冲不应太短。 您需要确保 PCNT 数据字段中的数据已准备就绪、然后才能读取数据。

    1不是问题、如果数据字段不为零、则在自动清除数据字段之前会得到非零值。

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

    您说的是、如果脉冲小于(或等于?) 在 LR 周期中,HALCoGen 黑盒 HET CAP 代码根本不会捕获它,如果脉冲长于 LR 周期,则 capGetSignal()中读取的 pwmPeriod 将大于零?

    -thx