Перейти к содержанию
    

STM32F4 и изохронные IN endpoint

Пытаюсь сделать 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() вызывается как минимум один раз при запуске записи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тут кто-то недавно бился с инкомплитами на СТМ, пришел к выводу что криво что-то в СТМе...

 

http://electronix.ru/forum/index.php?showtopic=112562

вот вроде получилось у него в итоге

 

и вот

http://electronix.ru/forum/index.php?showtopic=123341

где чего то там на FS работало, а на HS не стало...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже видел эти темы, в первой BaN не упоминал никаких проблем с прерыванием конечной точки, а во второй речь идет о EP OUT, которая работает несколько по другому.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже смутно помню, что и как я делал, но вроде бы usbd_audio_DataIn() вызывается, когда буфер пуст и можно загрузить данные для следующей отправки. Таким образом, в usbd_audio_DataIn() можно непосредственно вызывать DCD_EP_Tx() с данными для отправки, либо ставить флаг, что можно отправить данные, если дынные еще не готовы и отправить эти данные из другого места тем же вызовом DCD_EP_Tx(), когда данные будут готовы. Так же при вызове usbd_audio_Init() можно сразу же загрузить данные в буфер для отправки через DCD_EP_Tx(), если они уже готовы или установить флаг, что буфер отправки пуст и данные можно загрузить для отправки через DCD_EP_Tx() из другого места, когда они будут готовы.

Я выложил исходники своего проекта, можете посмотреть там, если это вам поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...