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

 
 
> как обработать установочный пакет usb
sergey sva
сообщение Feb 10 2009, 14:30
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Разбираюсь с работой усб немного не понятно,с пакетами,
к примеру: программа приступила к обработки прерывания, определила какая конечная точка вызвала это прерывание,
определила, что поступил установочный пакет if (save_reg_csrX & AT91C_UDP_RXSETUP) {
какие действия нужно проделать дальше что бы обработать этот пакет? Или для at91sam7 его не надо обрабатывать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergey sva
сообщение Feb 14 2009, 15:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Пытался отправит полностью весь дескриптор конфигурации, но хост принимает(установкой TXCOMP) только первые 8 байт после, завивает в ожидание, может заметите что то неправильное.
на этой строчке while(!(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXCOMP));
CODE

void get_deskriptor(DWORD EP,BYTE zap[]){
LONG lendes,n;
WORD lensen;
BYTE* des,FLAG_PACK = 0;
/* */
lensen = zap[7] & 0xFF;
lensen = (lensen<<8) | (zap[6] & 0xFF);
/* */

switch(zap[3]){
case DEVICE :
{
lendes = sizeof(USB_DeviceDescriptor);
des = (BYTE*) &(USB_DeviceDescriptor[0]);
break;
}
case CONFIGURATION:
{
lendes = sizeof(USB_ConfigurationDeskriptor);
des = (BYTE*) &(USB_ConfigurationDeskriptor[0]);
break;
}
case STRINGDESCRIPTOR:{
lendes = (sizeof(USB_StringDescriptor) - zap[2]);
des = (BYTE*) &(USB_StringDescriptor[zap[2]]);
}
case HIDDESCRIPTOR:{
lendes = sizeof(USB_HidDescriptor);
des = (BYTE*) &(USB_HidDescriptor[0]);
}
case REPORTDESCRIPTOR:{
lendes = sizeof(HID_ReportDescriptor);
des = (BYTE*) &(HID_ReportDescriptor[0]);
}
default:
{
stall(EP);
return;
}
}//end switch
/* --------------------------------------------------------- */
if(lensen > lendes){
if((lendes % 8) == 0 ){FLAG_PACK = 1;}else{FLAG_PACK = 0;}
}else{ lendes = lensen; } //end else
AT91C_BASE_UDP->UDP_CSR[EP] |= AT91C_UDP_DIR; // dev-> host


while(lendes > 8){
while(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXPKTRDY){}

for(n = 0; n < 8; n++){
AT91C_BASE_UDP->UDP_FDR[EP] = *(des++);
}//end for
AT91C_BASE_UDP->UDP_CSR[EP] |= AT91C_UDP_TXPKTRDY;
while(!(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXCOMP));
// вот здесь программа зависает, первый раз отправляет 8
// байт с получает подтверждение TXCOMP , во второй раз зависает
// в ожидании TXCOMP

AT91C_BASE_UDP->UDP_CSR[EP] &= ~AT91C_UDP_TXCOMP;
lendes=lendes-8;
}//end while

if(FLAG_PACK == 1){
while(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXPKTRDY){}
AT91C_BASE_UDP->UDP_CSR[EP] |= AT91C_UDP_TXPKTRDY;
while(!(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXCOMP));
AT91C_BASE_UDP->UDP_CSR[EP] &= ~AT91C_UDP_TXCOMP;
}else{
while(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXPKTRDY){}

for(n = 0; n < lendes; n++){
AT91C_BASE_UDP->UDP_FDR[EP] = *(des++);
}//end for
AT91C_BASE_UDP->UDP_CSR[EP] |= AT91C_UDP_TXPKTRDY;
while(!(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXCOMP));
AT91C_BASE_UDP->UDP_CSR[EP] &= ~AT91C_UDP_TXCOMP;

}//end else
AT91C_BASE_UDP->UDP_CSR[EP] &= ~AT91C_UDP_DIR; // host-> dev
}//end get_deskriptor
//-------------------------------------------------------------------------------

Go to the top of the page
 
+Quote Post
Sergey Reva
сообщение Feb 14 2009, 15:52
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 22-04-07
Из: Poltava/Kharkov
Пользователь №: 27 243



Цитата(sergey sva @ Feb 14 2009, 17:36) *
..
Код
AT91C_BASE_UDP->UDP_CSR[EP] |= AT91C_UDP_TXPKTRDY;
      while(!(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXCOMP));
      AT91C_BASE_UDP->UDP_CSR[EP] &= ~AT91C_UDP_TXCOMP;

..

Хочу обратить внимание, что при доступе к регистру UDP_CSR Atmel рекомендует использовать следующие макросы, хотя в своих же примерах их не использует smile.gif

doc6175.pdf (35.6.10 UDP Endpoint Control and Status Register)
Цитата
WARNING: Due to synchronization between MCK and UDPCK, the software application must wait for the end of the write
operation before executing another write by polling the bits which must be set/cleared.
//! Clear flags of UDP UDP_CSR register and waits for synchronization
#define Udp_ep_clr_flag(pInterface, endpoint, flags) { \
pInterface->UDP_CSR[endpoint] &= ~(flags); \
while ( (pInterface->UDP_CSR[endpoint] & (flags)) == (flags) ); \
}
//! Set flags of UDP UDP_CSR register and waits for synchronization
#define Udp_ep_set_flag(pInterface, endpoint, flags) { \
pInterface->UDP_CSR[endpoint] |= (flags); \
while ( (pInterface->UDP_CSR[endpoint] & (flags)) != (flags) ); \
}
Note: In a preemptive environment, set or clear the flag and wait for a time of 1 UDPCK clock cycle and 1peripheral clock cycle. However,
RX_DATA_BLK0, TXPKTRDY, RX_DATA_BK1 require wait times of 3 UDPCK clock cycles and 3 peripheral clock cycles
before accessin DPR.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergey sva   как обработать установочный пакет usb   Feb 10 2009, 14:30
- - aaarrr   Цитата(sergey sva @ Feb 10 2009, 17:30) к...   Feb 10 2009, 14:38
- - sergey sva   понятно , будем разбирать. Есть простой вопрос на...   Feb 10 2009, 16:20
|- - aaarrr   Цитата(sergey sva @ Feb 10 2009, 19:20) в...   Feb 10 2009, 16:33
- - rezident   Какой-то немного странный union, вы wREqest[4] мож...   Feb 10 2009, 16:37
|- - aaarrr   Цитата(rezident @ Feb 10 2009, 19:37) есл...   Feb 10 2009, 16:44
- - sergey sva   ЦитатаА DWORD у Вас - это short? Как-то нестандарт...   Feb 10 2009, 16:43
- - sergey sva   Вот набросал не большой разборщик установочного п...   Feb 10 2009, 17:20
- - aaarrr   Ну, это пока еще не разборщик Не вижу смысла объ...   Feb 10 2009, 17:28
- - sergey sva   ЦитатаНу, это пока еще не разборщик smile.gif Буде...   Feb 10 2009, 19:48
|- - aaarrr   Цитата(sergey sva @ Feb 10 2009, 22:48) В...   Feb 10 2009, 20:36
- - sergey sva   исправил. Еще есть вопрос читаю по ходу книгу агур...   Feb 11 2009, 14:14
|- - aaarrr   Цитата(sergey sva @ Feb 11 2009, 17:14) д...   Feb 11 2009, 14:18
- - sergey sva   Вот функция которая записывает в конечную точку ба...   Feb 11 2009, 19:32
|- - aaarrr   Цитата(sergey sva @ Feb 11 2009, 22:32) К...   Feb 11 2009, 20:32
- - sergey sva   решил немного с готовыми примерами разобраться, а ...   Feb 12 2009, 19:05
|- - aaarrr   Цитата(sergey sva @ Feb 12 2009, 22:05) И...   Feb 12 2009, 19:56
|- - amw   Цитата(sergey sva @ Feb 12 2009, 21:05) К...   Feb 20 2009, 12:16
- - sergey sva   ЦитатаА компилятор какой? yagarto(GCC) эта строч...   Feb 12 2009, 20:57
- - sergey sva   в процессе отправки репорта(дескриптора) проверяет...   Feb 14 2009, 11:11
|- - aaarrr   Цитата(sergey sva @ Feb 14 2009, 14:11) П...   Feb 14 2009, 14:51
- - sergey sva   Еще появился вопрос по поводу дескриптора конфигу...   Feb 14 2009, 15:08
- - aaarrr   Отправлять надо все - дескриптор конфигурации, инт...   Feb 14 2009, 15:10
|- - Sagittarius   Цитата(sergey sva @ Feb 14 2009, 18:36) П...   Feb 17 2009, 08:13
- - aaarrr   И еще один момент: флаг RXSETUP должен быть сброше...   Feb 14 2009, 16:06
- - sergey sva   Еще во время передачи дескриптора, устанавливаетс...   Feb 16 2009, 19:03
|- - aaarrr   Цитата(sergey sva @ Feb 16 2009, 22:03) т...   Feb 16 2009, 21:38
- - sergey sva   Про END_BUS_RES не знал, добавил но ситуация такая...   Feb 18 2009, 10:19
|- - aaarrr   Цитата(sergey sva @ Feb 18 2009, 13:19) ....   Feb 18 2009, 10:58
- - sergey sva   нет не забыл, zap[8]; //установочный пакет. /* *...   Feb 18 2009, 11:26
- - sergey sva   Цитата/* Кстати чему pD равен в этом месте? */ pD ...   Feb 22 2009, 13:59


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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 08:43
Рейтинг@Mail.ru


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