首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IEEE1588PTP时钟源在STM32H743中的实现

IEEE1588PTP时钟源在STM32H743中的实现
EN

Stack Overflow用户
提问于 2020-04-16 19:19:10
回答 1查看 597关注 0票数 0

我正在尝试获取STM32H743 Nucleo板上的PTP时间戳。到目前为止,除了PTP之外,LwIP和以太网驱动程序都没有问题。我遵循了参考手册(RM0433)上的说明( 58.9.7 IEEE 1588 timestamping编程指南),如下所示。

代码语言:javascript
运行
复制
  CLEAR_BIT(heth->Instance->MACIER, ETH_MACIER_TSIE);
  SET_BIT(heth->Instance->MACTSCR, ETH_MACTSCR_TSENA);
  WRITE_REG(heth->Instance->MACSSIR, 20);
  WRITE_REG(heth->Instance->MACTSAR, 894784853);    // 2^63 / 20 / 480M
  SET_BIT(heth->Instance->MACTSCR, ETH_MACTSCR_TSADDREG);
  while(READ_BIT(heth->Instance->MACTSCR, ETH_MACTSCR_TSADDREG));
  SET_BIT(heth->Instance->MACTSCR, ETH_MACTSCR_TSCFUPDT);
  WRITE_REG(heth->Instance->MACSTSUR, 0x01);
  WRITE_REG(heth->Instance->MACSTNUR, 0x02);
  SET_BIT(heth->Instance->MACTSCR, ETH_MACTSCR_TSINIT); // If one-step timestamping is required follow reference manual
  // TODO: configure pps

但是,系统时间秒寄存器(ETH_MACSTSR)不计数,仅在系统时间秒更新寄存器(ETH_MACSTSUR)中加载初始值。在参考手册中,没有关于PTP时钟源的明确信息。在STM32F7中,有一个用于PTP的时钟路径,如CubeMX时钟配置页面中的下图所示。

但是,在STM32H7中没有用于PTP的时钟路径,如下图所示。

我是否遗漏了从寄存器ETH_MACSTSRETH_MACSTNR获取系统时间的内容

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-18 16:00:54

问题出在Sub-second increment register (ETH_MACSSIR)。要递增的值存储在寄存器的high word中,如下图所示。因此,该值必须移位16。

当按如下所示更改该值时,一切都按预期运行。

代码语言:javascript
运行
复制
WRITE_REG(heth->Instance->MACSSIR, ((uint32_t)20)<<16);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61248948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档