IEEE 1588 PTP Источник синхронизации в STM32H743 - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь получить PTP метку времени на доске STM32H743 Nucleo. Пока нет проблем с LwIP и драйвером ethe rnet, кроме PTP. Я следовал инструкции (58.9.7 Рекомендации по программированию для IEEE 1588 timestamping) в справочном руководстве (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 есть путь синхронизации для PTP, как на изображении ниже на странице CubeMX конфигурации часов.

enter image description here

Однако нет путь к часам для PTP в STM32H7, как на рисунке ниже.

enter image description here

Я что-то упускаю из-за получения системного времени из регистров ETH_MACSTSR и ETH_MACSTNR?

1 Ответ

0 голосов
/ 18 апреля 2020

Проблема исходит от Sub-second increment register (ETH_MACSSIR). Увеличиваемое значение сохраняется в high word регистра, как показано на рисунке ниже. таким образом, значение должно быть смещено на 16.

enter image description here

Все работает, как ожидалось, при изменении значения следующим образом.

WRITE_REG(heth->Instance->MACSSIR, ((uint32_t)20)<<16);
...