Перейти к содержанию
    

Всем привет.

 

Кто-нибудь поделитесь скелетом программы для cy7c68013. Или хотя бы описание какого-нибудь из примеров комплекта. Но желательно на русском, чтото типа путеводителя.

 

Вообще задача стоит так: с внешнего устройства в асинхронном режиме надо гнать в Slave FIFO данные. Буферизация хотябы двойная. Далее в изохронном или булочном режиме гнать в комп. Т.е. одна IN автоточка высокоскоростная. Да еще out точка для приема команд управления устройством.

 

Если у кого есть информация на похожие темы (желательно на русском), поделитесь, пжлста.

 

С уважением, Константин.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

неужели никто не занимается сайпрасами cy7c68013? Откликнитесь хоть кто-нибудь, не ленитесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость MALLOY2

А че примеры с cy3681_ez_usb_fx2_development_kit не катят там и так все понятно без знания англицкого !

 

Если вдуруг этого нет, можно скачать с сайта.

 

Вобщем задавайте вопросы коткретнее по проге, и более детально по IN ендпоиниту.

 

 

 

Вот к примеру ихние екзамплы

FX2.ZIP

Изменено пользователем MALLOY2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За это спасибо. Про примеры я спросил, потому что запутался уже - все поизменял и не помню где и чо. Тут еще другая проблема - взял пример массторедж и не скомпилить его, наверное кейл недает много кода компилить. Где можно найти лекарство и в чем еще могет быть проблема?

 

пример (cy4611) проги беру отсюда:

http://www.efo.ru/doc/Cypress/Cypress.pl?1134

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За это спасибо. Про примеры я спросил, потому что запутался уже - все поизменял и не помню где и чо. Тут еще другая проблема - взял пример массторедж и не скомпилить его, наверное кейл недает много кода компилить. Где можно найти лекарство и в чем еще могет быть проблема?

 

пример (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
Вопрос поконкретнее:

В примере программы 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

По поводу SYNCDELAY он применяется для синхронизации определенных регистров которые находятся в ядре USB и работают всегда на одной частоте IFCLK, просто запись в них требует определенного времени (машинных циклов) и что бы не произлшло ни каких глюков вводится эта задержка о ней погдробно написано в 15.14 Synchronization Delay тогоже мануала.

И в добавак в файле fw.c есть дефайн #define _CFREQ 48000 который управляет фремененм задержки

SYNCDELAY. Число указыват частоту процессора в кГц. Списаок регистров которые нужно синхронизировать преведен в мануале.

 

Второе это не ошибка а глюк cyconsole комп должен накапливать данные пока ты их не забереш, в программе их надо обработать если ты их не обрабатываеш то значит висиш или не успеваеш. И вобще cyconsole глюк полный я пользуюсь iousb от Thesycon.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык это, комп-то фиг с ним. Я имею в виду что когда буфер ФИФО контроллера точки оут переполнен а ин пуст, то возникает ошибка передачи. В проге на контроллере как сбрасывать флаг заполненности или пустоты ФИФЫ чтобы он просто пропускал данные?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость MALLOY2

НЕ понял по чемуэто ошибка пускай сибе крутится программа пока данные комп не заберет.

Ну или если совсем плохо то можно типа этого зделать

/**************************************************

* Сброс 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ибайтовых пакетов, не читая их в контроллере, сюконсоль пишет типа трансфер файлд, т.е. не могет передать последний пакет.

А если в готовом устройстве важнее последний пакет от компа, а ситуация с переполнением могет возникнуть, то надо это предусмотреть. Дык куда эти строки пихать? Я пробовал в прерывание по переполнению точки - не помогает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дык я и говорю - кудыть эти строки вставить?

Интересуюсь, Вы наобум работаете, без документации, или по-аглицки читать не желаете?

Почему ошибка, да в сюконсоле, когда передаю с компа подряд в точку оут больше 512ибайтовых пакетов, не читая их в контроллере, сюконсоль пишет типа трансфер файлд, т.е. не могет передать последний пакет.

Ессно, куда ж она его передаст, ежели в приемнике буфер забит? Хост попингует ендпойнт и отвалится по таймауту, чего ж тут странного-то. Не вечно же ему этот пакет в буфер пихать, у него других дел полно.

А если в готовом устройстве важнее последний пакет от компа, а ситуация с переполнением могет возникнуть, то надо это предусмотреть.

Че уж там "предусматривать", это только сопли по окну разводить. Читать надо то что с хоста прислали. Не нужна эта информация - выбросить ее нафиг, но все ж прочитать необходимо чтоб освободить буфер. И побыстрее освободить, лучше всего по прерыванию, чтоб не создавать ненужный пингующий траффик. 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 (судя по таблице переходов оно и надо), но так как сброс ФИФО не помагает, то делаю вывод что тудыть не попадаем. Или чото еще не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот видите - читаем доку на англицком про ендпойнты и все сразу понимаем. Спасибо большое всем за помощь.

 

Вопросы будут еще.

 

Вот они уже, никто мне так и не ответил:

по-русски не хочет писать коментарии. Выбирал в опциях шрифт и КОУЕР НЕВ и некоторые другие, но не помагает (видать они не кирилические)

Как шрифты добавить или по-другому решить проблему с русскими коментами?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...