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.

[参考译文] TM4C129XNCZAD:EMACTIMSTCTRL.TSUPDT 更新有限范围

Guru**** 2419530 points
Other Parts Discussed in Thread: TM4C129XNCZAD

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/660514/tm4c129xnczad-emactimstctrl-tsupdt-update-limited-range

器件型号:TM4C129XNCZAD

使用 EMACTimestampSysTimeUpdate()向硬件时间戳寄存器添加/减去偏移量,似乎在其运行的范围内受到限制,而不会出现 EMAC 接口故障。  如果

1) 1)添加、     被视为64位数字的更新大于0x00000000001fffll、或
2)减去、被视为64位数的更新大于0x001fffffffffffll、

更新操作会导致 EMAC 接口锁定。

如果此信息有用,EMACTimestampSysTimeSet()会显示大于0x3fffffffffffffffffll 的参数的锁定灵敏度。

EMACTimestampSysTimeUpdate()的正确功能对于该设计至关重要,因此我要寻找一种变通办法。  具体而言、我想知道时间戳更新与 EMAC 硬件本身之间是否存在某种相互依赖关系。  在更新时间戳时、也许需要暂时冻结 EMAC?  时间戳逻辑中是否存在已知错误?

如需记录、以下是更新代码:

           uint64_t =……

           EMACTimestampSysTimeUpdate()
             EMAC0_BASE、
             (uint32_t)(t >> 31)、
             (uint32_t)(t & EMAC_TIMNANO_TSSS_M)、
             false // t:减法、f:加法
           );

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Leo、
    不幸的是、EMAC 是我最不了解的外设、而 Charles 现在已离开办公室。 我会请他在明天回来时帮助我解决你的问题。 同时,您是否在对 EMACTimestampConfigSet()的调用中使用了 EMAC_TS_DIGITAL_ROLLOVER 或 EMAC_TS_BINARY_ROLLOVER?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    感谢您的快速响应! 我使用 EMAC_TS_BINARY_ROLLOVER。

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

    我修改了我的应用程序、以避免更新上述凭经验确定的范围。  当调整超出范围时,我使用 EMACTimestampSysTimeSet()直接写入时间戳。  这种粗略调整将错误减少到可以使用 EMACTimestampSysTimeUpdate()执行连续更新的程度。  我的应用应该能够容忍这种操作。  我们将看到。

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

    上述问题可能是由于我的错误假设造成的。  理想情况下、我的系统将以1纳秒为单位生成原始硬件时间戳作为二进制63位计数。  因此,我用40ns 的参数和 EMAC_TS_BINARY_ROLLOVER 调用 EMACTimestampConfigSet()。  然而、在 TM4C129XNCZAD 数据表中仔细查看时、我发现 EMACSUBECINC.SSINC 的说明不提供该替代方案。  在二进制模式中、在二进制模式中只描述了"~0.465ns"的分辨率。

    我在这里假设、在被禁二进制模式中、0.465 ~= 40/86 = 0.465116279069767441860……  猜测通过数据表可以在芯片上实现合理的逻辑实现、它看起来像是 EMACSUBTECINC.SSINC 每40ns 发生一次时间戳增量。  由于某种不明显的原因、EMAC 时间戳单元的其余部分需要~0.465ns 的分辨率才能正常运行。

    这在我的应用中是不可取的、因为需要64位除以86和乘以40才能将这些时间戳准确转换为二进制纳秒。  DMA 以250KHz 的速率捕获的时间戳必须转换为纳秒、相当于显著的处理器负载。  我还 需要调整时间戳以与主时基同步、并生成 PPS 输出、该输出是该时基中40纳秒间隔的二进制计数位19的副本。  如果更新硬件正常工作、正如上面的变通办法一样、同步要求是可以实现的、如果 PPS 硬件正常工作、那么在每次同步调整后、我应该能够计算 PPS 列车何时重新启动、 然后适当设置 PPS 硬件。  在当前方案中、我看不到 PPS 同步请求需要同步 PPS。

    如果在二进制模式下无法实现 EMACSUBECINC.SSINC=40的解决方案、我可以设想两种可能的方法来满足要求和硬件限制:

    1) 1)在二进制模式中将 EMACSUBECINC.SSINC 设置为1、并通过乘以40来执行时间戳转换。  此乘法可以通过两个移位和一个加法来完成:x*40 =(x+(x<2))<<3、这在64位数学中很便宜。  PPS 目标计算也很简单。  这种未记录的替代方法是计算成本最低的两种方法。

    2) 2) 数字模式下将 EMACSUBECINC.SSINC 设置为40、并通过32位乘法和64位加法来执行时间戳转换、从而将时间戳的两个32位片段合并为一个二进制结果。  PPS 目标计算更复杂、但可行。  这种有文件证明的替代方案更昂贵、但至少数据表表明它应该起作用。

    备选方案1是否起作用?

    谢谢、

    Leo