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

 
 
 
Reply to this topicStart new topic
> USB Virtual COM mega32u4
Mega32u4
сообщение Apr 23 2012, 17:41
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 19-04-12
Пользователь №: 71 457



Работаю с виртуальным COM портом (пример с сайта Atmel, называется AVR272). вырезал все что связанно с примером из файла cdc_task.c

Принимаю по прерыванию символ из терминала на компьютере и отвечаю содержимым массива data_tx в случае если пришел символ "q".
написал такой код:

Код

     Usb_select_endpoint(RX_EP);        //выбираем OUT точку
     if (Is_usb_receive_out())          //  если прерывание по приему данных; UEINTX&(1<<RXOUTI)
     {    
        Usb_ack_control_out();         // подтверждение; UEINTX &= ~(1<<RXOUTI);
        data_rx = Usb_read_byte();  //читаем что пришло
        Usb_ack_fifocon();                 //  освобождение банка точки OUT; UEINTX &= ~(1<<FIFOCON);
        if (data_rx == 'q')                 // если пришел символ "q"
        {
           Usb_select_endpoint(TX_EP);      //выбираем IN точку
           if (Is_usb_in_ready())               //  Если прерывание по готовности передатчика;  UEINTX&(1<<TXINI)
           {
             Usb_send_control_in();                                 // подтверждение обработки прерывания; UEINTX &= ~(1<<TXINI);  
             usb_send_packet(TX_EP,(U8*)&data_tx, 7);      // отправляем   data_tx
             Usb_ack_fifocon();                                       // сбрасываем бит  FIFOCON для отправки; UEINTX &= ~(1<<FIFOCON);
           }
            
        }            
     }




и вставил его в обработчик Прерываний конечных точек


#pragma vector = USB_Endpoint_vect
__interrupt void USB_Endpoint_interrupt()
{
//сюда
}

не заработало, теперь вставил его в обработчик прерываний usb

#pragma vector = USB_General_vect
__interrupt void usb_general_interrupt()
{
//сюда
}

Работает как часы. Почему? как заставить все это работать в USB_Endpoint_vect? согласно даташиту именно этот вектор отвечает за прерывания использованные мной (RXOUTI, TXINI ) ...

Go to the top of the page
 
+Quote Post
hd44780
сообщение Apr 24 2012, 07:24
Сообщение #2


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Мне тоже интересно, т.к. собираюсь купить данный проц ...

__interrupt void USB_Endpoint_interrupt() вообще вызывается? Может Вы его где-то запретили или не включили?
Как это у атмела сделано?

PS.
Ихний фреймворк я пока не качал.

Сообщение отредактировал hd44780 - Apr 24 2012, 07:26


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Mega32u4
сообщение Apr 24 2012, 09:02
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 19-04-12
Пользователь №: 71 457



У атмел этот вектор в примере не используется. Прерывания разрешил, поставил биты RXOUTE , TXINE.
При старте один раз заходит в него но все биты прерываний конечных точек в регистре UEINT молчат. RXOUTI и TXINI в регистре UEINTX тоже.
Go to the top of the page
 
+Quote Post
Dx!
сообщение Apr 27 2012, 11:21
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 108
Регистрация: 6-02-09
Из: Новочеркасск
Пользователь №: 44 469



Апноты атмела не очень хорошы. Точнее очень нехороши.

Рекомендую пощупать LUFA - там получше почти всё.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:57
Рейтинг@Mail.ru


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