реклама на сайте
подробности

 
 
> STM32F4 и изохронные IN endpoint
iliasam
сообщение Oct 17 2014, 18:55
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 30-11-08
Пользователь №: 42 101



Пытаюсь сделать USB-микрофон на базе платы STM32F4-Discovery.
Написал соответствующие дескрипторы, в Windows плата нормально видится как микрофон.
Хорошо обнаруживается команда SET_INTERFECE при запуске и остановке записи с компьютера.

А вот с изохронной конечной точкой проблемы.
Не совсем понятно, когда нужно передавать данные (вызывать функцию DCD_EP_Tx()).
Во всех виденных примерах такую функцию вызывают из обработчика прерывания изохронной конечной точки.

Вот только у меня этот обработчик (usbd_audio_DataIn) не вызывается.
Приходилось встречать информацию, что для того, чтобы он начал вызываться, нужно однократно запустить передачу DCD_EP_Tx() из обработчика прерывания SOF.
Пробовал сделать так - в результате usbd_audio_DataIn так и не вызывается, но возникают прерывания isochronous IN incomplete (usbd_audio_IN_Incplt). usbd_audio_IN_Incplt начинает вызываться только после вызова DCD_EP_Tx() из обработчика SOF. Частота этих прерываний - 500 Гц, и отключить их не удается.
В самом обработчике usbd_audio_IN_Incplt я выполняю очистку FIFO буфера - DCD_EP_Flush() и все. Сброс флагов прерывания, насколько я понял, происходит в самой библиотеке USB.

При этом, если установить breakpoint на вызов DCD_EP_Tx, то после остановки программы на нем и ее запуска видно, что прерывание usbd_audio_DataIn несколько раз все же вызывается, но потом происходит прерывание usbd_audio_IN_Incplt.

Пробовал предавать данные в обработчике прерывания SOF (только когда пришла команда на выбор "рабочего" интерфейса). В данном случае прерывания usbd_audio_IN_Incplt появляются только после остановки записи (когда обработчик SOF перестает вызывать передачу DCD_EP_Tx()).
После последующем запуске записи прерывания usbd_audio_IN_Incplt исчезают, и при остановке вновь появляются.
Несмотря на то, что функция передачи DCD_EP_Tx() вызывается с частотой SOF, никакие данные на компьютер не приходят - это видно в анализаторе.

Возникают следующие вопросы:
Почему не вызывается прерывание конечной точки usbd_audio_DataIn?
Из-за чего возникают прерывания isochronous IN incomplete - usbd_audio_IN_Incplt, почему они присутствуют даже после того, как компьютер прекратил запись?
Почему на компьютер не приходят никакие данные, хотя DCD_EP_Tx() вызывается как минимум один раз при запуске записи?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01348 секунд с 7
ELECTRONIX ©2004-2016