Я сама тоже разбираюсь с этим МК, режим 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;
}
Если у кого-нибудь есть соображения, с чем может быть связано такое поведение МК, от поделитесь пожалуйста.