Библиотека LUFA (раннее название MyUSB) версия 101122
|
Defines | |
#define | USB_STREAM_TIMEOUT_MS 100 |
Enumerations | |
enum | USB_Modes_t { USB_MODE_None = 0, USB_MODE_Device = 1, USB_MODE_Host = 2, USB_MODE_UID = 3 } |
Functions | |
void | USB_USBTask (void) |
static bool | USB_VBUS_GetStatus (void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE |
static void | USB_Detach (void) ATTR_ALWAYS_INLINE |
static void | USB_Attach (void) ATTR_ALWAYS_INLINE |
void | USB_Init (const uint8_t Mode, const uint8_t Options) |
void | USB_ShutDown (void) |
void | USB_ResetInterface (void) |
Variables | |
volatile bool | USB_IsInitialized |
USB_Request_Header_t | USB_ControlRequest |
volatile uint8_t | USB_CurrentMode |
volatile uint8_t | USB_Options |
Маски опций контроллера USB | |
#define | USB_OPT_REG_DISABLED (1 << 1) |
#define | USB_OPT_REG_ENABLED (0 << 1) |
#define | USB_OPT_MANUAL_PLL (1 << 2) |
#define | USB_OPT_AUTO_PLL (0 << 2) |
Маски типа конечной точки/потока (Endpoint/Pipe) | |
#define | EP_TYPE_CONTROL 0x00 |
#define | EP_TYPE_ISOCHRONOUS 0x01 |
#define | EP_TYPE_BULK 0x02 |
#define | EP_TYPE_INTERRUPT 0x03 |
Функции, макросы, переменные, перечисления и типы, связанные с настройкой и управлением интерфейсом USB
#define EP_TYPE_BULK 0x02 |
Маска для конечной точки (или потока) типа BULK.
#define EP_TYPE_CONTROL 0x00 |
Маска для конечной точки (или потока) типа CONTROL.
#define EP_TYPE_INTERRUPT 0x03 |
Маска для конечной точки (или потока) типа INTERRUPT.
#define EP_TYPE_ISOCHRONOUS 0x01 |
Маска для конечной точки (или потока) типа ISOCHRONOUS.
#define USB_OPT_AUTO_PLL (0 << 2) |
Маска опции автоматического управления PLL для USB_Init(). Указывает библиотеке, что библиотека должна взять на себя все управление AVR PLL (используемое для генерирования тактов высокой частоты, требуемых для контроллера USB), и гарантирует корректную частоту захвата для операций с USB.
#define USB_OPT_MANUAL_PLL (1 << 2) |
Маска опции ручного управления PLL для USB_Init(). Указывает библиотеке, что приложение пользователя берет на себя все управление AVR PLL (используемое для генерирования тактов высокой частоты, требуемых для контроллера USB) и гарантирует корректную частоту захвата для операций с USB.
#define USB_OPT_REG_DISABLED (1 << 1) |
Маска опции запрета регулятора для USB_Init(). Показывает, что внутренний регулятор портов данных 3.3V USB должен быть запрещен, и для ножек портов данных используется напряжение VCC микроконтроллера AVR.
#define USB_OPT_REG_ENABLED (0 << 1) |
Маска опции разрешения регулятора для USB_Init(). Показывает, что внутренний регулятор портов данных 3.3V USB должен быть разрешен и регулировать напряжение ножек данных по стандарту USB.
#define USB_STREAM_TIMEOUT_MS 100 |
Константа для максимального периода программного таймаута функций потока данных USB (и для управления, и стандартных) когда активен режим либо устройства, либо хоста. Если следующий пакет потока не принят или или не подтвержден в течение этого периода, то функция потока зарегистрирует ошибку.
Это значение может быть отменено в makefile проекта пользователя значением токена USB_STREAM_TIMEOUT_MS, и передано компилятору через переключатель -D.
enum USB_Modes_t |
Перечисление для возможных режимов контроллера USB, для инициализации через USB_Init() и индикации обратно для приложения пользователя через USB_CurrentMode.
static void USB_Attach | ( | void | ) | [inline, static] |
Подключение устройства к шине USB. Представляет наличие устройства для любого подключенного хоста USB, начиная процесс энумерации. Если хоста нет, то такое "подключение" устройства разрешает энумерацию, как только хост будет физически подключен к устройству.
Это также безусловно требуется для правильной работы в режиме хоста, чтобы разрешить подключение устройства к хосту. И это все несмотря на бит, размещенный в регистре режима устройства и несмотря на таблицу данных даташита, не упоминающую об этом требовании в режиме хоста.
static void USB_Detach | ( | void | ) | [inline, static] |
Отключение устройства от шины USB. Это дает эффект удаления устройства из любого подключенного хоста, прекращая все коммуникации USB. Если хоста нет, это предотвращает энумерацию устройства со стороны любого хоста при подключении, пока не будет вызвана USB_Attach().
void USB_Init | ( | const uint8_t | Mode, |
const uint8_t | Options | ||
) |
Главная функция для инициализации и запуска интерфейса USB. Как только интерфейс USB станет активным, он позволяет устройствам соединяться с хостом (в режиме работы устройства USB), или энумерацию для устройства в режиме хоста.
Поскольку библиотека USB в процессе энумерации полагается на прерывания для режимов устройства и хоста, пользователь должен разрешить глобальные прерывания перед вызовом или сразу после вызова этой функции. В режиме устройства прерывания должны быть разрешены в течение 500 мс после вызова этой функции, чтобы гарантировать для хоста отсутствие таймаута при энумерации устройства. В режиме хоста прерывания могут быть разрешены после вызова этой функции когда угодно, однако энумерация подключенного устройства не начнется, пока прерывания не будут разрешены.
Вызов этой функции, когда интерфейс USB уже инициализирован, приведет к полному сбросу интерфейса USB и повторной энумерации.
[in] | Mode | Маска, показывающая, в каком режиме должен быть инициализирован интерфес USB, значение из перечисления USB_Modes_t. |
[in] | Options | Маска, показывающая опции, используемые при инициализации интерфеса USB, управляющие поведением интерфейса USB. Должна быть составлена из маски USB_OPT_REG_* для управления регулятором, маски USB_OPT_*_PLL для управления PLL и маски USB_DEVICE_OPT_* mask (когда разрешен режим устройства) для установки скорости режима устройства. |
void USB_ResetInterface | ( | void | ) |
Сбрасывает уже инициализированный интерфейс. Это приведет к переэнумерации устройства, если оно уже подключено к хосту или переэнумерации всех подключенных устройств в режиме работы как хост.
void USB_ShutDown | ( | void | ) |
Выключает интерфейс USB. Выключается интерфейс после освобождения памяти всех буферов USB FIFO, конечных точек и потоков. Когда выключен, нельзя использовать функции USB, пока интерфейс не будет перезапущен функцией USB_Init().
void USB_USBTask | ( | void | ) |
Это главная задача поддержки USB. Драйвер USB требует постоянного запуска этой задачи, когда система USB активна (программа устройства подключена к хосту, или программа хоста работает с устройством) для поддержки коммуникаций USB. Эта задача может выполняться из RTOS, ISR быстрого таймера или главного цикла программы пользователя.
Задача USB должна вызываться не реже 30 мс в режиме устройства, или 1 мс в режиме хоста. Задача должна работать всегда, или (для минимизации расхода времени CPU):
В режиме устройства (только в нем), конечная точка управления может быть обработана в прерывании, полностью на стороне библиотеки, путем задания токена INTERRUPT_CONTROL_ENDPOINT и передачи его компилятору через переключатель -D.
static bool USB_VBUS_GetStatus | ( | void | ) | [inline, static] |
Возвращает двоичное true, если сигнал VBUS в настоящий момент находится в состоянии high (другими словами, хост USB предоставил питание), иначе возвращает false.
Структура, содержащая последний принятый управляющий запрос в режиме работы устройства USB (для использования в приложениях пользователя внутри события EVENT_USB_Device_ControlRequest(), или для заполнения запроса управления в режиме работы как хоста, перед вызовом USB_Host_SendControlRequest().
volatile uint8_t USB_CurrentMode |
Показывает режим, в который инициализирован интерфейс USB, значение из перечисления USB_Modes_t.
volatile bool USB_IsInitialized |
Показывает, инициализирован ли в настоящий момент интерфейс USB, но необязательно подключен к хосту или устройству (например, если был запущен USB_Init()). Если false, то все другие глобальные переменные библиотеки, связанные с драйвером USB, недопустимы для использования.
volatile uint8_t USB_Options |
Показывает текущие опции USB, в которые инициализирован интерфейс USB вызовом USB_Init(). Это значение будет одной из масок USB_MODE_*, определенных в другом месте этого модуля.