реклама на сайте
подробности

 
 
> USB device в LPC, глюк работы или баг в документации?
Alechek
сообщение Jun 29 2009, 08:28
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



В общем дело так, заметил я некую странность еще со времен 2148 - если запретить прерывание по используемой IN ep (необработке его до следующего кадра?), то больше оно не возникает. Прерывание сбрасывается только путем установки бита USBEPINTCLR. Пришлось обрабатывать всегда, даже если нет данных в направлении хоста.

Теперь существующие наработки пытаюсь перенести в 2388 и сделать все под OS: при открытии полученного виртуального COM порта пропадает прерывание IN ep!
Если в обработчике сбрасывать прерывание путем команды "Select Endpoint/Clear Interrupt ", то прерывание почему-то не сбрасывается, обработчик зацикливается.
Если же сброс прерывания осуществлять и путем выполнения команды, и установкой бита в USBEPINTCLR - то все работает замечательно.

Как то реальность расходится с опсанием процесса:
Цитата("LPC23XX User manual")
12.11 Select Endpoint/Clear Interrupt (Command: 0x40 - 0x5F, Data: read 1
byte)
.....
Remark: This command may be invoked by using the USBCmdCode and USBCmdData
registers, or by setting the corresponding bit in USBEpIntClr. For ease of use, using the
USBEpIntClr register is recommended.

Выходит, эти 2 действия не равнозначны?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Axel
сообщение Jun 29 2009, 10:15
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(Alechek @ Jun 29 2009, 11:28) *
В общем дело так, заметил я некую странность еще со времен 2148 - если запретить прерывание по используемой IN ep (необработке его до следующего кадра?), то больше оно не возникает. Прерывание сбрасывается только путем установки бита USBEPINTCLR. Пришлось обрабатывать всегда, даже если нет данных в направлении хоста.

А зачем его запрещать? Оно вроде как и не возникает без повода (при отсутствии передачи в хост)...
ЗЫ: Я тоже использую оба действия: в начале обработчика - команду, в конце - сбрасываю бит. Почему? Так получилось...
Go to the top of the page
 
+Quote Post
Alechek
сообщение Jun 29 2009, 11:13
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Axel @ Jun 29 2009, 16:15) *
А зачем его запрещать? Оно вроде как и не возникает без повода (при отсутствии передачи в хост)...

Возникает.
Цитата
10.4.1 USB Endpoint Interrupt Status register
All non-isochronous IN endpoints
generate an interrupt when a packet is successfully transmitted, or when a NAK
handshake is sent on the bus and the interrupt on NAK feature is enabled (see Section
13–12.3 “Set Mode (Command: 0xF3, Data: write 1 byte)” on page 352).

Возможно можно обойтись и без прервания по NAK, но я то переделывал IARовский HID когда только-только начинал разбираться с USB. И передача организовал так, что данные отправляются из кольцевого буфера в прерывании по IN ep.
Хотел запрещать прерывания если нет данных и вновь разрешать при отправке данных. Не получилось
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 29 2009, 11:46
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(Alechek @ Jun 29 2009, 14:13) *
...Возможно можно обойтись и без прервания по NAK...


Так они же возникают редко, только в случае неприятностей, при неприеме хостом пакета и предполагают обработку дисконнекта т.е. не надо без них.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jun 29 2009, 12:19
Сообщение #5


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Axel @ Jun 29 2009, 14:46) *
Так они же возникают редко, только в случае неприятностей, при неприеме хостом пакета и предполагают обработку дисконнекта т.е. не надо без них.

Они как раз возникают часто - когда хост читает пустой буфер (если нет данных или не успели поместить данные в endpoint). Хост хочет читать - присылает IN, а в ответ ему NAK (нету у нас пока ничего) - тут то и возникает это прерывание. Другое дело что без этих NAK-ных прерываний следует обходиться - как раз из-за того что они частые.
А вопрос топикстартер поднял интересный - у самого прерывание по команде SelectEP не сбрасывается (приходится дополнительно регистром пользоваться), тоже не отказался бы узнать в чем тут дело.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alechek   USB device в LPC   Jun 29 2009, 08:28
|- - Alechek   Цитата(VslavX @ Jun 29 2009, 18:19) Друго...   Jun 30 2009, 08:55
|- - Axel   Цитата(Alechek @ Jun 30 2009, 11:55) Ну ч...   Jun 30 2009, 12:08
|- - VslavX   Цитата(Alechek @ Jun 30 2009, 11:55) Ну ч...   Jun 30 2009, 13:15
|- - Alechek   Цитата(VslavX @ Jun 30 2009, 19:15) Это е...   Jul 1 2009, 06:02
|- - VslavX   Цитата(Alechek @ Jul 1 2009, 09:02) Если ...   Jul 1 2009, 08:14
|- - Alechek   Цитата(VslavX @ Jul 1 2009, 14:14) А я се...   Jul 1 2009, 11:17
|- - sonycman   Хм, если таким образом NAK многократно в течении ф...   Jul 1 2009, 12:36
||- - Alechek   Цитата(sonycman @ Jul 1 2009, 18:36) Хм, ...   Jul 1 2009, 12:50
|- - VslavX   Цитата(Alechek @ Jul 1 2009, 14:17) Так в...   Jul 1 2009, 14:08
|- - sonycman   Цитата(VslavX @ Jul 1 2009, 18:08) А пере...   Jul 1 2009, 17:39
|- - VslavX   Цитата(sonycman @ Jul 1 2009, 20:39) Хост...   Jul 2 2009, 05:31
|- - sonycman   Цитата(VslavX @ Jul 2 2009, 10:31) Думаю,...   Jul 4 2009, 13:36
- - shahr   Цитата(Alechek @ Jun 29 2009, 12:28) Выхо...   Jul 1 2009, 06:47
- - Alechek   Цитата(shahr @ Jul 1 2009, 12:47) То есть...   Jul 1 2009, 08:14


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01496 секунд с 7
ELECTRONIX ©2004-2016