|
Помогите с at90usb162. |
|
|
|
Aug 1 2013, 06:22
|
Группа: Участник
Сообщений: 12
Регистрация: 9-04-11
Пользователь №: 64 241

|
День добрый. Обращаюсь за помощью-подсказкой. Начал изучение интерфейса USB, для этого приобрёл контроллер at90usb162. Решил познать всё с нуля. Проштудировав datasheet, и прочую литературу занялся написание прошивки на языке С в AVR Studio 4. Написав пару программа моргания диодом и ответом на нажатие кнопочки, решил приступить к написанию программы для USB. Сейчас затык на этапе получения пакета SETUP от хоста т.е. ПК. Подскажите, пожалуйста, где ошибка. Код прошивки прилагается. CODE #include <avr/io.h> #include <avr/wdt.h> #include <avr/power.h>
#define F_CPU 16000000UL
#include <util/delay.h>
int main() { DDRC |= 1 << DDC6; // Порт С - как выход
MCUSR &= ~(1 << WDRF); wdt_disable();
clock_prescale_set(clock_div_1);
//CLKPR = 0x80; // Бит разрешение изменения делителя //CLKPR = 0x00; // Установка делителя на 1 F = 16 MHz PORTC |= (1 << PC6); // РС6 - зажечь диод //REGCR = (1 << REGDIS);
UDIEN = 0x00; // UDINT = 0x00; //
USBCON |= (1 << USBE); USBCON &= ~(1 << FRZCLK); PLLCSR |= (1 << PLLP0); // Установить делитель PLL if ((PLLCSR & 0x1C) == 0x04) PORTC = 0x00; // Потушить диод PLLCSR |= (1 << PLLE); // Enable PLL while((PLLCSR & 0x01) != 0x01) // Захват в петле PLL PORTC = 0x00; // Потушить диод PORTC |= (1<<PC6); // РС6 - зажечь диод /*------Начало настройки нулевой КТ------*/ UENUM = 0x00; // Нулевая конечая точка //UECONX |= 0x29; // Бит разрешения работы КТ + бит сброса переключения данных UECONX |= (1 << STALLRQ); UECONX |= (1 << EPEN); // Бит разрешения работы КТ + бит сброса переключения данных //UECFG0X = 0x81; // Bulk, in //UECFG0X = 0x00; // Control, out //UECFG0X = 0x01; // Control, in //UECFG1X = 0x36; // 64 байта, 2-ой банк, выделение буфера UECFG1X = 0x32; // 64 байта, 1 банк, выделение буфера //UECFG1X = 0x10; // 16 байт, 1 банк, очистка буфера while ((UESTA0X & 0x80) != 0x80) // Проверка корректности настройки КТ PORTC = 0x00; // Потушить диод, диод горит - КТ сформировалась корректно*/ /*------Конец настройки КТ------*/ PORTC |= (1<<PC6); // РС6 - зажечь диод //UERST |= 0x01; // Сброс нулевой конечной точки //UERST = 0x00; // Очистка, для завершения броса и начала использования FIFO. UENUM = 0x00; // Выбор нулевой КТ UDCON &= ~(1 << DETACH); while((UDINT & 0x04) != 0x04) PORTC = 0x00; // Потушить диод, ожидание флага Start of Frame PORTC |= (1<<PC6); // РС6 - зажечь диод UDINT &= ~(1 << SOFI); while((UEINTX & 0x08) != 0x08) PORTC = 0x00; // Потушить диод, ожидание пакета SETUP, бит RXSTPI PORTC |= (1<<PC6); // РС6 - зажечь диод
while(1); return 0; }
Сообщение отредактировал IgorKossak - Aug 1 2013, 06:31
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
 |
Ответов
|
Aug 1 2013, 11:15
|
Группа: Участник
Сообщений: 12
Регистрация: 9-04-11
Пользователь №: 64 241

|
Остаётся вопрос, почему после того как ловится бит прихода SOF, бит прихода маркера SETUP не устанавливается?
|
|
|
|
|
Aug 1 2013, 11:40
|
Частый гость
 
Группа: Участник
Сообщений: 157
Регистрация: 10-05-13
Пользователь №: 76 788

|
Цитата(arbuz @ Aug 1 2013, 15:15)  Остаётся вопрос, почему после того как ловится бит прихода SOF, бит прихода маркера SETUP не устанавливается? Вот честно, если Вы будете упираться в аппаратный уровень потратите напрасно много времени. С USB все всегда неоднозначно. И много зависит от железа. Вам правильно подсказали. Возьмите ГОТОВЫЙ пример HID устройства на USB для AT90USB162 и перелопатьте код под свои нужды. В свое время быстро и незатейливо удалось реализовать CDC+HID на данной меге. И HID там простой и очень дружелюбный. А если хотите все таки USB узнать "от сохи", тогда начинать надо с CY7C68013 и FX2 Development Guide. Вот там да, все очень корректно. Можно лазить с осциллографом по шине, ловить биты и узнать много, очень много абсолютно бесполезной информации. Если только Вы не собираетесь корку на USB писать руками
Сообщение отредактировал fractcon - Aug 1 2013, 11:42
--------------------
Скажи нет международному терроризму... не покупай Pepsi Cola.
|
|
|
|
|
Aug 8 2013, 19:15
|
Группа: Участник
Сообщений: 12
Регистрация: 9-04-11
Пользователь №: 64 241

|
Цитата(fractcon @ Aug 1 2013, 15:40)  Вот честно, если Вы будете упираться в аппаратный уровень потратите напрасно много времени. С USB все всегда неоднозначно. И много зависит от железа. Вам правильно подсказали. Возьмите ГОТОВЫЙ пример HID устройства на USB для AT90USB162 и перелопатьте код под свои нужды. В свое время быстро и незатейливо удалось реализовать CDC+HID на данной меге. И HID там простой и очень дружелюбный. А если хотите все таки USB узнать "от сохи", тогда начинать надо с CY7C68013 и FX2 Development Guide. Вот там да, все очень корректно. Можно лазить с осциллографом по шине, ловить биты и узнать много, очень много абсолютно бесполезной информации. Если только Вы не собираетесь корку на USB писать руками  Если не заруднит, не могли бы выложить программу созданного вами HID устройства на at90usb162. Заранее спасибо.
Сообщение отредактировал arbuz - Aug 8 2013, 19:15
|
|
|
|
Сообщений в этой теме
arbuz Помогите с at90usb162. Aug 1 2013, 06:22 kovigor Цитата(arbuz @ Aug 1 2013, 09:22) решил п... Aug 1 2013, 08:27 arbuz Спасибо за совет. Читал и Гука, и Агурова, и перев... Aug 1 2013, 08:50 kovigor Цитата(arbuz @ Aug 1 2013, 11:50) Спасибо... Aug 1 2013, 08:59 Rimsky Цитата(arbuz @ Aug 1 2013, 17:50) Спасибо... Aug 13 2013, 11:12 vgo1 Цитата(arbuz @ Aug 1 2013, 10:22) День до... Aug 11 2013, 12:31 Alex11 Я тут давным-давно выкладывал проект под 162 мегу:... Aug 11 2013, 22:16 controller_m30 Моё предложение такое, что надо сначала проверить ... Aug 13 2013, 17:15 arbuz Спасибо всем за подсказки, результат - положительн... Aug 15 2013, 07:05 vgo1 После того как поймали RXSTPI. сделайте 8 последов... Aug 15 2013, 10:21 arbuz Цитата(vgo1 @ Aug 15 2013, 14:21) После т... Aug 16 2013, 12:18 arbuz Процесс пошёл, пришёл пакет SETUP, флаг RXSTPI уст... Sep 2 2013, 06:43 arbuz Хост присылает запрос GET_DESCRIPTOR, ответом высы... Nov 25 2013, 11:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|