Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LwIP, FreeRTOS, STM32F207
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Мусатов Константин
Есть такой пример подключения LwIP http://www.st.com/st-web-ui/static/active/...sw-stm32060.zip
Открываю его под IAR. Пример, в принципе, работает. Однако, такое впечатление, что вопреки, а не благодаря. Но возможно, я чего-то недопонимаю.
Поскольку приход и отправка данных по Ethernet асинхронное событие, то логично работать через прерывание. Потому логично увидеть в коде инициализации и включение прерывания:
main.c
Код
...
int main(void)
{
...
  /* configure Ethernet (GPIOs, clocks, MAC, DMA) */
  ETH_BSP_Config();
    
  /* Initilaize the LwIP stack */
  LwIP_Init();
  
  /* Initialize webserver demo */
  http_server_netconn_init();

....
}

Соответственно в stm32f2x7_eth_bsp.c
Код
...
void ETH_BSP_Config(void)
{
  /* Configure the GPIO ports for ethernet pins */
  ETH_GPIO_Config();
  
  /* Config NVIC for Ethernet */
  ETH_NVIC_Config();

  /* Configure the Ethernet MAC/DMA */
  ETH_MACDMA_Config();
....
}
...
void ETH_NVIC_Config(void)
{
  NVIC_InitTypeDef   NVIC_InitStructure;

  /* 2 bit for pre-emption priority, 2 bits for subpriority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* Enable the Ethernet global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);    
}
...

Вроде как разрешили прерывание по эзернету
Однако открываю startup_stm32f2xx.s и вижу, что ETH_IRQHandler обслуживается внутренней заглушкой
Попытки найти альтернативный обработчик прерывания в остальном коде примера не дали результата.

Беру пример FreeRTOS 8.2.0. В нем, к сожалению, нет примера под IAR на STM32 Cortex и LwIP, но есть STM32F107 под GCC. В нем в STM32F10x_Startup.s отчетливо прописано
Код
.extern xPortPendSVHandler
.extern xPortSysTickHandler
.extern vPortSVCHandler
.extern vMAC_ISR;

Т.е. обслуживание прерывания есть. Как же пример от ST то работает?
aaarrr
Цитата(Мусатов Константин @ Mar 1 2015, 15:18) *
Попытки найти альтернативный обработчик прерывания в остальном коде примера не дали результата.

ETH_IRQHandler находится в stm32f2xx_it.c
Мусатов Константин
Цитата(aaarrr @ Mar 1 2015, 15:46) *
ETH_IRQHandler находится в stm32f2xx_it.c

Но почему он не объявлен как .EXTERN в стартапе и оставлена путая заглушка. Мне кажется, с точки зрения языка, он не должен использовать внешнюю ссылку.
aaarrr
В стартапе заглушка объявлена как weak, соответственно, будет заменена при линковке.
scifi
Цитата(Мусатов Константин @ Mar 1 2015, 15:18) *
Поскольку приход и отправка данных по Ethernet асинхронное событие, то логично работать через прерывание.

Не обязательно. У меня всё сделано по схеме Super Loop. Нормально работает. Не зря же Ethernet MAC умеет накапливать принятые кадры.
Мусатов Константин
Цитата(aaarrr @ Mar 1 2015, 16:02) *
В стартапе заглушка объявлена как weak, соответственно, будет заменена при линковке.

Понял. Ой не люблю такие неявные вещи. Гораздо понятнее прямое определение. Вопрос закрыт
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.