0

我正在尝试获取PTP时间戳STM32H743 NucleoLwIP到目前为止,以太网驱动程序没有问题,除了PTP. IEEE 1588 timestamping我遵循了参考手册 ( ) 上的说明 ( 58.9.7 Programming Guidelines for ) RM0433,如下所示。

  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的时钟路径。PTPCubeMX

在此处输入图像描述

但是,如下图所示, PTPin没有时钟路径。STM32H7

在此处输入图像描述

我是否遗漏了一些关于从寄存器中获取系统时间的ETH_MACSTSR信息ETH_MACSTNR

4

1 回答 1

0

问题来自Sub-second increment register (ETH_MACSSIR). 要递增的值存储在high word寄存器中,如下图所示。所以该值必须移动 16。

在此处输入图像描述

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

WRITE_REG(heth->Instance->MACSSIR, ((uint32_t)20)<<16);
于 2020-04-18T08:00:54.287 回答