Mega32u4 0 23 апреля, 2012 Опубликовано 23 апреля, 2012 · Жалоба Работаю с виртуальным 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 ) ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 (изменено) · Жалоба Мне тоже интересно, т.к. собираюсь купить данный проц ... __interrupt void USB_Endpoint_interrupt() вообще вызывается? Может Вы его где-то запретили или не включили? Как это у атмела сделано? PS. Ихний фреймворк я пока не качал. Изменено 24 апреля, 2012 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mega32u4 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба У атмел этот вектор в примере не используется. Прерывания разрешил, поставил биты RXOUTE , TXINE. При старте один раз заходит в него но все биты прерываний конечных точек в регистре UEINT молчат. RXOUTI и TXINI в регистре UEINTX тоже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dx! 0 27 апреля, 2012 Опубликовано 27 апреля, 2012 · Жалоба Апноты атмела не очень хорошы. Точнее очень нехороши. Рекомендую пощупать LUFA - там получше почти всё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться