Страница 1 из 1

Как долго можно запрещать прерывания на AT90USB162

Добавлено: Пт июл 05, 2013 14:28:26
hax
Планирую устройство на at90usb162, программно будет выглядеть как com port.
Необходимо общаться с внешним устройством по специальному однопроводному протоколу, для этого нужно запрещать прерывания на 1mS.

Вопрос: не "отвалится" ли при этом USB устройство? Насколько часто вызываются USB прерывания в AT90USB162?

Уточняю: если бы устройство было UART: UART в AVR не буферизирован, прерывание вызывается после приёма каждого байта, если baudrate 115200, тогда частота прерываний ~11KHz. Если запрещать прерывания дольше чем на 1/11000 сек, данные будут теряться....

Как обстоит дело с USB? там ведь есть буфер приёма?

Re: Как долго можно запрещать прерывания на AT90USB162

Добавлено: Пт июл 05, 2013 14:51:14
blackx
Если там полностью аппаратный USB, с чего соединение должно отваливаться?
То, что вы пропускаете свои данные при приеме запретом прерываний это уже другое дело.

Re: Как долго можно запрещать прерывания на AT90USB162

Добавлено: Пт июл 05, 2013 14:56:04
hax
Я, конечно, во внутренней реализации USB подробно ещё не разбирался (и многие не разбирались, потому что использовали готовые библиотеки :), но предполагаю возможные проблемы
из-за того, что устройство не обработало пришедший пакет вовремя.
Ведь прерывания от USB зачем-то есть?

Re: Как долго можно запрещать прерывания на AT90USB162

Добавлено: Пт июл 05, 2013 23:51:21
romazan
Не помню точно, но таким видам устройств хост дает определенный отрезок времени на ответ, порог которого по-моему намного выше 1 мс. Я думаю ничего отваливаться не будет. Допустим, во время запрета прерываний приходит пакет, он будет лежать и ждать обработчика в FIFO буфере, а как разрешение на прерывание будет получено - отработает обработка принятого пакета.

вот ряд статей хороший по usb
http://microsin.ru/content/view/1107/44/

Re: Как долго можно запрещать прерывания на AT90USB162

Добавлено: Сб июл 06, 2013 13:20:28
misyachniy
Не помню точно, но таким видам устройств хост дает определенный отрезок времени на ответ, порог которого по-моему намного выше 1 мс.
В USB FS период планирования обмена для всех устройств как раз 1 мс.
Для HS еще короче, по моему 0,2мс.

То есть драйвер на ПК заготавливает пакеты для отсылки и запросы на прием на 1мс. тайм ауты еще меньше.
После не ответа устройства драйвер производит перезапрос. Пауза между запросами и их количество зависит от ОС.

Нужно попробовать как хотите.
Если не получится можно попробовать сделать устройство HID.
В таком классе периодичность опроса выдается в настройках.
Можно установить период опроса 5 или 10 мс и синхронизироваться по опросу ПК.

Re: Как долго можно запрещать прерывания на AT90USB162

Добавлено: Пн июл 08, 2013 13:44:11
Alexeyslav
Если протокол опроса внешнего датчика требует все ресурсы МК - стоит подумать над альтернативным решением опроса входного сигнала, например отдельный чип который только этим и будет заниматься а затем по запросу хоста слать по SPI результат когда это будет удобно хосту а не датчику.

Либо работать по прерываниям - например опрашивать DS18B20 можно использовав таймер в режиме аппаратного захвата - прерывание нужно будет запретить только на время переключения шины датчика и команду старта модуля захвата таймера. Результат можно будет прочитать через любое время - он никуда не денется. При этом реально ресурсов на опрос датчика тратится довольно мало и не требует длительного запрета прерываний.