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

 
 
> Помогите c Cypress CY7C68013, Изохронная IN точка и FIFO.
skyspark
сообщение Jan 28 2009, 19:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-02-08
Пользователь №: 35 238



Привет.
Начал разбиратся с сайпресом, столкнулся с проблемой, конфигурирую EP2 как ISOC IN AUTOIN=1. Выбираю нулевой адресс fifo. С ПЛИС дергаю лапкой SLWR и/или PKEND. Тактовую ПЛИС беру IFCLK = 48МГц.
Наблюдается следющее:
Если дергать лапкой SLWR, сигнал FULL = 0, тоже просходит если дернут PKEND 4 раза (по числу буфферов) ,EMPTY ведет себя адекватно после первого клока записи или окончания пакета EMPTY = 0.

Инитил так, больше ничего не делал:

CODE

REVCTL = 0x03; // REVCTL.0 and REVCTL.1 set to 1
SYNCDELAY;

CPUCS = 0x12;
SYNCDELAY;

IFCONFIG = 0xE3;
SYNCDELAY;

EP2CFG = 0xD0; // EP2 is DIR=IN, TYPE=ISO
SYNCDELAY;

FIFORESET = 0x82; // Reset the FIFO
SYNCDELAY;
FIFORESET = 0x82; // Reset the FIFO
SYNCDELAY;
FIFORESET = 0x82; // Reset the FIFO
SYNCDELAY;
FIFORESET = 0x82; // Reset the FIFO
SYNCDELAY;

EP2FIFOCFG = 0x0C; // EP2 is AUTOOUT=0, AUTOIN=1, ZEROLEN=1, WORDWIDE=0
SYNCDELAY;
EP2AUTOINLENH = 0x02; // Auto-commit 512-byte packets
SYNCDELAY;
EP2AUTOINLENL = 0x00;
SYNCDELAY;

PINFLAGSAB = 0x00;
SYNCDELAY;

PINFLAGSCD = 0x00;
SYNCDELAY;


Конечная точка сконфигурировал так:
CODE
;; Endpoint Descriptor
db DSCR_ENDPNT_LEN ;; Descriptor length
db DSCR_ENDPNT ;; Descriptor type
db 82H ;; Endpoint number, and direction
db ET_ISO ;; Endpoint type
db 00H ;; Maximun packet size (LSB)
db 02H ;; Max packect size (MSB)
db 01H ;; Polling interval



Не могу понять, почему он не отсылает пакеты. И достаточно ли USB Console что бы проконтролировать, она мне не зависимо состояния буффера говорит: Isoc IN failed.

Сообщение отредактировал skyspark - Jan 28 2009, 19:27
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Мария Е
сообщение Feb 4 2009, 21:46
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 18-11-07
Из: Москва
Пользователь №: 32 424



Я сама тоже разбираюсь с этим МК, режим slave fifo. Но autoin у меня работает. Очень помогла статья: http://www.efo.ru/doc/Cypress/Cypress.pl?2524
Зато не работает autoout. Чтобы не плодить много похожих тем, опубликую свой вопрос здесь.
Сейчас пытаюсь сделать просто закольцовку данных в режиме slave fifo. Мастером служит ПЛИС. Интерфейс асинхронный, autoin, autoout. Данные должны передаваться с компа в 6кт, затем в ПЛИС, затем из ПЛИС в 2кт и в комп. Проблема в том, что при выставлении режима autoout при попытке послать данные из CyConsole в 6 кт, передача не проходит, CyConsole выдает следующее:
Bulk OUT Transfer
Bulk OUT failed

Если не делать autoout, то данные 2 раза отправляются (в силу того, что буферизация двойная), а потом затыкаются. При этом флаг empty на выходе МК не меняется, следовательно ПЛИС и не забирает с него данные.

Если делать только in передачу (из ПЛИС в МК и комп), то все нормально работает.
Для out передачи меняла кт, меняла ногу для флага, но никаких изменений после этого не последовало.
Вот код инициализации slave fifo:
void TD_Init (void)
{
REVCTL = 0x03; // MUST set REVCTL.0 and REVCTL.1 to 1
SYNCDELAY;
CPUCS = 0x10; // set 48MHz clk for CPU
SYNCDELAY;
// this defines the external interface to be the following:
// use slave FIFO interface pins driven async by external master
// enable slave fifo mode
IFCONFIG = 0xcb;
SYNCDELAY;
// sets EP2 valid for IN's
// and defines the endpoint for 512 byte packets, 2x buffered
EP2CFG = 0xe2;
SYNCDELAY;
// sets EP6 valid for OUT's
// and defines the endpoint for 512 byte packets, 2x buffered
EP6CFG = 0xa2;
SYNCDELAY;
FIFORESET = 0x80; // reset all FIFOs
SYNCDELAY;
FIFORESET = 0x02; //reset FIFO EP2
SYNCDELAY;
FIFORESET = 0x04; //reset FIFO EP4
SYNCDELAY;
FIFORESET = 0x06; //reset FIFO EP6
SYNCDELAY;
FIFORESET = 0x08; //reset FIFO EP8
SYNCDELAY;
FIFORESET = 0x00; //return to normal operation
SYNCDELAY;
EP2FIFOCFG = 0x04;
SYNCDELAY;
// this lets the FX2 auto commit IN packets, gives
// ability to send zero length packets,
// and sets the slave FIFO data interface to 8-bits
EP2FIFOCFG = 0x0c;
SYNCDELAY;
// this lets the FX2 auto receive out packets, gives no
// ability to send zero length packets,
// and sets the slave FIFO data interface to 8-bits */
EP6FIFOCFG = 0x10;
SYNCDELAY;
// defines FLAGB as full for 2ep
// FLAGA as empty for 6ep
PINFLAGSAB = 0xca;
SYNCDELAY;
// FLAGC as empty flag for 2ep
// won't generally need FLAGD (default)
PINFLAGSCD = 0x04;
PORTACFG = 0x40; // used PA7/FLAGD/SLCS as a SLCS
FIFOPINPOLAR = 0x00; // set all slave FIFO interface pins as active low
SYNCDELAY;
//set max in paket to 512 bytes
EP2AUTOINLENH = 0x02;
SYNCDELAY;
EP2AUTOINLENL = 0x00;
SYNCDELAY;
OUTPKTEND = 0x86; // arm first buffer by writing OUTPKTEND w/skip=1
SYNCDELAY;
OUTPKTEND = 0x86; // arm second buffer by writing OUTPKTEND w/skip=1
SYNCDELAY;
}

Если у кого-нибудь есть соображения, с чем может быть связано такое поведение МК, от поделитесь пожалуйста.
Go to the top of the page
 
+Quote Post
skyspark
сообщение Feb 7 2009, 22:47
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-02-08
Пользователь №: 35 238



Мария.
Не понятно, зачем дважды конфигурировать fifo на EP2, но это ни чего не меняет. А вот где EP6AUTOINLENх. Может по этому не взводит флаги.
А ассинхронный дизайн действительно так необходим? Синхронный выглядит понятнее и продолжает синхронный дизайн в ПЛИС.
Go to the top of the page
 
+Quote Post
Мария Е
сообщение Feb 15 2009, 20:12
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 18-11-07
Из: Москва
Пользователь №: 32 424



Цитата(skyspark @ Feb 8 2009, 01:47) *
Мария.
А вот где EP6AUTOINLENх. Может по этому не взводит флаги.
А ассинхронный дизайн действительно так необходим? Синхронный выглядит понятнее и продолжает синхронный дизайн в ПЛИС.

Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую.
А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет)

Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok a14.gif )
Go to the top of the page
 
+Quote Post
alevnew
сообщение Mar 4 2009, 13:49
Сообщение #5


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

Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775



Цитата(Мария Е @ Feb 16 2009, 01:12) *
Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую.
А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет)

Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok a14.gif )


Мария, или alexok - не поделитесь кодом инициализации? Беда 1 в 1 как Мария описала - если автоаут - не передаются данные, иначе передаются, пока буффер не заполнится. Не могу понять, все по доке и по примеру из ссылки - не работает.

Цитата(Мария Е @ Feb 16 2009, 01:12) *
Ну насколько я понимаю, EP6AUTOINLENх конфигурируется, если ep6 работает в режиме IN, у меня она out, поэтому я EP6AUTOINLENх и не использую.
А про асинхронный интерфейс: человек, который разрабатывает прошивку для ПЛИС, сказал, что ему так удобнее, спорить не стала, мне-то особой разницы нет)

Честно говоря, уже работает. Не поняла толком в чем была ошибка, но помог код, который прислали в личку (Спасибо, alexkok a14.gif )


ну вроде немного разобрался, если кому интересно на будущее:

После ресета EP2CS = 0x28 (То есть фифо FULL и 4 пакета в буфере, интересно зачем?)
Чтобы это убрать нужно (я использую EP2):
EP2FIFOCFG = 0x01; //выключить автоаут, хотя по умолчанию он и не стоит
SYNCDELAY;
//потом очищаем "имеющиеся" 4 пакета в FIFO
OUTPKTEND = 0x82;
SYNCDELAY;
OUTPKTEND = 0x82;
SYNCDELAY;
OUTPKTEND = 0x82;
SYNCDELAY;
OUTPKTEND = 0x82;
SYNCDELAY;
//и вот теперь уже включить автоаут
EP2FIFOCFG = 0x11;
SYNCDELAY;

после этого вроде работает.
Go to the top of the page
 
+Quote Post
alexkok
сообщение Mar 5 2009, 05:24
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837



Цитата(alevnew @ Mar 4 2009, 17:49) *
Мария, или alexok - не поделитесь кодом инициализации? Беда 1 в 1 как Мария описала - если автоаут - не передаются данные, иначе передаются, пока буффер не заполнится. Не могу понять, все по доке и по примеру из ссылки - не работает.

ну вроде немного разобрался, если кому интересно на будущее:

после этого вроде работает.

Если ещё нужно, то вот моя конфигурация.Прикрепленный файл  EPs_config.txt ( 2.25 килобайт ) Кол-во скачиваний: 789


--------------------
Go to the top of the page
 
+Quote Post
alevnew
сообщение Mar 5 2009, 11:20
Сообщение #7


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

Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775



Цитата(alexkok @ Mar 5 2009, 10:24) *
Если ещё нужно, то вот моя конфигурация.Прикрепленный файл  EPs_config.txt ( 2.25 килобайт ) Кол-во скачиваний: 789


Спасибо!!!
Все вроде заработало, но в процессе обнаружился такой глюк (или может так и должно быть?):
Допустим делаю конфигурцию EP2 AutoOut и EP4 AutoIn. Все по 512 байт, bulk. Slave FIFO. Async.
Если я ставлю буферизацию EP2=2x - все работает.
Если я ставлю буферизацию EP2=4x, то EP2 работает, а вот EP4 игнорирует входные данные,
но на PKTEND все же реагирует, но присылает пустой пакет.
Причем даже если отключить EP2 (EP2CFG=0) - то все равно EP4 ведет себя так же.
Если же буферизация EP2=2x - то все работает ОК.

Кто-нибудь сталкивался с таким, ли может в даташите где прописано?
Go to the top of the page
 
+Quote Post
alexkok
сообщение Mar 5 2009, 17:46
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 609
Регистрация: 3-03-07
Из: San Jose
Пользователь №: 25 837



Цитата(alevnew @ Mar 5 2009, 15:20) *
Спасибо!!!
Все вроде заработало, но в процессе обнаружился такой глюк (или может так и должно быть?):
Допустим делаю конфигурцию EP2 AutoOut и EP4 AutoIn. Все по 512 байт, bulk. Slave FIFO. Async.
Если я ставлю буферизацию EP2=2x - все работает.
Если я ставлю буферизацию EP2=4x, то EP2 работает, а вот EP4 игнорирует входные данные,
но на PKTEND все же реагирует, но присылает пустой пакет.
Причем даже если отключить EP2 (EP2CFG=0) - то все равно EP4 ведет себя так же.
Если же буферизация EP2=2x - то все работает ОК.

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

В TRM на фиг. 1-17 приведены возможные конфигурации ендпойнтов.


--------------------
Go to the top of the page
 
+Quote Post
alevnew
сообщение Mar 6 2009, 10:10
Сообщение #9


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

Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775



Цитата(alexkok @ Mar 5 2009, 22:46) *
В TRM на фиг. 1-17 приведены возможные конфигурации ендпойнтов.

А слона то я и не приметил smile.gif
Спасибо!
Теперь все стало на свои места.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- skyspark   Помогите c Cypress CY7C68013   Jan 28 2009, 19:26
|- - =AK=   Цитата(Мария Е @ Feb 5 2009, 08:16) Если ...   Feb 6 2009, 11:26
|- - skyspark   Цитата(Мария Е @ Feb 5 2009, 00:46) Я сам...   Feb 6 2009, 14:26
- - alevnew   А вот еще вопрос возник, мож кто сталкивался: Есть...   Mar 6 2009, 14:21
- - Vitaliy_ARM   Проблема с установкой драйверов под Windows7. Ска...   Mar 16 2010, 19:48
|- - Konst_777   Цитата(Vitaliy_ARM @ Mar 16 2010, 22:48) ...   Mar 17 2010, 07:37
- - VladimirB   Цитата(alevnew @ Mar 6 2009, 18:21) А вот...   Jun 10 2010, 10:02
- - Konst_777   Цитата(VladimirB @ Jun 10 2010, 13:02) Во...   Jun 13 2010, 04:55


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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 12:09
Рейтинг@Mail.ru


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