torik 0 9 февраля, 2006 Опубликовано 9 февраля, 2006 · Жалоба Всем привет. Кто-нибудь поделитесь скелетом программы для cy7c68013. Или хотя бы описание какого-нибудь из примеров комплекта. Но желательно на русском, чтото типа путеводителя. Вообще задача стоит так: с внешнего устройства в асинхронном режиме надо гнать в Slave FIFO данные. Буферизация хотябы двойная. Далее в изохронном или булочном режиме гнать в комп. Т.е. одна IN автоточка высокоскоростная. Да еще out точка для приема команд управления устройством. Если у кого есть информация на похожие темы (желательно на русском), поделитесь, пжлста. С уважением, Константин. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба неужели никто не занимается сайпрасами cy7c68013? Откликнитесь хоть кто-нибудь, не ленитесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость MALLOY2 10 февраля, 2006 Опубликовано 10 февраля, 2006 (изменено) · Жалоба А че примеры с cy3681_ez_usb_fx2_development_kit не катят там и так все понятно без знания англицкого ! Если вдуруг этого нет, можно скачать с сайта. Вобщем задавайте вопросы коткретнее по проге, и более детально по IN ендпоиниту. Вот к примеру ихние екзамплы FX2.ZIP Изменено 10 февраля, 2006 пользователем MALLOY2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 10 февраля, 2006 Опубликовано 10 февраля, 2006 · Жалоба За это спасибо. Про примеры я спросил, потому что запутался уже - все поизменял и не помню где и чо. Тут еще другая проблема - взял пример массторедж и не скомпилить его, наверное кейл недает много кода компилить. Где можно найти лекарство и в чем еще могет быть проблема? пример (cy4611) проги беру отсюда: http://www.efo.ru/doc/Cypress/Cypress.pl?1134 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
левша 0 12 февраля, 2006 Опубликовано 12 февраля, 2006 · Жалоба За это спасибо. Про примеры я спросил, потому что запутался уже - все поизменял и не помню где и чо. Тут еще другая проблема - взял пример массторедж и не скомпилить его, наверное кейл недает много кода компилить. Где можно найти лекарство и в чем еще могет быть проблема? пример (cy4611) проги беру отсюда: http://www.efo.ru/doc/Cypress/Cypress.pl?1134 массторедж это отдельная тема, если на ерунде спотыкаетесь не советую в эти дебри лезть, даже имея крякнутый кейл, и вообще эта тема уже обсуждалась здесь рекомендую вам прочесть её, там много дельных советов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 14 февраля, 2006 Опубликовано 14 февраля, 2006 · Жалоба Вопрос поконкретнее: В примере программы boolkext есть такой код: void TD_Init(void) // Called once at startup { // we are just using the default values, yes this is not necessary... EP1OUTCFG = 0xA0; EP1INCFG = 0xA0; SYNCDELAY; // see TRM section 15.14 EP2CFG = 0xA2; //out SYNCDELAY; EP4CFG = 0xA0; //out SYNCDELAY; EP6CFG = 0xE2; //in SYNCDELAY; EP8CFG = 0xE0; //in counts twice SYNCDELAY; EP2BCL = 0x80; // arm EP2OUT by writing byte count w/skip. SYNCDELAY; EP2BCL = 0x80; SYNCDELAY; EP4BCL = 0x80; // arm EP4OUT by writing byte count w/skip. SYNCDELAY; EP4BCL = 0x80; // enable dual autopointer feature AUTOPTRSETUP |= 0x01; Rwuen = TRUE; // Enable remote-wakeup } Понятно что точки 2 и 4 настраиваются как двойные булочные. Но зачем тут включается точка 1? И еще - в EPхBCL записывается число 80 - почему? вроде надо указывать 512, а не 128, а в старший байт ничо не пишется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость MALLOY2 14 февраля, 2006 Опубликовано 14 февраля, 2006 · Жалоба Вопрос поконкретнее: В примере программы boolkext есть такой код: void TD_Init(void) // Called once at startup { // we are just using the default values, yes this is not necessary... EP1OUTCFG = 0xA0; EP1INCFG = 0xA0; SYNCDELAY; // see TRM section 15.14 EP2CFG = 0xA2; //out SYNCDELAY; EP4CFG = 0xA0; //out SYNCDELAY; EP6CFG = 0xE2; //in SYNCDELAY; EP8CFG = 0xE0; //in counts twice SYNCDELAY; EP2BCL = 0x80; // arm EP2OUT by writing byte count w/skip. SYNCDELAY; EP2BCL = 0x80; SYNCDELAY; EP4BCL = 0x80; // arm EP4OUT by writing byte count w/skip. SYNCDELAY; EP4BCL = 0x80; // enable dual autopointer feature AUTOPTRSETUP |= 0x01; Rwuen = TRUE; // Enable remote-wakeup } Понятно что точки 2 и 4 настраиваются как двойные булочные. Но зачем тут включается точка 1? И еще - в EPхBCL записывается число 80 - почему? вроде надо указывать 512, а не 128, а в старший байт ничо не пишется. Пишите откуда был выдран код. 1) точка скорее все го внутри программы завязана кольцом так для при мера не берите в голову. Или скажем через нее можно всекие команды реализовать или UART FX2 в комп загать вобщемм юзайте его как хотите но он не имеет аппаратного FIFO в отличии остальных. Но я для комманд советую использовать 0 точку. 2) на енпоинты 2,4,6,8 имеется аппаратное фифо которо может работать в MASTER (GPIF) или SLAVE режиме и выходят они на внешний мир и впринципе работают без участия CPU (ядра 8051). Но можно настроить FX2 таким образом что он может иметь доступ к FIFO. Вот в этом режиме бит 7 регистра EPхBCL используется для потверждения что ты обработал данный пакет и готов принимать следующий. Это применимо только для IN ендпоинтов, для OUT там указывается кол-во передаваемых данных. Это подробно описана в "узвермануале" в разделе 8.6.2.4 EP2BCH:L, EP4BCH:L, EP6BCH:L, EP8BCH:L Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 февраля, 2006 Опубликовано 15 февраля, 2006 · Жалоба Благодарю за ответ. В этом примере действительно зацикливаются точки 2-6 и 4-8 как out-in. через внешнюю ОЗУ (я на демоплате работаю). Когда запускаю cyconsole - вижу 4 булочных точки. Пишу в одну с другой принимаю. Буферизация двойная. Мне непонятно зачем там инициализируется еще и точка 1. И возникает вопрос когда уместно применять SYNCDELAY. А с записью 0х80 я прочитал в мануале, спасибо. Теперь когда я пишу в оут точку данные блоками по 512 байт и не читаю их из ин точки, то после третьей записи возникает ошибка (логично - ФИФО переполнилось). Где бы в программе сбрасывать флаг переполнения: FIFORESET = 0x80; // reset all FIFOs SYNCDELAY; FIFORESET = 0x80; // reset all FIFOs SYNCDELAY; чтобы данные просто терялись а не возникала ошибка, как вообще этот момент возникновения ошибки отлавливать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость MALLOY2 15 февраля, 2006 Опубликовано 15 февраля, 2006 · Жалоба По поводу SYNCDELAY он применяется для синхронизации определенных регистров которые находятся в ядре USB и работают всегда на одной частоте IFCLK, просто запись в них требует определенного времени (машинных циклов) и что бы не произлшло ни каких глюков вводится эта задержка о ней погдробно написано в 15.14 Synchronization Delay тогоже мануала. И в добавак в файле fw.c есть дефайн #define _CFREQ 48000 который управляет фремененм задержки SYNCDELAY. Число указыват частоту процессора в кГц. Списаок регистров которые нужно синхронизировать преведен в мануале. Второе это не ошибка а глюк cyconsole комп должен накапливать данные пока ты их не забереш, в программе их надо обработать если ты их не обрабатываеш то значит висиш или не успеваеш. И вобще cyconsole глюк полный я пользуюсь iousb от Thesycon. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 февраля, 2006 Опубликовано 15 февраля, 2006 · Жалоба Дык это, комп-то фиг с ним. Я имею в виду что когда буфер ФИФО контроллера точки оут переполнен а ин пуст, то возникает ошибка передачи. В проге на контроллере как сбрасывать флаг заполненности или пустоты ФИФЫ чтобы он просто пропускал данные? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость MALLOY2 15 февраля, 2006 Опубликовано 15 февраля, 2006 · Жалоба НЕ понял по чемуэто ошибка пускай сибе крутится программа пока данные комп не заберет. Ну или если совсем плохо то можно типа этого зделать /************************************************** * Сброс FIFO **************************************************/ SYNCDELAY; FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions SYNCDELAY; // see TRM section 15.14 FIFORESET = 0x02; // reset, FIFO 2 SYNCDELAY; // FIFORESET = 0x04; // reset, FIFO 4 SYNCDELAY; // FIFORESET = 0x06; // reset, FIFO 6 SYNCDELAY; // FIFORESET = 0x08; // reset, FIFO 8 SYNCDELAY; // FIFORESET = 0x00; // deactivate NAK-ALL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 февраля, 2006 Опубликовано 15 февраля, 2006 · Жалоба дык я и говорю - кудыть эти строки вставить? Почему ошибка, да в сюконсоле, когда передаю с компа подряд в точку оут больше 512ибайтовых пакетов, не читая их в контроллере, сюконсоль пишет типа трансфер файлд, т.е. не могет передать последний пакет. А если в готовом устройстве важнее последний пакет от компа, а ситуация с переполнением могет возникнуть, то надо это предусмотреть. Дык куда эти строки пихать? Я пробовал в прерывание по переполнению точки - не помогает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 17 15 февраля, 2006 Опубликовано 15 февраля, 2006 · Жалоба дык я и говорю - кудыть эти строки вставить? Интересуюсь, Вы наобум работаете, без документации, или по-аглицки читать не желаете? Почему ошибка, да в сюконсоле, когда передаю с компа подряд в точку оут больше 512ибайтовых пакетов, не читая их в контроллере, сюконсоль пишет типа трансфер файлд, т.е. не могет передать последний пакет. Ессно, куда ж она его передаст, ежели в приемнике буфер забит? Хост попингует ендпойнт и отвалится по таймауту, чего ж тут странного-то. Не вечно же ему этот пакет в буфер пихать, у него других дел полно. А если в готовом устройстве важнее последний пакет от компа, а ситуация с переполнением могет возникнуть, то надо это предусмотреть. Че уж там "предусматривать", это только сопли по окну разводить. Читать надо то что с хоста прислали. Не нужна эта информация - выбросить ее нафиг, но все ж прочитать необходимо чтоб освободить буфер. И побыстрее освободить, лучше всего по прерыванию, чтоб не создавать ненужный пингующий траффик. USB канал не резиновый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 февраля, 2006 Опубликовано 15 февраля, 2006 · Жалоба Спсиб, эт точно - надо читать. И то что на англицком читать не хотю - это не совсем так, просто задать вопрос - 50% решения, получить хоть какой-то ответ - еще +25%. Не ругайте меня за такое мнение, пжлста. А не получилось со сбросом ФИФО (хочу все-таки попробовать ради интереса) наверное потому что прерывания ISR_EPxfflag() не разрешены. Есть в программе такие строки: EZUSB_IRQ_ENABLE(); // Enable USB interrupt (INT2) EZUSB_ENABLE_RSMIRQ(); // Wake-up interrupt INTSETUP |= (bmAV2EN | bmAV4EN); // Enable INT 2 & 4 autovectoring USBIE |= bmSUDAV | bmSUTOK | bmSUSP | bmURES | bmHSGRANT; // Enable selected interrupts EA = 1; // Enable 8051 interrupts Там вроде разрешено инт 4 (судя по таблице переходов оно и надо), но так как сброс ФИФО не помагает, то делаю вывод что тудыть не попадаем. Или чото еще не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 15 февраля, 2006 Опубликовано 15 февраля, 2006 · Жалоба Вот видите - читаем доку на англицком про ендпойнты и все сразу понимаем. Спасибо большое всем за помощь. Вопросы будут еще. Вот они уже, никто мне так и не ответил: по-русски не хочет писать коментарии. Выбирал в опциях шрифт и КОУЕР НЕВ и некоторые другие, но не помагает (видать они не кирилические) Как шрифты добавить или по-другому решить проблему с русскими коментами? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться