Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32cubef4 + LwIP + DP83848
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SasaVitebsk
Во-первых предлагаю открыть раздел, где-нибудь рядом с ОС, посвящённый различным стекам, пакетам, библиотекам. Например LwIP или FatFS. Вопросы по ним впрямую не касаются ни архитектуры ни ОС, а возникают они достаточно часто.

В примерах от st которые с демоплатами идут используется выход м/х DP83848 [7] Int. Насколько я понял, прерывание вызывается при пропадании/ восстановлении соединения ethernet на физике. Для обслуживания этого прерывания запускается поток ну и там обслуживается. В то же время, на ряде досок эта нога на CPU не заводится. Скорее всего ситуация разруливается опросом. В связи с этим у меня 2 вопроса.
1. Может ли кто ткнуть в пример, где работа без этого прерывания.
2. Стоит ли доразводить данную ножку.
Заранее благодарю
DmitryM
Цитата(SasaVitebsk @ Jul 30 2014, 15:11) *
В примерах от st которые с демоплатами идут используется выход м/х DP83848 [7] Int.

По умолчанию - это вход PowerDown. Чтобы был Int - нужно сконфигурить DP83848.
Цитата
Насколько я понял, прерывание вызывается при пропадании/ восстановлении соединения ethernet на физике.

Аж 7 причин может вызвать прерывание, конфигурируемо в DP83848. В том числе и link status, speed status, duplex status.
Цитата
2. Стоит ли доразводить данную ножку.


В своих проектах обходился опросом (не stm).
SasaVitebsk
Спасибо за ответ.
Цитата(DmitryM @ Jul 30 2014, 15:32) *
По умолчанию - это вход PowerDown.

Это я увидел.
Цитата
Чтобы был Int - нужно сконфигурить DP83848.

Нашёл это место...
Код
  // Configure PHY to generate an interrupt when Eth Link state changes
  // Read Register Configuration
  HAL_ETH_ReadPHYRegister(&EthHandle, PHY_MICR, &regvalue);
  
  regvalue |= (PHY_MICR_INT_EN | PHY_MICR_INT_OE);

  // Enable Interrupts
  HAL_ETH_WritePHYRegister(&EthHandle, PHY_MICR, regvalue );
  
  // Read Register Configuration
  HAL_ETH_ReadPHYRegister(&EthHandle, PHY_MISR, &regvalue);
  
  regvalue |= PHY_MISR_LINK_INT_EN;
    
  // Enable Interrupt on change of link status
  HAL_ETH_WritePHYRegister(&EthHandle, PHY_MISR, regvalue);

А вот это мне не даёт покоя ...
Код
  EthHandle.Init.RxMode = ETH_RXINTERRUPT_MODE;

Хотя в обработке прерывания только Link ...
DmitryM
Цитата(SasaVitebsk @ Jul 30 2014, 17:13) *
Код
  
   regvalue |= (PHY_MICR_INT_EN | PHY_MICR_INT_OE);

Нда, надежда на сброс, что в регистре будут нули. А если там генерируется тестовое прерывание? Оно там и останется.
Цитата
Код
  
   regvalue |= PHY_MISR_LINK_INT_EN;

Здесь тоже. Ведь могут быть разрешены и другие источники, если с DP уже работали и регистр не после сброса.
Цитата
Код
EthHandle.Init.RxMode = ETH_RXINTERRUPT_MODE;

Здесь не подскажу, могу только предположить что это прерывание от EMAC самого STM, а не PHY.
kolobok0
Цитата(SasaVitebsk @ Jul 30 2014, 15:11) *
... прерывание вызывается при пропадании/ восстановлении соединения ethernet на физике....


если присмотритесь повнимательней к обработчикам - то их поведение не критично. т.е. если совсем отключить собственно ничего не должно
кардинально поменяться. где то на форуме я уже про не заведённое прерывание (хотя обработчик в сэмплах взводится) где то писал.
прикольно, что у многих работает на шумах, как я понимаешь sm.gif у меня то в готовом девайсе туда выходил детектор нуля -
что так же с частотой в 100Гц опрашивало Ethernet на разрыв соединения sm.gif
SasaVitebsk
Спасибо. Я эту часть уже переписал. У меня есть поток диагностики, я пока туда добавил.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.