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

 
 
 
Reply to this topicStart new topic
> USB Bulk firmware, www.tnkernel.ru
V_l_a_d
сообщение Sep 15 2007, 17:33
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 15-09-07
Пользователь №: 30 562



Всем привет.

При разборе возник один вопросик в данной части кода (tn_user.c - tn_usb_int_func):
Код
...
if(rUSBDevIntSt & EP_SLOW)     //-- Endpoints
   {
      ep_int_status = rUSBEpIntSt;

      //-- EP0 - Control
      if(ep_int_status & 1)
         tn_usb_EP0_rx_int_func(&gUSBInfo); //-- OUT
      else if(ep_int_status & (1<<1))
         tn_usb_EP0_tx_int_func(&gUSBInfo); //-- IN

      //-- EP2 - Bulk
      if(ep_int_status & (1<<EP2_RX))
         tn_usb_ep_rx_int(&gEP2RX_EI); //-- OUT
      if(ep_int_status & (1<<EP2_TX))
         tn_usb_ep_tx_int(&gEP2TX_EI); //-- IN
      //-- EP5 - Bulk
      if(ep_int_status & (1<<EP5_RX))
         tn_usb_ep_rx_int(&gEP5RX_EI); //-- OUT
      if(ep_int_status & (1<<EP5_TX))
        tn_usb_ep_tx_int(&gEP5TX_EI); //-- IN

      rUSBDevIntClr = EP_SLOW; // clear EP_SLOW
   }
...


А какой смысл запихивать вот это
Код
if(ep_int_status & (1<<EP2_TX))
         tn_usb_ep_tx_int(&gEP2TX_EI);

и это
Код
if(ep_int_status & (1<<EP5_TX))
        tn_usb_ep_tx_int(&gEP5TX_EI);

в этот обработчик прерываний?
Go to the top of the page
 
+Quote Post
V_l_a_d
сообщение Sep 16 2007, 10:27
Сообщение #2





Группа: Новичок
Сообщений: 3
Регистрация: 15-09-07
Пользователь №: 30 562



Надеюсь, что кто-то всё таки ответит. Конкретизирую вопрос.

На сколько я понял tn_usb_int_func это единственное место, откуда данные могут быть отправлены хосту. Их отправкой занимается tn_usb_ep_tx_int(EP_INFO * ei), но вызов этой функции произойдет, только в том случае, если (ep_int_status & (1<<EP2_TX)) != 0, т.е. 5 бит регистра USBEpIntSt будет установлен в "1", но это возможно только в том случае, если какие то данные с этой конечной точки уже отправлены. А поскольку tn_usb_ep_tx_int вызывается только в обработчике прерывание от USB, то пу сути получается замкнутый круг и данные никогда не отправятся хосту.

Однако в реале прошивка отлично работает -> чего-то непонимаю я. Может кто-нибудь ткнуть пальцем: где всё таки инициируется отправка данных хосту?

Заранее спасибо.
Go to the top of the page
 
+Quote Post
r_dot
сообщение Sep 16 2007, 15:10
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 237
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 791



Цитата(V_l_a_d @ Sep 16 2007, 14:27) *
... где всё-таки инициируется отправка данных хосту?


Нигде. Инициировать отправку данных нельзя. Хост сам их запрашивает и забирает, если они есть (подготовлены в буфере). То есть, данные для чтения надо заранее подготовить в буфере и снять NAK. Хост забирает их сам в произвольный момент времени (речь о BULK) и ставит NAK. После этого и генерируется прерывание, что данные забраны и можно заполнять буфер очередной порцией.
В начале работы программы надо не забыть правильно инициировать буфер, чтобы исключить неправильное (пустое) первое чтение.
Go to the top of the page
 
+Quote Post
V_l_a_d
сообщение Sep 16 2007, 15:33
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 15-09-07
Пользователь №: 30 562



Цитата(r_dot @ Sep 16 2007, 18:10) *
Нигде. Инициировать отправку данных нельзя. Хост сам их запрашивает и забирает, если они есть (подготовлены в буфере). То есть, данные для чтения надо заранее подготовить в буфере и снять NAK. Хост забирает их сам в произвольный момент времени (речь о BULK) и ставит NAK. После этого и генерируется прерывание, что данные забраны и можно заполнять буфер очередной порцией.
В начале работы программы надо не забыть правильно инициировать буфер, чтобы исключить неправильное (пустое) первое чтение.


Спасибо. Уже понял абсурдность своего вопроса, читая Агурова.
Go to the top of the page
 
+Quote Post

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

 


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


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