Источник тактовой частоты PTP IEEE 1588 в STM32H743

Я пытаюсь получить PTP отметка времени на STM32H743 Nucleoдоска. Нет проблем сLwIP и драйвер Ethernet, за исключением 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 страница конфигурации часов.

Однако нет часового пути для PTP в STM32H7 как на изображении ниже.

Я что-то упустил, чтобы получить системное время из регистров ETH_MACSTSR а также ETH_MACSTNR?

1 ответ

Решение

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

При изменении значения все работает, как ожидалось.

WRITE_REG(heth->Instance->MACSSIR, ((uint32_t)20)<<16);
Другие вопросы по тегам