реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> пример для cy7c68013, на keil c
torik
сообщение Feb 9 2006, 07:39
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Всем привет.

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

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

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

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


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 10 2006, 08:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



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


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Feb 10 2006, 08:41
Сообщение #3


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



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

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

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



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

Сообщение отредактировал MALLOY2 - Feb 10 2006, 08:37
Прикрепленные файлы
Прикрепленный файл  FX2.ZIP ( 122.75 килобайт ) Кол-во скачиваний: 80
 
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 10 2006, 12:07
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



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

пример (cy4611) проги беру отсюда:
http://www.efo.ru/doc/Cypress/Cypress.pl?1134


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
левша
сообщение Feb 12 2006, 12:58
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 4-10-04
Из: Москва
Пользователь №: 789



Цитата(torik @ Feb 10 2006, 15:07) *
За это спасибо. Про примеры я спросил, потому что запутался уже - все поизменял и не помню где и чо. Тут еще другая проблема - взял пример массторедж и не скомпилить его, наверное кейл недает много кода компилить. Где можно найти лекарство и в чем еще могет быть проблема?

пример (cy4611) проги беру отсюда:
http://www.efo.ru/doc/Cypress/Cypress.pl?1134

массторедж это отдельная тема, если на ерунде спотыкаетесь не советую в эти дебри лезть, даже имея крякнутый кейл, и вообще эта тема уже обсуждалась здесь
рекомендую вам прочесть её, там много дельных советов.
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 14 2006, 10:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Вопрос поконкретнее:
В примере программы 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, а в старший байт ничо не пишется.


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Feb 14 2006, 15:00
Сообщение #7


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата(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
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 15 2006, 05:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Благодарю за ответ.
В этом примере действительно зацикливаются точки 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;
чтобы данные просто терялись а не возникала ошибка, как вообще этот момент возникновения ошибки отлавливать?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Feb 15 2006, 08:26
Сообщение #9


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



По поводу SYNCDELAY он применяется для синхронизации определенных регистров которые находятся в ядре USB и работают всегда на одной частоте IFCLK, просто запись в них требует определенного времени (машинных циклов) и что бы не произлшло ни каких глюков вводится эта задержка о ней погдробно написано в 15.14 Synchronization Delay тогоже мануала.
И в добавак в файле fw.c есть дефайн #define _CFREQ 48000 который управляет фремененм задержки
SYNCDELAY. Число указыват частоту процессора в кГц. Списаок регистров которые нужно синхронизировать преведен в мануале.

Второе это не ошибка а глюк cyconsole комп должен накапливать данные пока ты их не забереш, в программе их надо обработать если ты их не обрабатываеш то значит висиш или не успеваеш. И вобще cyconsole глюк полный я пользуюсь iousb от Thesycon.
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 15 2006, 08:36
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



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


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Feb 15 2006, 10:16
Сообщение #11


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



НЕ понял по чемуэто ошибка пускай сибе крутится программа пока данные комп не заберет.
Ну или если совсем плохо то можно типа этого зделать
/**************************************************
* Сброс 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
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 15 2006, 10:26
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



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


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
=AK=
сообщение Feb 15 2006, 10:45
Сообщение #13


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(torik @ Feb 15 2006, 19:56) *
дык я и говорю - кудыть эти строки вставить?

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

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

Че уж там "предусматривать", это только сопли по окну разводить. Читать надо то что с хоста прислали. Не нужна эта информация - выбросить ее нафиг, но все ж прочитать необходимо чтоб освободить буфер. И побыстрее освободить, лучше всего по прерыванию, чтоб не создавать ненужный пингующий траффик. USB канал не резиновый.
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 15 2006, 11:03
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



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


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 15 2006, 11:53
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



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

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

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


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.0142 секунд с 7
ELECTRONIX ©2004-2016