Перейти к содержанию
    

Попытка реализации PTP протокола на STM32F417

Я сейчас разрабатываю программу на базе платы TE-STM32F417MCU. В ней я пытаюсь, в том числе, реализовать поддержку PTP протокола. Однако я столкнулся со следующей проблемой.Системный таймер, ответственный за PTP, генерирует прерывание, если его текущее время превышает значение, записанное в регистрах target time. При этом устанавливается флаг TSTS в регистре ETH_MACSR. Данный флаг очищается как только производится чтение из регистра ETH_MACSR, так гласит Reference manual. Однако в режиме отладки я наблюдал , что после прочтения регистра никакого снятия флага TSTS не происходит и программа застревает в обработчике. Вследствие этого пришлось ввести в обработчик цикл, который снова и снова считывает содержимое регистра ETH_MACSR

до тех пор пока флаг TSTS не очищается. Однако этого я смог добиться только в режиме отладки. Когда же я прошиваю контроллер и запуская его на исполнение без программатора, то программа застревает в этом цикле навечно, т.е флаг TSTS так и не сбрасывается. Буду благодарен любым соображениям по этому поводу . Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нарвался на ту же проблему с STM32F407 на Discovery. При чем, если читать состояние этого флага в регистре ETH->MACSR с помощью ST-LINK в окне дебаггера , то этот флажок успешно сбрасывается! А изнутри - никак!

Может есть прогресс в этом вопросе с февраля?

Изменено пользователем Sekat

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению, нет. В итоге, я использовал трансивер физического уровня dp83640 с поддержкой протокола IEE 1588 и на его основе успешно реализовал поддержку протокола PTP в своём проекте. Я задавал вопрос в комьюнити STM по данной проблеме и, судя потому, как они резко прекратили обсуждения, после того, как я послал им проект, в котором можно наблюдать проявление данной проблемы, я сделал вывод, что это аппаратный баг, который делает невозможным реализацию протокола PTP только средствами контроллера STMF417. Хотя возможно я и ошибаюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению, нет. В итоге, я использовал трансивер физического уровня dp83640 с поддержкой протокола IEE 1588 и на его основе успешно реализовал поддержку протокола PTP в своём проекте. Я задавал вопрос в комьюнити STM по данной проблеме и, судя потому, как они резко прекратили обсуждения, после того, как я послал им проект, в котором можно наблюдать проявление данной проблемы, я сделал вывод, что это аппаратный баг, который делает невозможным реализацию протокола PTP только средствами контроллера STMF417. Хотя возможно я и ошибаюсь.

 

Спасибо за ответ.

Да. Видел я этот тред в коммьюнити, даже там тоже написал. Относительно официальной поддержки - действительно, по опыту предыдущих общений с СТ -очень тяжело чего-либо добиться. Реализация в трансивере - выход из положения, однако для моего проекта это существенно менее удобно.

 

Не уверен что все так совсем плохо для реализации только средствами STM.

1. PTP можно реализовать и без этого прерывания средствами только контроллера, практически без ущерба для точности.

2. У меня меня есть несколько иные планы на это прерывание от таймера (не для целей PTP), которые так же надеюсь реализовать иными методами, однако без привлечения дополнительно аппаратного обеспечения.

 

Конечно же нормальная работа этого прерывания облегчила бы жизнь, однако официально писать им в поддержку по этому поводу не стану - жалко времени.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день. Столкнулся с той же самой проблемой на stm32f417.

Ваша тема на форуме st?

Подскажите, как решили данную проблему. Если возможно, выложите исходный код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день. Столкнулся с той же самой проблемой на stm32f417.

Ваша тема на форуме st?

Подскажите, как решили данную проблему. Если возможно, выложите исходный код.

Да. Проблема преодолена.

С Новым Годом! Держите Новогодний подарок:

       if (ETH->MACSR & ETH_MACSR_TSTS){
// Есть прерывание от "будильника PTP"
       ETH->PTPTTHR=ETH->PTPTSHR+MyConst;// Переустановить будильник
       if(ETH->PTPTSSR&ETH_PTP_FLAG_TSTTR){// Эта команда очищает не только флаг ETH_PTP_FLAG_TSTTR, но и ETH_MACSR_TSTS. 
           ETH->PTPTSCR|=ETH_PTPTSCR_TSITE;
// Ваш код
//
}}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...