Буферные регистры

Память данных

Память программ

Уровни стека

Ресурсы процессора

Основная обработка USB происходит на низком уровне в программе обработки прерывания и, таким образом, невидима для основной программы. Однако, она использует ресурсы процессора: память программ, память данных, регистры, уровни в стеке и циклы процессора.

Аппаратный стек в микроконтроллерах PIC16C745/765 имеет глубину всего 8 уровней. Поэтому вложенность подпрограмм и прерываний не может быть более 8. Процесс нумерации USB требует 6 уровней, так что самое лучшее, если основная программа будет удерживаться от выполнения подпрограмм и обработки прерываний пока процесс нумерации не завершен. Макрокоманда ConfiguredUSB служит для этой цели: она проверяет два младших разряда USWSTAT и ожидает пока не завершится процесс нумерации.

Программа обработки прерывания USB, включая подпрограммы интерфейса, без дескрипторных таблиц занимает 1024 слова. Таблицы настройки и параметров устройства могут занимать дополнительно 256 слов. Расположение этих частей программы не ограничено, для управления размещением каждой части сценарий компоновщика может быть отредактирован.

За исключением общедоступной памяти данных, которая используется для стека регистров специальных функций, обслуживание прерывания USB занимает примерно 40 байт памяти данных в банке 2. Для использования основной программой остается вся универсальная память данных в банках 0 и 1 и половина банка 2.

PIC16C745/765 имеет двухпортовую буферную память емкостью 64 байта. 24 байта используются для таблицы дескрипторов буферов (BDT), а оставленные 40 — для буферов.

Оконечной точке 0 при вводе и выводе требуются специализированные буферы, так как транзакция установки не может быть приостановлена. Остальные три буфера распределяются между четырьмя возможными оконечными точками. Но в соответствии со спецификацией USB устройства с низкой скоростью могут иметь только 2 оконечные точки.

Заданная по умолчанию конфигурация выделяет индивидуальные буферы для ЕР0 OUT, EP0 IN, EP1 OUT и ЕР1 IN. Последний буфер отводится для совместного использования ЕР2 IN и ЕР2 OUT. В соответствии со спецификацией для устройств с низкой скоростью, кроме ЕР0, могут одновременно функционировать только 2 оконечные точки. Следовательно, эта конфигурация поддерживает большинство возможных комбинаций оконечных точек (ЕР1 OUT и ЕР1 IN, EP1OUT и EP2IN, ЕР1 OUT и ЕР2 OUT, EP1 IN и ЕР2 OUT, ЕР1 IN и ЕР2 IN). Единственная комбинация, которая не обеспечивается этой конфигурацией. — ЕР2 IN и ЕР2 OUT. Если в устройстве необходима эта конфигурация, то функция USBRESET может быть отредактирована так, чтобы эта конфигурация обеспечивалась за счет буферов ЕР1.