Главная » Ассемблер, Железо » Порядок обработки списка дескрипторов USB

0

Порядок выполнения запросов определяется структурой списка дескрипторов, который в спецификации хост-контроллера [91J именуется «планом» (Schedule). Для обеспечения нормальной работы шины USB дескрипторы в списке должны размещаться в определенном порядке, как показано на рис. 8.11.

ПРИМЕЧАНИЕ

Каждый элемент списка кадров может быть действительным или недействительным Действительный элемент списка кадров должен содержать указатель на дескриптор передачи или очередь заголовка. В нормальном режиме работы контроллера все элементы списка должны быть действительными.

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

Рис. 8.11. Пример построения списка дескрипторов

В первую очередь должны быть обработаны дескрипторы изохронной передачи, поэтому такие дескрипторы размещаются последовательно друг за другом в начале списка. Далее обрабатывается список заголовков, в начале которого размещены заголовки очередей дескрипторов для передачи по прерываниям, затем следуют заголовки очередей дескрипторов управляющих посылок. В конце списка находятся заголовки очередей дескрипторов передачи массивов данных.

ПРИМЕЧАНИЕ

Список дескрипторов изохронной передачи в каждом кадре свой, а список заголовков очередей — общий для всех кадров.

Каждый заголовок очереди указывает на первый из находящихся в очереди дескрипторов передачи. Обычно список заголовков очередей обрабатывается по горизонтали (в ширину): контроллер извлекает из заголовка первый дескриптор в очереди, обрабатывает его и переходит к следующему заголовку очереди. При необходимости можно установить режим обработки очереди по вертикали: контроллер в этом случае вначале обработает всю очередь и только потом перейдет к заголовку следующей очереди. Если выполнение операции, заданной дескриптором передачи, не завершено в текущем кадре (например, данные не готовы для передачи), в следующем кадре операция повторяется. Когда операция завершена, дескриптор передачи помечается как обслуженный и удаляется из очереди: контроллер извлекает из него указатель на следующий дескриптор и переписывает его в заголовок очереди. Область, зарезервированная в дескрипторе передачи для программного обеспечения, в первую очередь предназначена для «сборки мусора»: из обслуженных и не нужных более дескрипторов можно сформировать очередь с целью повторного использования занимаемых ими участков памяти.

Каждая очередь дескрипторов передачи обычно формируется прикладной программой для работы с определенной функцией или даже одной конечной точкой функции. Если программа работает с несколькими конечными точками или в системе параллельно выполняется несколько прикладных программ, в списке будут присутствовать несколько очередей дескрипторов.

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии