Detailed Description
Функции, макросы и перечисления, связанные с управлением конечными точками в режиме устройства USB. Этот модуль содержит макросы управления конечными точками, а также функции прерывания и отправки/приема данных различных типов.
Define Documentation
#define ENDPOINT_BANK_DOUBLE (1 << EPBK0) |
Маска выбора режима банка для макроса Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна иметь два банка, которые требуют больше памяти USB FIFO, но передает быстрее, так как в одно и то же время одна из сторон (устройство USB AVR или хост) может получить доступ к одному банку, когда другая сторона получила доступ к другому банку.
#define ENDPOINT_BANK_SINGLE (0 << EPBK0) |
Маска выбора режима банка для макроса Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна иметь один банк, который требует меньше памяти USB FIFO, но передает медленнее, так как только одна из сторон (устройство USB AVR или хост) может получить доступ к банку в одно и то же время.
#define ENDPOINT_BANKS_SUPPORTED |
( |
|
EPIndex | ) |
_ENDPOINT_GET_BANKS(EPIndex) |
Показывает общее количество банков, поддерживаемых указанной конечной точкой.
- Parameters:
-
[in] | EPIndex | номер конечной точки, величина между 0 и (ENDPOINT_TOTAL_ENDPOINTS - 1) |
#define ENDPOINT_CONTROLEP 0 |
Адрес для управляющей конечной точки по умолчанию, которая всегда размещена по адресу 0. Этот макрос задан для удобства, чтобы получить более читаемый код при использовании макросов конечной точки.
#define ENDPOINT_CONTROLEP_DEFAULT_SIZE 8 |
Размер по умолчанию для банка конечной точки управления, пока он не изменен значением размера банка конечной точки, прочитанным из дескриптора устройства. Недоступен, если задан токен FIXED_CONTROL_ENDPOINT_SIZE.
#define ENDPOINT_DIR_IN (1 << EPDIR) |
Маска направления конечной точки для Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна быть инициализирована в направлении IN - т. е. данные идут от устройства к хосту.
#define ENDPOINT_DIR_OUT (0 << EPDIR) |
Маска направления конечной точки для Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна быть инициализирована в направлении OUT - т. е. данные идут от хоста к устройству.
#define ENDPOINT_EPDIR_MASK 0x80 |
Маска направления конечной точки, для маскирования адресов конечной точки при получении направления конечной точки сравнением с масками ENDPOINT_DESCRIPTOR_DIR_*.
#define ENDPOINT_EPNUM_MASK 0x07 |
Маска номера конечной точки, для наложения на адрес конечной точки и получения числового адреса конечной точки в устройстве.
#define ENDPOINT_EPSIZE_MASK 0x7F |
Маска размена банка конечной точки, для наложения на адрес конечной точки и получения размера банка конечной точки в устройстве.
#define ENDPOINT_MAX_SIZE |
( |
|
EPIndex | ) |
_ENDPOINT_GET_MAXSIZE(EPIndex) |
Максимальный размер в байтах указанной конечной точки.
- Parameters:
-
[in] | EPIndex | номер конечной точки, величина между 0 и (ENDPOINT_TOTAL_ENDPOINTS - 1) |
#define ENDPOINT_TOTAL_ENDPOINTS ENDPOINT_DETAILS_MAXEP |
Общее количество конечных точек (включая контрольную точку управления по умолчанию с адресом 0), которое можно использовать в устройстве. Разные модели USB AVR поддерживают разное количество конечных точек, и эта величина отражает максимальное количество конечных точек для выбранной модели AVR.
Function Documentation
void Endpoint_ClearStatusStage |
( |
void |
| ) |
|
Автоматически завершает стадию статуса на управляющей передаче конечной точки типа CONTROL, относительно направления данных. Эта функция используется для удобства, чтобы упростить пользователю обработку управляющего запроса.
static bool Endpoint_ConfigureEndpoint |
( |
const uint8_t |
Number, |
|
|
const uint8_t |
Type, |
|
|
const uint8_t |
Direction, |
|
|
const uint16_t |
Size, |
|
|
const uint8_t |
Banks |
|
) |
| [inline, static] |
Конфигурирует конечную точку с указанным номером, типом, направлением, размером и режимом банка. Как только сконфигурирована, конечная точка может быть прочитана или записана, в зависимости от её направления.
- Parameters:
-
[in] | Number | Номер конечной точки для конфигурирования. Должен быть больше 0 и меньше ENDPOINT_TOTAL_ENDPOINTS. |
[in] | Type | Тип конечной точки для конфигурирования, маска EP_TYPE_*. Не все типы конечной точки доступны на устройствах Low Speed USB - см. спецификацию USB 2.0. |
[in] | Direction | Направление данных конечной точки, либо ENDPOINT_DIR_OUT, либо ENDPOINT_DIR_IN. Все коненые точки (за исключением типа Control - управление) однонаправленные - данные могут быть либо только прочитаны, либо только записаны через банк конечной точки, в зависимости от направления. |
[in] | Size | Размер банка конечной точки, где сохраняются пакеты перед отправкой к хосту USB, либо после того, как пакет принят от хоста (в зависимости от направления данных конечной точки). Размер банка должен указывать на максимальный размер пакета, который может поддержать конечная точка. |
[in] | Banks | Количество банков для использования с конечной точкой, маска ENDPOINT_BANK_*. Большее количество банков тратит больше USB DPRAM, но обеспечивает более высокую производительность. Конечные точки изохронного типа должны иметь как минимум два банка. |
- Note:
- Конечные точки должны конфигурироваться в порядке возрастания, иначе произойдет повреждение банка.
-
У некоторых моделей USB AVR конечные точки могут иметь разный максимальный размер пакета в зависимости от индекса конечной точки - см. даташит на выбранный USB AVR, чтобы определить максимальный размер банка каждой конечной точки.
-
Конечная точка управления по умолчанию не должна конфигурироваться приложением пользователя, так как она автоматически конфигурируется внутренним кодом библиотеки.
-
Эта подпрограмма при успешном завершении автоматически выбирает указанную конечную точку. При ошибке выбирается конечная точка, которая не сконфигурировалась.
- Returns:
- двоичное true, если конфигурация завершилась успешно, иначе false.
static void Endpoint_DisableEndpoint |
( |
void |
| ) |
[inline, static] |
Запрещает выбранную конечную точку, после чего её нельзя использовать для обмена данными с хостом.
static void Endpoint_EnableEndpoint |
( |
void |
| ) |
[inline, static] |
Разрешает текущую выбранную конечную точку, после чего она может использоваться для обмена через неё данными (прием и передача) с хостом.
- Note:
- Предварительно конечные точки должны быть правильно сконфигурированы вызовом Endpoint_ConfigureEndpoint().
static uint8_t Endpoint_GetCurrentEndpoint |
( |
void |
| ) |
[inline, static] |
Получение адреса выбранной текущей конечной точки. Обычно используется для сохранения номера выбранной в настоящий момент конечной точки, чтобы его потом можно было восстановить после манипуляций с другой конечной точкой.
- Returns:
- индекс выбранной в настоящий момент конечной точки.
static uint8_t Endpoint_GetEndpointDirection |
( |
void |
| ) |
[inline, static] |
Определяет направление текущей выбранной конечной точки.
- Returns:
- Направление текущей выбранной конечной точки в виде маски ENDPOINT_DIR_*.
static uint8_t Endpoint_GetEndpointInterrupts |
( |
void |
| ) |
[inline, static] |
Возвращает маску, показывающую, какая из конечных точек типа INTERRUPT получила прерывание - другими словами, у какой задержка прерывания заввершилась. Какая из конечных точек получила прерывание, можно определить маскированием возвращаемого значения (величиной 1 << {Endpoint Number}).
- Returns:
- маска, биты которой показывают, какая конечная точка получила прерывание.
static bool Endpoint_HasEndpointInterrupted |
( |
const uint8_t |
EndpointNumber | ) |
[inline, static] |
Определяет, получила ли прерывание указанная конечная точка (допустимо только для конечных точек с типом INTERRUPT).
- Parameters:
-
[in] | EndpointNumber | индекс конечной точки, у которой должен быть проверен флаг прерывания. |
- Returns:
- двоичное true, если указанная конечная точка получила прерывание, иначе false.
static bool Endpoint_IsConfigured |
( |
void |
| ) |
[inline, static] |
Определяет, сконфигурирована ли текущая выбранная конечная точка.
- Returns:
- двоичное true, если текущая выбранная конечная точка сконфигурирована, иначе false.
static bool Endpoint_IsEnabled |
( |
void |
| ) |
[inline, static] |
Определяет, что текущая конечная точка разрешена (но она необязательно должна быть при этом сконфигурирована).
- Returns:
- двоичное true, если текущая конечная точка разрешена, иначе false.
static void Endpoint_ResetDataToggle |
( |
void |
| ) |
[inline, static] |
Сбрасывает переключение данных на текущей выбранной конечной точке.
static void Endpoint_ResetFIFO |
( |
const uint8_t |
EndpointNumber | ) |
[inline, static] |
Сброс FIFO банка конечной точки. Очищает все банки конечной точки и сбрасывает указатели In и Out на содержимое банков контроллера USB.
- Parameters:
-
[in] | EndpointNumber | номер конечной точки, у которой сбрасываются буферы FIFO. |
static void Endpoint_SelectEndpoint |
( |
const uint8_t |
EndpointNumber | ) |
[inline, static] |
Выбирает конечную точку указанного номера. Если используется адрес из дескрипторов устройства, то его значение должно быть замаскировано константой ENDPOINT_EPNUM_MASK, чтобы взять только номер конечной точки (отбросив бит направления).
Любые операции с конечной точкой, которые не требуют номера конечной точки, всегда работают с текущей выбранной конечной точкой.
- Parameters:
-
[in] | EndpointNumber | номер конечной точки для её выбора. |
static void Endpoint_SetEndpointDirection |
( |
const uint8_t |
DirectionMask | ) |
[inline, static] |
Устанавливает направление текущей выбранной конечной точки.
- Parameters:
-
[in] | DirectionMask | новое направление конечной точки в виде маски ENDPOINT_DIR_*. |
Variable Documentation
Глобальная переменная, показывающая максимальный размер пакета конечной точки управления по умолчанию, размещенной в устройстве по адресу 0. Это значение установлено в величину, показанную в дескрипторе устройства проекта пользователя, как только интерфейс USB был инициализирован в режиме устройства.
Если свободное место критично, можно пофиксить это к статической величине путем задания размера конечной точки в токен FIXED_CONTROL_ENDPOINT_SIZE, передаваемый компилятору через переключатель -D. Когда используется фиксированный размер управляющей конечной точки, то размер больше не будет динамически читаться из дескрипторов во время выполнения, и вместо этого будет использоваться фиксированная величина. Когда это используется, важно, чтобы размер в дескрипторе конечной точки управления совпадал с токеном FIXED_CONTROL_ENDPOINT_SIZE - рекомендуется использовать токен FIXED_CONTROL_ENDPOINT_SIZE в дескрипторах, чтобы убедиться в этом.
- Note:
- Эта переменная должна быть обработана как только для чтения в пользовательском приложении, и никогда вручную не изменяться.