Вся настройка не может быть сделана парой функций: Ethernet у STM32 - сложная периферия.
У меня китайский контроллер на STM32F107. Софт с исходниками - из примеров от ST, творчески переработанных китайцами и откомментированный на китайском, которого я не знаю. Так даже интереснее разбираться. Хорошо помогают Source Browser и генерируемый линкером Static Call Graph.
Cначала заполняется структура ETH_InitStructure и вызывается функция ETH_Init(Ð_InitStructure, PHY_ADDRESS) инициализирующая MAC, PHY и частично DMA. затем настраивается DMA: ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE) разрешает прерывания по приёму. после этого инициализируется библиотека LwIP: вызываются LwIP_Init ⇒ netif_add ⇒ ethernetif_init ⇒ low_level_init ⇒ ETH_DMA*xDescChainInit Там же вызываeтся ETH_MACAddressConfig В последнюю очередь запускаются сервисы, такие как HTTPD, FTPD и т.д.
Не использую IEEE 1588 Precision Time Protocol (PTP), т.к. контроллер один, резервирования нет.
В документе "RM0008 Reference manual STM32F10*" 3 страницы посвящены фильтрации MAC адресов. Не знаю где можно найти ещё подробнее. См. Table 213. Source address filtering table.
ETH_ReceiveAll относится к регистру MACFFR, описанному в том же документе.
Сообщение отредактировал firew0rker - Dec 28 2014, 16:30
|