STM32H743 中的 IEEE 1588 PTP 时钟源
IEEE 1588 PTP Clock Source in STM32H743
我正在尝试在 STM32H743 Nucleo
板上获取 PTP
时间戳。到目前为止 LwIP
和以太网驱动程序没有问题,除了 PTP
。我按照参考手册(RM0433
)上的说明(58.9.7 IEEE 1588 timestamping
的编程指南)进行了如下操作。
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_MACSTSR
和 ETH_MACSTNR
获取系统时间的内容?
问题来自 Sub-second increment register (ETH_MACSSIR)
。要递增的值存储在寄存器的 high word
中,如下图所示。所以这个值必须移动 16。
当如下更改值时,一切都按预期运行。
WRITE_REG(heth->Instance->MACSSIR, ((uint32_t)20)<<16);
我正在尝试在 STM32H743 Nucleo
板上获取 PTP
时间戳。到目前为止 LwIP
和以太网驱动程序没有问题,除了 PTP
。我按照参考手册(RM0433
)上的说明(58.9.7 IEEE 1588 timestamping
的编程指南)进行了如下操作。
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_MACSTSR
和 ETH_MACSTNR
获取系统时间的内容?
问题来自 Sub-second increment register (ETH_MACSSIR)
。要递增的值存储在寄存器的 high word
中,如下图所示。所以这个值必须移动 16。
当如下更改值时,一切都按预期运行。
WRITE_REG(heth->Instance->MACSSIR, ((uint32_t)20)<<16);