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

 
 
> Прерывания ENDBUSRES и RXRSM
junkl
сообщение May 10 2007, 11:45
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Подскажите, пожалуйста, как решить следующую проблему с прерываниями UDP ENDBUSRES и RXRSM.

Пока устройство не подключено к компьютеру, постоянно идут прерывания ENDBUSRES и RXRSM (поочередно).
После подключения устройства к хосту, эти прерывания перестают генерироваться до включения Pull-up.
Прерывание ENDBUSRES мешает мне передать дескриптор устройства на хост:
подключаю устройство (на AT91RM9200) к компьютеру, включаю PullUp,
возникает прер-ие ENDBUSRES,
затем прер-ие EPOINT0 - получаю пакет SETUP (запрос дескриптора устройства),
передаю первые 8 из 18 байт,
снова прерывание по EPOINT0 - по флагу TX_COMP,
передаю следующие 8 байт дескриптора,
а вот здесь снова возникает прерывание по ENDBUSRES
и я уже никогда не передаю последние 2 байта дескриптора устройства.

Из-за чего это случается? Когда должно происходить прер-ие ENDBUSRES? Только после подключения устройства к хосту и только 1 раз?
И как отключить RXRSM?

AT91F_UDP_DisableIt(AT91C_BASE_UPD, AT91C_UPD_RXRSM) в обработчике прерывания по ENDBUSRES не помогает.

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
misyachniy
сообщение May 11 2007, 11:48
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Цитата
Прерывание ENDBUSRES мешает мне передать дескриптор устройства на хост:
подключаю устройство (на AT91RM9200) к компьютеру, включаю PullUp,
возникает прер-ие ENDBUSRES,
затем прер-ие EPOINT0 - получаю пакет SETUP (запрос дескриптора устройства),
передаю первые 8 из 18 байт,
снова прерывание по EPOINT0 - по флагу TX_COMP,
передаю следующие 8 байт дескриптора,
а вот здесь снова возникает прерывание по ENDBUSRES
и я уже никогда не передаю последние 2 байта дескриптора устройства.


Это типичный "глюк" Windows который вводит в ступор программистов.
Windows посылает запрос с разрешенной длиной ответа 256 байт, а реально после приема первого пакета в 8 байт(или 16 зависит от длины эндпоита) Сразу генерит сброс шины.
По приему сигнала ENDBUSRES устройство должно прекратить передачу.
Затем Windows определив длину ответа, еще раз пошлет запрос с разрешенной длиной ответа равной длине дескриптора.
Но в любом случае ENDBUSRES нужно отрабатывать одинаково.

C RXRSM у меня тоже были проблемы(SAM7S128)
Некорректно был составлен стартап от IAR

После добавления 8 сбросов контроллеру прерывания, до разрешения прерываний
Код
  for (j=0; j<8; j++) AT91C_BASE_AIC->AIC_EOICR = 0;

Все заработало.

О "глюке" Windows я читал по моему здесь, в конце документа:
http://www.beyondlogic.org/usbnutshell/usb-in-a-nutshell.pdf
Go to the top of the page
 
+Quote Post
junkl
сообщение May 17 2007, 11:28
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Цитата(misyachniy @ May 11 2007, 15:48) *
Это типичный "глюк" Windows который вводит в ступор программистов.
Windows посылает запрос с разрешенной длиной ответа 256 байт, а реально после приема первого пакета в 8 байт(или 16 зависит от длины эндпоита) Сразу генерит сброс шины.
По приему сигнала ENDBUSRES устройство должно прекратить передачу.
Затем Windows определив длину ответа, еще раз пошлет запрос с разрешенной длиной ответа равной длине дескриптора.
Но в любом случае ENDBUSRES нужно отрабатывать одинаково.

C RXRSM у меня тоже были проблемы(SAM7S128)
Некорректно был составлен стартап от IAR

После добавления 8 сбросов контроллеру прерывания, до разрешения прерываний
Код
  for (j=0; j<8; j++) AT91C_BASE_AIC->AIC_EOICR = 0;

Все заработало.

О "глюке" Windows я читал по моему здесь, в конце документа:
http://www.beyondlogic.org/usbnutshell/usb-in-a-nutshell.pdf


Спасибо, эта информация мне помогла. Но только не пойму, что конкретно в стартапе у вас было неверно? У меня, например, в функции LowLevelInit есть 8 сбросов контроллеру прерывания до разрешения прерываний, но прерывания по флагу RXRSM все равно генерятся.
В PDF-ке написано, что после ресета эти прер-ия действительно разрешены, но я их запрещаю в обработчике прерывания по ENDBUSRES, а они все равно идут.
Не подскажите, в чем может быть проблема?
Go to the top of the page
 
+Quote Post
misyachniy
сообщение May 17 2007, 12:05
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Цитата(junkl @ May 17 2007, 14:28) *
Спасибо, эта информация мне помогла. Но только не пойму, что конкретно в стартапе у вас было неверно? У меня, например, в функции LowLevelInit есть 8 сбросов контроллеру прерывания до разрешения прерываний, но прерывания по флагу RXRSM все равно генерятся.
В PDF-ке написано, что после ресета эти прер-ия действительно разрешены, но я их запрещаю в обработчике прерывания по ENDBUSRES, а они все равно идут.
Не подскажите, в чем может быть проблема?


Может от того что SAM7S уже скоро как два года выпускается а документация все preliminary? ;-)

По моему у нас работало корректно.
Попробуйте RXRSM обрабатывать - то есть просто сбрасывайте.
По включению питания может случайно взвестись.
Go to the top of the page
 
+Quote Post
junkl
сообщение May 17 2007, 13:19
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Цитата(misyachniy @ May 17 2007, 16:05) *
Может от того что SAM7S уже скоро как два года выпускается а документация все preliminary? ;-)

По моему у нас работало корректно.
Попробуйте RXRSM обрабатывать - то есть просто сбрасывайте.
По включению питания может случайно взвестись.


С документацией все в порядке, у меня к тому же AT91RM9200, а не SAM7S.
Но все-равно спасибо smile.gif
А Что по этому поводу изменилось в последней документации для SAM7S по сравнению с preliminary?
Go to the top of the page
 
+Quote Post
misyachniy
сообщение May 17 2007, 14:24
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Цитата(junkl @ May 17 2007, 16:19) *
С документацией все в порядке, у меня к тому же AT91RM9200, а не SAM7S.
Но все-равно спасибо smile.gif
А Что по этому поводу изменилось в последней документации для SAM7S по сравнению с preliminary?


Она по прежнему preliminary:
http://www.atmel.com/dyn/products/datashee...ily_id=605#1586
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 05:55
Рейтинг@Mail.ru


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