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

 
 
> CY7C68013 Slave FIFO - BULK - OUT
РоманО
сообщение Feb 6 2014, 18:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 25-09-08
Пользователь №: 40 478



Добрый день, всем!

Проблема следующая: делаю Slave FIFO IN - OUT. Мастером служит Xilinx Spartan-6. Для Slave FIFO - IN все работает замечательно: данные из ПЛИСа успешно доходят до компьютера, но вот со Slave FIFO - OUT какие то проблемы. Флаги не устанавливаются и не меняют своего значения при попытке отправить данные с компьютера. Такое ощущение, что неправильно реализована сама программа кипариса. Есть ли у кого живой пример Slave FIFO - OUT для этого контроллера?

Примеры с сайта кипариса уж очень сомнительные, в TRM последовательность инициализации прописана убого. Прошу помощи
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SM
сообщение Feb 6 2014, 18:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(РоманО @ Feb 6 2014, 22:49) *
неправильно реализована сама программа кипариса. Есть ли у кого живой пример Slave FIFO - OUT для этого контроллера?


"программа кипариса" не участвует в работе Slave FIFO...

Вот моя рабочая инициализация:

CODE

void TD_Init(void) // Called once at startup
{

PORTACFG = 0x00;
OEA = 0x8B;
IOA = 0x00;

SYNCDELAY;
CPUCS = 0x10;
SYNCDELAY;
IFCONFIG = 0xA3;

SYNCDELAY;
REVCTL = 0x03; // 0x01

SYNCDELAY;
PINFLAGSAB = 0xE8; // FLAGA = 2_empty, FLAGB=6_FULL
SYNCDELAY;
PINFLAGSCD = 0xCC; // FLAGC/D 2_full
SYNCDELAY;
FIFOPINPOLAR = 0x00;

SYNCDELAY;
EP1OUTCFG = 0x00;
SYNCDELAY;
EP1INCFG = 0x00;
SYNCDELAY;
EP2CFG = 0xA2;
SYNCDELAY;
EP4CFG = 0x00;
SYNCDELAY;
EP6CFG = 0xE2;
SYNCDELAY;
EP8CFG = 0x00;

SYNCDELAY;
FIFORESET = 0x80;
SYNCDELAY;
FIFORESET = 0x02;
SYNCDELAY;
FIFORESET = 0x04;
SYNCDELAY;
FIFORESET = 0x06;
SYNCDELAY;
FIFORESET = 0x08;
SYNCDELAY;
FIFORESET = 0x00;

// since the defaults are double buffered we must write dummy byte counts twice
SYNCDELAY;
OUTPKTEND = 0x82; // arm EP2OUT by writing byte count w/skip.
SYNCDELAY;
OUTPKTEND = 0x82; // arm EP2OUT by writing byte count w/skip.

SYNCDELAY;
EP2FIFOCFG = 0x11;
SYNCDELAY;
EP6FIFOCFG = 0x09+0x04; // 04 - ZeroLenIn

// enable dual autopointer feature
AUTOPTRSETUP |= 0x01;

Rwuen = TRUE; // Enable remote-wakeup
}

.......

BOOL DR_SetConfiguration(void) // Called when a Set Configuration command is received
{
if( EZUSB_HIGHSPEED( ) )
{ // FX2 enumerated at high speed
SYNCDELAY; //
EP6AUTOINLENH = 0x02; // set AUTOIN commit length to 512 bytes
SYNCDELAY; //
EP6AUTOINLENL = 0x00;
SYNCDELAY;
enum_high_speed = TRUE;
}
else
{ // FX2 enumerated at full speed
SYNCDELAY;
EP6AUTOINLENH = 0x00; // set AUTOIN commit length to 64 bytes
SYNCDELAY;
EP6AUTOINLENL = 0x40;
SYNCDELAY;
enum_high_speed = FALSE;
}

Configuration = SETUPDAT[2];
return(TRUE); // Handled by user code
}

...........




И не забудьте дернуть ногу "PKTEND" ПЛИС-ой, если отправляемый пакет меньше пакета USB (64 байта в full speed / 512 байт в high), а то он так в FIFO лежать и будет до второго пришествия.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 07:48
Рейтинг@Mail.ru


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