Полная версия этой страницы:
пример для cy7c68013
Всем привет.
Кто-нибудь поделитесь скелетом программы для cy7c68013. Или хотя бы описание какого-нибудь из примеров комплекта. Но желательно на русском, чтото типа путеводителя.
Вообще задача стоит так: с внешнего устройства в асинхронном режиме надо гнать в Slave FIFO данные. Буферизация хотябы двойная. Далее в изохронном или булочном режиме гнать в комп. Т.е. одна IN автоточка высокоскоростная. Да еще out точка для приема команд управления устройством.
Если у кого есть информация на похожие темы (желательно на русском), поделитесь, пжлста.
С уважением, Константин.
неужели никто не занимается сайпрасами cy7c68013? Откликнитесь хоть кто-нибудь, не ленитесь.
MALLOY2
Feb 10 2006, 08:41
А че примеры с cy3681_ez_usb_fx2_development_kit не катят там и так все понятно без знания англицкого !
Если вдуруг этого нет, можно скачать с сайта.
Вобщем задавайте вопросы коткретнее по проге, и более детально по IN ендпоиниту.
Вот к примеру ихние екзамплы
За это спасибо. Про примеры я спросил, потому что запутался уже - все поизменял и не помню где и чо. Тут еще другая проблема - взял пример массторедж и не скомпилить его, наверное кейл недает много кода компилить. Где можно найти лекарство и в чем еще могет быть проблема?
пример (cy4611) проги беру отсюда:
http://www.efo.ru/doc/Cypress/Cypress.pl?1134
Цитата(torik @ Feb 10 2006, 15:07)

За это спасибо. Про примеры я спросил, потому что запутался уже - все поизменял и не помню где и чо. Тут еще другая проблема - взял пример массторедж и не скомпилить его, наверное кейл недает много кода компилить. Где можно найти лекарство и в чем еще могет быть проблема?
пример (cy4611) проги беру отсюда:
http://www.efo.ru/doc/Cypress/Cypress.pl?1134массторедж это отдельная тема, если на ерунде спотыкаетесь не советую в эти дебри лезть, даже имея крякнутый кейл, и вообще эта тема уже обсуждалась
здесьрекомендую вам прочесть её, там много дельных советов.
Вопрос поконкретнее:
В примере программы 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
Feb 14 2006, 15:00
Цитата(torik @ Feb 14 2006, 14:25)

Вопрос поконкретнее:
В примере программы 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
Благодарю за ответ.
В этом примере действительно зацикливаются точки 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
Feb 15 2006, 08:26
По поводу SYNCDELAY он применяется для синхронизации определенных регистров которые находятся в ядре USB и работают всегда на одной частоте IFCLK, просто запись в них требует определенного времени (машинных циклов) и что бы не произлшло ни каких глюков вводится эта задержка о ней погдробно написано в 15.14 Synchronization Delay тогоже мануала.
И в добавак в файле fw.c есть дефайн #define _CFREQ 48000 который управляет фремененм задержки
SYNCDELAY. Число указыват частоту процессора в кГц. Списаок регистров которые нужно синхронизировать преведен в мануале.
Второе это не ошибка а глюк cyconsole комп должен накапливать данные пока ты их не забереш, в программе их надо обработать если ты их не обрабатываеш то значит висиш или не успеваеш. И вобще cyconsole глюк полный я пользуюсь iousb от Thesycon.
Дык это, комп-то фиг с ним. Я имею в виду что когда буфер ФИФО контроллера точки оут переполнен а ин пуст, то возникает ошибка передачи. В проге на контроллере как сбрасывать флаг заполненности или пустоты ФИФЫ чтобы он просто пропускал данные?
MALLOY2
Feb 15 2006, 10:16
НЕ понял по чемуэто ошибка пускай сибе крутится программа пока данные комп не заберет.
Ну или если совсем плохо то можно типа этого зделать
/**************************************************
* Сброс 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
дык я и говорю - кудыть эти строки вставить?
Почему ошибка, да в сюконсоле, когда передаю с компа подряд в точку оут больше 512ибайтовых пакетов, не читая их в контроллере, сюконсоль пишет типа трансфер файлд, т.е. не могет передать последний пакет.
А если в готовом устройстве важнее последний пакет от компа, а ситуация с переполнением могет возникнуть, то надо это предусмотреть. Дык куда эти строки пихать? Я пробовал в прерывание по переполнению точки - не помогает.
Цитата(torik @ Feb 15 2006, 19:56)

дык я и говорю - кудыть эти строки вставить?
Интересуюсь, Вы наобум работаете, без документации, или по-аглицки читать не желаете?
Цитата(torik @ Feb 15 2006, 19:56)

Почему ошибка, да в сюконсоле, когда передаю с компа подряд в точку оут больше 512ибайтовых пакетов, не читая их в контроллере, сюконсоль пишет типа трансфер файлд, т.е. не могет передать последний пакет.
Ессно, куда ж она его передаст, ежели в приемнике буфер забит? Хост попингует ендпойнт и отвалится по таймауту, чего ж тут странного-то. Не вечно же ему этот пакет в буфер пихать, у него других дел полно.
Цитата(torik @ Feb 15 2006, 19:56)

А если в готовом устройстве важнее последний пакет от компа, а ситуация с переполнением могет возникнуть, то надо это предусмотреть.
Че уж там "предусматривать", это только сопли по окну разводить. Читать надо то что с хоста прислали. Не нужна эта информация - выбросить ее нафиг, но все ж прочитать необходимо чтоб освободить буфер. И побыстрее освободить, лучше всего по прерыванию, чтоб не создавать ненужный пингующий траффик. USB канал не резиновый.
Спсиб, эт точно - надо читать. И то что на англицком читать не хотю - это не совсем так, просто задать вопрос - 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 (судя по таблице переходов оно и надо), но так как сброс ФИФО не помагает, то делаю вывод что тудыть не попадаем. Или чото еще не так?
Вот видите - читаем доку на англицком про ендпойнты и все сразу понимаем. Спасибо большое всем за помощь.
Вопросы будут еще.
Вот они уже, никто мне так и не ответил:
по-русски не хочет писать коментарии. Выбирал в опциях шрифт и КОУЕР НЕВ и некоторые другие, но не помагает (видать они не кирилические)
Как шрифты добавить или по-другому решить проблему с русскими коментами?
MALLOY2
Feb 15 2006, 12:11
У меня стоит fixedsys font
view -> option -> colors & fonts выбераем Editor C files выбераем Font
Или я не отом ?
ага - о том. Тока такого шрифта у меня такого.
Я поставил кейл 8.01 там с рускими шрыфтами все нормул.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.