Jump to content
    

Пропуск прерывания в CherryUSB на STM32F722

Использую библиотеку CherryUSB на stm32f405 и stm32f722 чтобы сделать CDC ACM устройство. На F4 все работает стабильно, а на F7 обнаруживаются проблемы. Если давать достаточно плотный поток данных от устройства к хосту, то работа быстро прерывается. Прерывание по завершению передачи не приходит, бит XFRC в регистре DIEPINT. Отлаживаю с помощью записи логов в кольцевой буфер в RAM.

По коду, делается вызов usbd_ep_start_write() из моих модулей, дальше случается прерывание DIEPINT_TXFE и в обработчике вызывается dwc2_tx_fifo_empty_process(). После чего обычно происходит прерывание DIEPINT_XFRC и в обработчике вызывается callback в котором я снова делаю usbd_ep_start_write() либо не делаю в зависимости от наличия данных на отправку. Но на F7 иногда все заканчивается на вызове dwc2_tx_fifo_empty_process(), дальше прерывания нет.

https://github.com/sakumisu/CherryUSB/blob/master/port/dwc2/usb_dc_dwc2.c

Проблем возникает непредсказуемо, никаких зависимостей выявить не удалось. Обычно передаётся несколько Кб текста и все останавливается, если передавать небольшие порции и редко то проблема возникает с меньшей вероятностью. Проявляется на F7, от DCache не зависит. Собирал с помощью GCC и Clang с разными настройками оптимизации, не зависит. При отладке, когда ставил точки останова на код обработчика прерывания OTG_FS то были случаи разлипания и продолжения передачи.

В моем коде нет обработки случая неприхода callback после вызова usbd_ep_start_write(), разлипнуть можно только если вызов callback все таки случится.

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...