21.5. Режимы электропотребления
21.5.1. Режим IDLE
В этом режиме прекращает работу ядро ЦПУ (отключена синхронизация ЦПУ). Режим IDLE не влияет на активность USB-контроллера: он может как работать, так и не работать. ЦПУ возобновляет активную работу по любому прерыванию USB.
21.5.2. Режим POWER-DOWN
В этом режиме прекращает работу генератор и останавливаются все сигналы синхронизации (ЦПУ и УВВ). USB-контроллер возобновляет работу, когда:
- инициируется прерывание WAKEUPI в режиме Device (HOST=0);
- инициируется прерывание HWUPI в режиме Host (HOST=1);
- инициируется прерывание IDTI;
- инициируется прерывание VBUSTI.
21.5.3. Отключение синхронизации
Предусмотрена возможность снижения потребляемого тока из программы путем установки бита FRZCLK, что приводит к отключению синхронизации USB-контроллера. Когда FRZCLK = 1, сохраняется возможность доступа к следующим регистрам:
- USBCON, USBSTA, USBINT
- UDCON (биты DETACH, ...)
- UDINT
- UDIEN
- UHCON
- UHINT
- UHIEN
Кроме того, когда бит FRZCLK установлен, возможен запуск только следующих прерываний:
- WAKEUPI
- IDTI
- VBUSTI
- HWUPI
21.6. Управление скоростью
21.6.1. Режим Device
Когда интерфейс USB настроен на работу в режиме Device, выбор скорости (FS или LS) зависит от подтяжки к плюсу питания линий UDP/UDM. С помощью бита LSM в регистре UDCON можно выбрать подтяжку к плюсу питания на линии UDM (для выбора режима LS) или UDP (для выбора режим FS).
Рисунок 21.14. Выбор скорости в режиме Device
21.6.2. Режим Host
Когда USB-интерфейс настроен на работу в режиме host, на обоих линиях UDP и UDM активизируются внутренние подтягивающие к минусу питания резисторы, что дает возможность определить тип подключенного к интерфейсу устройства.
21.7. Управление памятью
Контроллер поддерживает только описанное далее управление назначением памяти. Резервирование каналов или конечных точек можно выполнять только в возрастающем порядке (от канала/конечной точки 0 до последнего канала/конечной точки). В программе необходимо конфигурировать их в том же порядке.
Резервирование канала или конечной точки ki выполняется, когда связанный с ними бит ALLOC равен 1. Затем, схема контроллера назначает память, вставляя её между памятью каналов/конечных точек ki-1 и ki+1. Это приводит к тому, что память канала/конечной точки ki+1 перемещается вверх и данные в ней теряются. Обратите внимание, что положение памяти ki+2 и всех вышестоящих каналов/конечных точек остается неизменным.
Сброс бита разрешения канала (PEN) или разрешения конечной точки (EPEN) не приводит ни к сбросу связанного с ним бита ALLOC, ни к отмене его конфигурации (EPSIZE/PSIZE, EPBK/PBK). Для освобождения назначенной памяти необходимо программно сбросить соответствующий бит ALLOC. В результате такого действия, память канала/конечной точки ki+1 автоматически сдвигается вниз. Обратите внимание, что положение памяти ki+2 и всех вышестоящих каналов/конечных точек остается неизменным.
Следующий рисунок на примере типичной ситуации иллюстрирует назначение и реорганизацию памяти USB-контроллера:
Таблица 21.1. Последовательность назначения и реорганизации памяти USB-контроллера
- Сначала выполняется конфигурация каналов/конечных точек 0…5 в возрастающем порядке. Для всех них резервируется память в DPRAM.
- Затем, отключается канал/конечная точка 3 (EPEN=0), но выделенная под неё память сберегается контроллером.
- Далее выполняется сброс ALLOC, что приводит к перемещению вниз памяти канала/конечной точки 4. Положение памяти канала/конечной точки 5 остается неизменным.
- Наконец, если программой будет выполнена перенастройка канала/конечной точки 3 в направлении увеличения объема памяти, контроллер выделит блок памяти требуемого объема, примыкающий к памяти конечной точки 2 и, при этом, автоматически сдвинет вверх память канала/конечной точки 4. Поскольку положение памяти канала/конечной точки 5 остается неизменным, возникает конфликт в назначении памяти, т.к. каналы/конечные точки 4 и 5 будут занимать одну и ту же область памяти. Данные этих конечных точек находятся под потенциальной угрозой потери.
Обратите внимание, что:
- данные канала/конечной точки 0 никогда не теряются при активации/деактивации любых вышестоящих каналов/конечных точек. Только деактивация самого канала/конечной точки 0 может привести к потере им данных.
- Деактивация и повторная активация одного и того же канала/конечной точки с одинаковыми параметрами не приводит к перемещению вышестоящего блока памяти. Данные таких конечных точек не теряются.
- CFGOK устанавливается аппаратно даже в случае, когда имеется конфликт в назначении памяти.
|