Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MEGA128 + USB на USBN9604
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
nagserg
Решил изучить USB. Вот собрал USB на USBN9604 с сайта USB Masters, только вместо AT90S8515 поставил MEGA128, перевел программу в CodeVisionAVR, залил в МЕГУ, при подсоединении к компу, он (комп) даже не видит, что подключено новое устройство, в чем может быть проблема?
m16
попытался скачать шит на USBN9604 с указанного сервера - ошибка port80. так думаю что вам нужно качнуть драйвер у призводителя
MALLOY2
драйвер сдесь не причем, до него еще дело не дошло, или дошло но стоит уже какойцто кривой драйвер.


1) подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.

2) скорее всего у вас что то в схеме не то, полярность проводов D+ D - не ту резистора подтягивающего и т.д.
nagserg
Цитата(MALLOY2 @ Jul 27 2005, 17:28)
подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.
*
При включении сейчас появляется в правом нижнем углу "USB Device Not Recognized". И в менеджере устройств появляется Unknown Device.
BVU
Если Вы правильно организовали USB стек-протокол(структуры данных и функции ...) для USBN9604, то теперь действительно нужен драйвер для PC обслуживаюший Ваше HID устройство. Так же необходимо знать библиотечные функции этого драйвера(если они не стандартны) чтобы написать PC программу для связи с Вашей embedded системой.
P.S. Я так думаю что Вам необходима максимальная скорость передачи данных по USB? Поскольку Вы используете USBN9604... Но если такой критерий не лимитирует не проще было бы использовать стандартные преобразователи FT232B/MFT245BM, CP2101/CP2102 или хотя бы проект Igor Cesko на AT90S2313. Это было бы предельно просто и не возникло бы проблем с созданием USB интерфейса "с нуля"!
pulsar-17
Цитата(nagserg @ Jul 28 2005, 09:15)
Цитата(MALLOY2 @ Jul 27 2005, 17:28)
подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.
*
При включении сейчас появляется в правом нижнем углу "USB Device Not Recognized". И в менеджере устройств появляется Unknown Device.
*


Эти сообщения скорее всего говорят о том, что устройство подключено к порту, но не отвечает на запросы или отвечает криво(на этом не одну собаку скущал smile.gif). Как правило, это связано с неправильной инициализацией самой USBN, кривым описанием дескрипторов или софтом. На кривоту дескрипторов нарывался при переходе на другой компилер, он структуры с описанием config, interface и endpoint дескрипторов расположил не в заданном порядке, а наоборот. Итог те же сообщения винды.
Запрос конфигурации проходит в два этапа:
1) запрос собственно config дескриптора(в нем прописана помимо его собственного размена размер всей конфигурации в байтах складывающийся из: размер config_desc + размер interface_desc * количество интерфейсов + размер всех endpoint_desc для всех интерфейсов ).
2) запрос всей конфигурации. Он отличается от первого только тем, что в запросе от хоста передается размер всей конфигерации, а не размер только config_desc.
Дескрипторы должны передаваться строго иерархически:
config_desc
interface_desc_1
endpoint_desc_1_1
...
endpoint_desc_1_N
interface_desc_2
endpoint_desc_2_1
...
endpoint_desc_2_N
...
Если это нарушить, то ничего работать небудет. На это надо обратить особое внимание при смене компилятора.

Проверьте:
1. наличие частоты на 28 ноге. На схеме нет резистора на 1МОм между 26 и 27 ногами, у меня на некоторых кристаллах незапускался генератор. Если нет осциллографа можно прочитать из USBNки RID регистр, если в младших 4х разрядах не 2(3) то генератор не работает.
2. Если тактовая частота меги128 > 12МГц то работать скорее всего не будет, даже если поставить все такты ожидания на шину. У меня на меге стабильно работает при 2 тактах ожидания на частоте 11.0592МГц. Выше 12МГц нельзя !!!(см доку на USBN и мегу128) у USBN очень медленная шина!!! Можно понизить тактовую частоту меги без перепаивания кварца записав в регистр XDIV 0xff и поделив этим частоту кварца на 2.
3. генерит ли USBN прерывания и ловит ли их mega128.
4. Правильность описания и передачи device_desc.
5. Правильность формированиия PIDов
6. Правильность описания и вызачи конфигурации

А самое лутшее, если у Вас есть rs232 выведите на терминалку все запросы приходящие от хоста и ваши ответы на них. Сразу будет понятно на каком этапе все затытается.

Инициализирую так("лишнее" закоментировал):
unsigned char initUSBN9604(void)
{
unsigned short i;

/* give a soft reset, then set ints to push pull, active hi or lo */
putUSBN(_MCNTRL,SRST);
/* Wait end of reset */
while(getUSBN(_MCNTRL) & SRST);

putUSBN(_MCNTRL, VGE+INT_L_P);
i = 0x4000; while(i--);

/* checking RID */
if ((getUSBN(_RID) & 0x0f) != 0x02) return 0xff;

/* initialize the clock generator set clock freq 24MHz */
putUSBN(_CCONF, clk24);

/* set default address, enable EP0 only */
putUSBN(_FAR,AD_EN + 0x00);
putUSBN(_EPC0, 0x00);

/* set up interrupt masks */
putUSBN(_NAKMSK,NAK_O0); /* NAK evnts */
// putUSBN(_NAKMSK,NAK_O0+NAK_I2); /* NAK evnts */
putUSBN(_TXMSK, TXFIFO0+TXFIFO1+TXFIFO2+TXFIFO3); /*TX events*/
putUSBN(_RXMSK, RXFIFO0+RXFIFO1+RXFIFO2+RXFIFO3); /*RX events*/
putUSBN(_ALTMSK, RESET_A); /*ALT evnts*/
putUSBN(_MAMSK, (INTR_E + RX_EV + NAK + TX_EV + ALT));

/*enable the receiver and go operational ************************/
FLUSHTX0; /* flush TX0 and disable */
putUSBN(_RXC0,RX_EN); /* enable the receiver */

putUSBN(_NFSR,OPR_ST); /* go operational */
putUSBN(_MCNTRL,VGE+INT_L_P+NAT); /* set NODE ATTACH */

getUSBN(_ALTEV);

return 0;
}
nagserg
Цитата(pulsar-17 @ Jul 28 2005, 23:11)
Цитата(nagserg @ Jul 28 2005, 09:15)
Цитата(MALLOY2 @ Jul 27 2005, 17:28)
подключить девайс к компу в менеджере устройств посмотреть не появляется какое нибудь устройство.
*
При включении сейчас появляется в правом нижнем углу "USB Device Not Recognized". И в менеджере устройств появляется Unknown Device.
*


Эти сообщения скорее всего говорят о том, что устройство подключено к порту, но не отвечает на запросы или отвечает криво(на этом не одну собаку скущал smile.gif). Как правило, это связано с неправильной инициализацией самой USBN, кривым описанием дескрипторов или софтом. На кривоту дескрипторов нарывался при переходе на другой компилер, он структуры с описанием config, interface и endpoint дескрипторов расположил не в заданном порядке, а наоборот. Итог те же сообщения винды.
Запрос конфигурации проходит в два этапа:
1) запрос собственно config дескриптора(в нем прописана помимо его собственного размена размер всей конфигурации в байтах складывающийся из: размер config_desc + размер interface_desc * количество интерфейсов + размер всех endpoint_desc для всех интерфейсов ).
2) запрос всей конфигурации. Он отличается от первого только тем, что в запросе от хоста передается размер всей конфигерации, а не размер только config_desc.
Дескрипторы должны передаваться строго иерархически:
config_desc
interface_desc_1
endpoint_desc_1_1
...
endpoint_desc_1_N
interface_desc_2
endpoint_desc_2_1
...
endpoint_desc_2_N
...
Если это нарушить, то ничего работать небудет. На это надо обратить особое внимание при смене компилятора.

Проверьте:
1. наличие частоты на 28 ноге. На схеме нет резистора на 1МОм между 26 и 27 ногами, у меня на некоторых кристаллах незапускался генератор. Если нет осциллографа можно прочитать из USBNки RID регистр, если в младших 4х разрядах не 2(3) то генератор не работает.
2. Если тактовая частота меги128 > 12МГц то работать скорее всего не будет, даже если поставить все такты ожидания на шину. У меня на меге стабильно работает при 2 тактах ожидания на частоте 11.0592МГц. Выше 12МГц нельзя !!!(см доку на USBN и мегу128) у USBN очень медленная шина!!! Можно понизить тактовую частоту меги без перепаивания кварца записав в регистр XDIV 0xff и поделив этим частоту кварца на 2.
3. генерит ли USBN прерывания и ловит ли их mega128.
4. Правильность описания и передачи device_desc.
5. Правильность формированиия PIDов
6. Правильность описания и вызачи конфигурации

А самое лутшее, если у Вас есть rs232 выведите на терминалку все запросы приходящие от хоста и ваши ответы на них. Сразу будет понятно на каком этапе все затытается.

Инициализирую так("лишнее" закоментировал):
unsigned char initUSBN9604(void)
{
unsigned short i;

/* give a soft reset, then set ints to push pull, active hi or lo */
putUSBN(_MCNTRL,SRST);
/* Wait end of reset */
while(getUSBN(_MCNTRL) & SRST);

putUSBN(_MCNTRL, VGE+INT_L_P);
i = 0x4000; while(i--);

/* checking RID */
if ((getUSBN(_RID) & 0x0f) != 0x02) return 0xff;

/* initialize the clock generator set clock freq 24MHz */
putUSBN(_CCONF, clk24);

/* set default address, enable EP0 only */
putUSBN(_FAR,AD_EN + 0x00);
putUSBN(_EPC0, 0x00);

/* set up interrupt masks */
putUSBN(_NAKMSK,NAK_O0); /* NAK evnts */
// putUSBN(_NAKMSK,NAK_O0+NAK_I2); /* NAK evnts */
putUSBN(_TXMSK, TXFIFO0+TXFIFO1+TXFIFO2+TXFIFO3); /*TX events*/
putUSBN(_RXMSK, RXFIFO0+RXFIFO1+RXFIFO2+RXFIFO3); /*RX events*/
putUSBN(_ALTMSK, RESET_A); /*ALT evnts*/
putUSBN(_MAMSK, (INTR_E + RX_EV + NAK + TX_EV + ALT));

/*enable the receiver and go operational ************************/
FLUSHTX0; /* flush TX0 and disable */
putUSBN(_RXC0,RX_EN); /* enable the receiver */

putUSBN(_NFSR,OPR_ST); /* go operational */
putUSBN(_MCNTRL,VGE+INT_L_P+NAT); /* set NODE ATTACH */

getUSBN(_ALTEV);

return 0;
}
*


Мега работает на частоте 16МГц - в этом то и была причина. Добавил 2-й такт ожидания (1 там уже был) в процедуру чтения байта и всё нормально заработало.
drka
Такая же связка контроллер + USBN.
Проблема в том, что сигнал INT (USBN) не снимается, присутствует флаг RESET в ALTEV, хотя я его (регистр) уже считал и от хоста команды сброса точно не приходит.
Причем т.к. приоритетно отлавливаются события RX и TX, которые, соответственно нормально обрабатываются.
А вот между ними вываливается куча событий RESET.

ps прерывание меги стоит по нулевому уровню
Lynxyk
офф\ Сяду на хвост

Не совсем понял архитектуру подключения к хосту.

связка контроллер + USBN 1 штука увидится
А если их будет 8?
В случае с FTDI нужно вешать влешку типа ат93с46 с VID,PID
А вUSBN9603-4 есть некий мак контроль. Он просто отрубает каждое последующее усройство, ии же этот мак уже зашит в усбн, и соотв /USBN96хх выгодней чем FTDI, тк флешку вешать не надо??

\офф

Заранее пасип за комментарии
drka
Думаю проблем не будет. В самой USBN нет ничего отвечающего за VID и PID. Весь протокол перекладывается на "плечи" микроконтроллера.
Кстати, свой предыдущий вопрос отменяю, сам разобрался со всем.
Lynxyk
2 drka
те весь протокол реализовывается программно. а usbn типа макса, только для согласования?
ясно. пошёл тупить усбмастер заново. не видел я там пока идентификацию(суть первый пакет видимо).
Если я понял правильно, то это где то в инициализации усб?
При включении:
1.Инициализируется внутренний генератор
2.включается интрефейс
3.инициация процесса нумерации
4.конфигурируется нулевая конечная точка
5.сброс нулевой конечной точки
6.разрешение прерываний от 0 конечной точки

а когда идентификация проходит?
drka
Цитата(Lynxyk @ Nov 20 2005, 20:18) *
те весь протокол реализовывается программно. а usbn типа макса, только для согласования?
ясно. пошёл тупить усбмастер заново. не видел я там пока идентификацию(суть первый пакет видимо).
Если я понял правильно, то это где то в инициализации усб?
При включении:
1.Инициализируется внутренний генератор
2.включается интрефейс
3.инициация процесса нумерации
4.конфигурируется нулевая конечная точка
5.сброс нулевой конечной точки
6.разрешение прерываний от 0 конечной точки

а когда идентификация проходит?

может я чего не допонимаю в вопросе. Что ТЫ подразумеваешь под термином идентификация?
Нет, ЮСБН, не просто согласование - семь конечных точек, 7 FIFO, DMA и т.д.
Под перекладыванием на плечи контроллера я имелл виду процесс энумерации (ведь VID и PID нужны на этом этапе). ЮСБН, все что надо принимает и складывает в соответствующие FIFO соответствующих конечных точек, а уж что это за данные и как ими распорядиться, решает контроллер.
Я начинал делать тоже глядя на ЮСБмастерс + чтение спецификаций + мониторя всё что можно мониторить.
Alechin
Вот мой исходник драйвера USBN9604, правда с 51 контроллера. Рабочий. Хорошо откомментированный.
drka
В данный момент близок к реализации Mass Storage Device, если кому-то будет полезно могу поделиться информацией и наблюдениями.
Igor26
Цитата(drka @ Nov 24 2005, 19:50) *
В данный момент близок к реализации Mass Storage Device, если кому-то будет полезно могу поделиться информацией и наблюдениями.

Крайне интересно! Скоро самому придется заниматься этой темой.
drka
Цитата(Igor26 @ Nov 25 2005, 11:11) *
Крайне интересно! Скоро самому придется заниматься этой темой.


Спрашивай, все что знаю расскажу. :-)
Igor26
Цитата(drka @ Nov 25 2005, 09:45) *
Цитата(Igor26 @ Nov 25 2005, 11:11) *

Крайне интересно! Скоро самому придется заниматься этой темой.


Спрашивай, все что знаю расскажу. :-)

Спасибо!
IgorKossak
Немного не по теме bb-offtopic.gif
Иногда, когда дивайс не определяется, возможны и такие варианты. wink.gif
Igor26
Цитата(IgorKossak @ Nov 25 2005, 12:13) *
Немного не по теме bb-offtopic.gif
Иногда, когда дивайс не определяется, возможны и такие варианты. wink.gif


О как!!!
public32
Друзья, уже с неделю мучаюсь с usbn9604, подружить его пытаюсь с at89s8253 (знаю, что ядро не avr, но здесь меня больше вопрос интерфейса волнует).
использовал примеры UsbMasters...
Проблема в следующем - насколько я понимаю, в процессе инициализации в регистр адреса FAR не встает бит AD_EN (0x80), как следствие, устройство не отвечает хосту и на компе вылезает надпись, подключено новое устройство, устройство работает не правильно (не опознано).
на моей плате есть рабочий ЖК - туда вывожу состояния регистров (они читаются - т.е. функции USB_WR и USB_RD работают).
когда вставляю кабель в комп у устройства начинают срабатывать прерывания по алтернативному регистру, но суть события заключается либо в окончании пакета (EOP - 0x08 в регистре ALTEV) либо вообще непонятно что (0x00 в регистре ALTEV). Точнее так - сначала где-то с пару секунд висит EOP (т.е. постоянно срабатывает), а через пару секунд на компе вылезает надпись, что не опознано устройство и в ALTEV приходит только 0x00.

Если я все правильно понимаю - проблема в инициализации где-то, т.к. регистр FAR из состояния 0x00 не выходит в принципе (даже когда на всякий случай добавил USB_WR(FAR,0x80) в конце инициализации - в FAR остался 0x00)...

Нифига понять не могу что делать smile.gif или куда посмотреть еще... прям ступор какой-то...

привожу из кода функцию инициализации и на всякий функции USB_WR и USB_RD:
CODE
void Init_USBN9604(void)
{

unsigned char c[8];
unsigned char Event;

usb_cfg = 0;
address = 0;

USB_WR(MCNTRL,SRST); //Инициируем програмный сброс USBN9604
while(USB_RD(MCNTRL)&SRST); // ожидаем окончания сброса
USB_WR(MCNTRL,VGE+INT_L_P);//Выбираем режим для INTR - Low Push Pull, включаем 3.3B Voltage Regulator
NOP(0x4000); // функция задержки - название из асма позаимствовано smile.gif

if((USB_RD(RID)&0x0f)!=0x02) LCDPuts(0,4,"RID"); // чтение идентификатора устройства - если там не все в порядке - на экран сообщение
USB_WR(FAR,AD_EN+0x00); //Устанавливаем у функции Default address ВОТ ЗДЕСЬ НАЧИНАЮТСЯ ПРОБЛЕМЫ
USB_WR(EPC0, 0x00); //Endpoint 0 Normal operation

USB_WR(NAKMSK,NAK_O0+NAK_I3); //Разрешаем прерывания по NAK событиям
USB_WR(RXMSK,RXFIFO0+RXFIFO3); //Разрешаем прерывания по RX событиям
USB_WR(TXMSK,TXFIFO0+TXFIFO3); //Разрешаем прерывания по TX событиям


USB_WR(ALTMSK,SD3+SD5+RESET_A); //Разрешаем прерывания по ALT событиям - таймауты и перезапуск от хоста
USB_WR(MAMSK,(INTR_E+RX_EV+NAK+TX_EV+ALT)); //Разрешаем прерывания глобально


FLUSHTX0(); //Очищаем TXFIFO0 и запрещаем выдачу из него данных
USB_WR(RXC0,RX_EN); //Разрешаем прием данных в Endpoint0

USB_WR(NFSR,OPR_ST); //Переходим в Operational State
USB_WR(MCNTRL,VGE+INT_L_P+NAT); //Устанавливаем напряжение, уровень прерывания и запускаемся smile.gif

USB_RD(ALTEV); //очищаем буфер альтернативных событий

Event=USB_RD(FAR); // проверяем адресный регистр и всегда обнаруживаем там 0x00 ((((((((((
sprintf(c,"F%d ",(int)Event);
LCDPuts(0,1,c);


}


Функции общения с чипом:
CODE
void USB_WR(char U_ADDR,char U_DATA)
{
SETBIT(P3,ALE); /*Устанавливаем ALE в 1 */
CLRBIT(P3,CS); /*Устанавливаем CS в 0 Выбираем USBN9604*/
NOP(10);
P1=U_ADDR; /*Выдаем адрес регистра*/
NOP(50);
CLRBIT(P3,ALE); /*Сбрасываем ALE в '0', защелкивая адрес*/
CLRBIT(P3,WR); /*Сбрасываем WR в '0', инициируя запись*/
NOP(10);
P1=U_DATA; /*Выставляем на шину данные*/
NOP(50);
SETBIT(P3,WR); /* Защелкиваем данные '1' на WR*/
SETBIT(P3,CS); /* Устанавливаем CS в '1' - отключаем микросхему*/
}


unsigned char USB_RD(char U_ADDR)
{
char U_DATA;
CLRBIT(P3,CS); /*Устанавливаем CS в 0 Выбираем USBN9604*/
SETBIT(P3,ALE); /*Устанавливаем A0 в 1 */
CLRBIT(P3,WR); /*Сбрасываем WR в '0', инициируя запись*/
NOP(50);
P1=U_ADDR; /*Выдаем адрес регистра*/
SETBIT(P3,WR); /* Защелкиваем адрес '1' на WR*/
CLRBIT(P3,ALE); /*Устанавливаем A0 в 0 */
CLRBIT(P3,RD); /*Сбрасываем RD в '0', инициируя чтение*/
NOP(50);
U_DATA=P1; /*Считываем данные с шины*/
SETBIT(P3,RD); /* Защелкиваем данные '1' на RD*/
SETBIT(P3,CS); /* Устанавливаем CS в '1' - отключаем микросхему*/
return(U_DATA);
}



Пожалуйста помогите - хоть скажите куда смотреть... весь инет уже облазил (((
обещаю отдельной темой в 8051 выложить проект smile.gif

я тут еще один вещь заметил:
написал в тексте для проверки
USB_WR(NAKMSK,0x55);
(когда прочитал и на дисплей вывел - пришло только 0x05)
а после этого написал
USB_WR(NAKMSK,0xaa);
(когда прочитал и на дисплей вывел - пришло только 0x0a)

получается у меня со старшими разрядами что-то...
может с генератором что... у меня стоит резонатор на 24 МГц и конденсаторы по 18пФ (про мегаомный резистор в параллель - не забыл).
galjoen
Цитата(drka @ Nov 24 2005, 19:50) *
В данный момент близок к реализации Mass Storage Device, если кому-то будет полезно могу поделиться информацией и наблюдениями.

Давным-давно реализовал составное устройство HID+MassStorage на связке USBN9604+AT45DB642D+ATmega/AT90CAN. Думал это уже никому не интересно. Думал, что и USBN9604 то уже с производства снимают, поэтому подзатарился для возможного спроса/ремонта. А где вы эти USBN9604 покупаете? И сколько они стоят? Я через друга, который живёт в США, купил. Около 70 руб. штука обошлись.
Мне USBN9604, несмотря на тормозную шину (на 16 мГц даже с максимальной задержкой не все работают) и кое-какие глюки (если интересно опишу), очень понравились. У современных, встроенных в микроконтроллеры, систем таких возможностей нет. М.б. я рано USBN9604 в утиль списал?

По теме:
1. Могу рекомендовать использовать 2 незадействованные EP для того, чтобы у EP0 было FIFO 64 байта. USBN9604, в отличие от других, позволяет адрес EP устанавливать, в т.ч. и одинаковые адреса у разным EP. Да и работать удобнее когда для данных туда, данных сюда и SETUP-а разные буфера. Хотя с энумерацией повозится придётся, но там полюбому нужно возится чтобы при включении компа, со вставленным в него USB девайсом, он нормально загружался (любой комп).
2. В MassStorage можно данные из AT45DB642D в USBN9604 минуя процессор отправлять если их на одну шину посадить. Получается даже лучше, чем ПДП, потому, что процессор вообще свободен, только таймерами сигналы формирует. И скорость чтения MassStorage (если CRC не считать и HIDа ,с зарезервированной под него пропускной способностью шины USB, нет) получается строго 1 мБайт в секунду. Т.е. теоретический предел пропускной способности full speed USB.

public32,
не понял, а где у вас передача дескрипторов хосту? О какой установке адреса (и где у вас обрабатывается получение SETUP пакета SET_ADDRESS?) вы говорите до того, как отправили хосту дескриптор DEVICE? Этот дескриптор (и какой он у вас?) хосту нормально отправляется? ACK от хоста на него вы получаете?
NAK-и на первое время можете вообще не обрабатывать. Запретите прерывания по ним и всё. А вот когда ваш девайс определятся начнёт, тогда это может понадобится.
public32
покупал в чипе-дипе
http://www.chipdip.ru/product0/959352017.aspx

а кусочка кода с инициализацией устройства не осталось? мне бы инициализацию пройти... с endpointами разберемся smile.gif
galjoen
Цитата(public32 @ Jan 7 2010, 22:04) *
покупал в чипе-дипе
http://www.chipdip.ru/product0/959352017.aspx

а кусочка кода с инициализацией устройства не осталось? мне бы инициализацию пройти... с endpointами разберемся smile.gif

Да, цены однако...

Я всё на асме написал, вам не подойдёт, но инициализация в виде таблицы регист-значение имеется. Некоторые из регистров/битов в родном описании не описаны, я их сам описал. Не помню присутствуют ли они в инициализации, но если что по названию разберётесь. AdXX это мои адреса EP, но это вроде и так понятно.
Код
Ti9604:; таблица начальной инициализации 9604 (без присоединения)
.db MCNTRL, VGE; токо +3.3V (отаттачено и без прер-ний)
;.db MCNTRL, 0; нет +3.3V, отаттачено и без прер-ний
.db NEPC0, 0; снимем STALL и DEF у EP0
.db CCONF, 0x0B; частота 4 Мгц
.db NEPC1, 0; временно запретим EP1
.db NEPC2, 0; временно запретим EP2
.db NEPC3, 0; запретим EP3
.db NEPC4, 0; запретим EP4
.db NEPC5, 0; запретим EP5
.db NEPC6, 0; запретим EP6
.db WKUP, ENUC|ENUSB; + чистим PNDUC и PNDUSB
.db MAMSK, INTR_E|RX_EV|NAK|TX_EV|ALT|WARN; разр. прер.
.db RXMSK, RXFIFO1|RXFIFO0; прер. токо от EP0 (EP1 - она-же)
;.db ALTMSK, RESET_A|SD3; прер. по сбросу и suspend3ms
.db ALTMSK, RESET_A; прер. токо по сбросу без suspend3ms
.db TXMSK, TXFIFO1|TXFIFO0; прер. токо от EP0 (EP1 - она-же)
;.db NAKMSK, 0x77; NAK для EP0, EP1,3 (TX), EP2,4 (RX)
.db NTXC1, FLUSH; чистим FIFO передачи EP1
.db NTXC2, TFWL4|FLUSH|TX_TOGL; чистим FIFO пер-чи EP3 (и DATA0)
.db NRXC1, FLUSH|IGN_SETUP; FIFO приёма EP2 + запр. SETUP
.db NRXC2, FLUSH|IGN_SETUP; FIFO приёма EP4 + запр. SETUP
.db NTXC0, FLUSH|IGN_IN; FIFO передачи EP0 + запр. IN
.db NRXC0, FLUSH|IGN_OUT; приема 0 + запр. OUT (SETUP разр.)
.db FAR, AD_EN; адрес по умолчанию (0x00)
.db NEPC1, EP_EN; чтоб на IN отвечали NAK-ом
.db NEPC2, EP_EN; чтоб на OUT отвечали NAK-ом
.db NEPC3, EP_EN|AdBI; чтоб на Bulk-IN отвечали NAK-ом
.db NEPC4, EP_EN|AdBO; чтоб на Bulk-OUT отвечали NAK-ом
.db NEPC5, EP_EN|AdII; чтоб на Interrupt-IN отвечали NAK-ом
.db DMCNTRL, DMEP3; запрещённый DMA к передающей EP3
;.db NFSR, OPR_ST; режим работа
.db 0xFF, 0xFF; признак конца таблицы

Можете раскоментировать
.db NFSR, OPR_ST ; режим работа
тогда подключится, но обработчики прерываний у вас д.б.

Только сейчас дошло, что тема в 2005 году начата :D
public32
спасибо большое! да, все более-менее понятно... язык он и в Африке язык smile.gif

У меня такое ощущение, что я не ту емкость взял на кристалл... было при 22 пФ и при 18 пФ - сейчас купил 15 (как в даташите) и 39 (встречал в инете на схемах)... может пойдет...

блин действительно smile.gif 2005 smile.gif уже отчаяние бьет потихоньку... медленно склоняюсь к покупке ftdi... ((
пытался частоту посмотреть на осциллографе, но из-за его входного импеданса в 50 Ом smile.gif ... частота получилась порядка 200 Гц... долго не мог поверить глазам, пока про 50Ом не вспомнил smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.