|
Контроллер повисает после перезапуска приложения, если при этом происходила передача данных по USB от контроллера приложению, at91sam7s |
|
|
|
Jun 24 2010, 11:30
|
Местный
  
Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241

|
Девайс принимает данные по некому протоколу, преобразует их в нужный формат и передает по USB на ПК. Если прекратить передавать по этому протоколу данные девайсу, а затем закрыть приложение на ПК, то при следующем запуске приложения девайс нормально определяется и работает. Но, если во время приема девайсом данных и, соответственно, передачей их по USB на ПК выйти из приложения, то девайс повисает и при следующем запуске приложения уже не определяется. Приходится передергивать USB-кабель девайса и еще раз перезапускать приложение. Только после этого девайс начинает работать. Получается в FIFO UDP девайса остаются непрочитанные приложением данные. При закрытии приложения девайсу посылается команда Turn off. Чтобы очистить FIFO использовал сброс конечной точки по команде Turn off: Код AT91C_BASE_UDP->UDP_RSTEP |= AT91C_UDP_EPINT1; AT91C_BASE_UDP->UDP_RSTEP &= ~(AT91C_UDP_EPINT1); ... не помогает. По этой же команде Turn off пробовал производить программный сброс процессора и периферии 2-мя способами: 1. Код ((void (*)())0x0000)(); 2. Код #define AT91C_RSTC_KEY_MY ((unsigned int) 0xA5 << 24) // (RSTC) Password AT91C_BASE_RSTC->RSTC_RCR = AT91C_RSTC_KEY_MY | AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST; ... тоже не помогло. Какие еще возможны решения этой проблемы? Заранее благодарен!
|
|
|
|
|
 |
Ответов
|
Jun 25 2010, 08:55
|
Местный
  
Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241

|
Проблему локализовал. Если во время приема девайсом данных от некого источника и передачи их по USB на ПК мы перезагружаем приложение, то приложение повторно балгополучно открывает девайс и производит в него запись команд, но девайс не отвечает. Дело в том, что при перезагрузке приложения в FIFO UDP контролера остаются несчитанные данные, а при запуске приложения сначала запрашивается серийный номер девайса, но так как у нас в FIFO в этот момент неизвестно что и неизвестно какого размера, то происходит сбой - readfile считывает неизвестно что. Поэтому я хочу при закрытии приложения, по комнаде "Turn Off" сбрасывать конечную точку IN с помощью регистра UDP_RSTEP, но перед этим необходимо послать хосту Stall и дождаться подтверждения. Привожу код команды "Turn Off": Код __ramfunc void Turn_off() { AT91C_BASE_SYS->PIOA_IDR = 0xffffffff;
//посылаем Stall хосту и ждем подтверждения pUdp->UDP_CSR[0] |= AT91C_UDP_FORCESTALL; while(!(pUdp->UDP_CSR[0] & AT91C_UDP_ISOERROR)); pUdp->UDP_CSR[0] &= ~(AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR); while (pUdp->UDP_CSR[0] & (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR)); //Сброс конечной точки AT91C_BASE_UDP->UDP_RSTEP |= AT91C_UDP_EPINT1; AT91C_BASE_UDP->UDP_RSTEP &= ~AT91C_UDP_EPINT1; Видимо я что-то упустил, так как в таком виде проблему решить всерано не удалось.
|
|
|
|
|
Jun 25 2010, 09:24
|
Местный
  
Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241

|
Цитата(aaarrr @ Jun 25 2010, 15:14)  Состояние STALL Bulk-точки нельзя снимать просто так в произвольный момент времени, это должен делать хост командой Clear Feature. Выполнять сброс точки следует именно по этой команде. Тогда когда мне делать сброс конечной точки. Какой-то флаг ждать? Цитата(aaarrr @ Jun 25 2010, 15:14)  Т.е. при считывании серийного номера readfile все равно возвращает мусор? ReadFile(PipeIn, &buf_r, 3, &RealRead, NULL); То есть, считываю 3 байта, RealRead = 0 и в buf_r мусор.
|
|
|
|
Сообщений в этой теме
Bulat Контроллер повисает после перезапуска приложения, если при этом происходила передача данных по USB от контроллера приложению Jun 24 2010, 11:30 aaarrr Цитата(Bulat @ Jun 24 2010, 15:30) При за... Jun 24 2010, 11:43 Bulat Цитата(aaarrr @ Jun 24 2010, 17:43) А кон... Jun 24 2010, 11:55  aaarrr Цитата(Bulat @ Jun 24 2010, 15:55) Точно ... Jun 24 2010, 12:06   Bulat Цитата(aaarrr @ Jun 24 2010, 18:06) А из ... Jun 24 2010, 12:46    aaarrr Цитата(Bulat @ Jun 24 2010, 16:46) По иде... Jun 24 2010, 13:11     Bulat Цитата(aaarrr @ Jun 24 2010, 19:11) Еще р... Jun 24 2010, 13:23      aaarrr Цитата(Bulat @ Jun 24 2010, 17:23) Вы име... Jun 24 2010, 13:40       Bulat Цитата(aaarrr @ Jun 24 2010, 19:40) Тогда... Jun 24 2010, 13:53 aaarrr Три раза перечитал и ничего ровным счетом не понял... Jun 24 2010, 14:01 Bulat Цитата(aaarrr @ Jun 24 2010, 20:01) Три р... Jun 24 2010, 14:24 aaarrr Сбрасывать процессор (и, соответственно, модуль UD... Jun 24 2010, 14:27 Bulat Цитата(aaarrr @ Jun 24 2010, 20:27) Сбрас... Jun 24 2010, 14:46 aaarrr Для начала локализовать проблему, т.е. найти где, ... Jun 24 2010, 15:02 toweroff Цитата(aaarrr @ Jun 24 2010, 19:02) если ... Jun 24 2010, 19:32   aaarrr Цитата(Bulat @ Jun 25 2010, 13:24) Тогда ... Jun 25 2010, 09:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|