Источник тактовой частоты 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);