Извините за задержку с ответом: только сегодня смог попробовать ваш вариант решения проблемы.
Сразу же скажу, что ваш текст не лишен недостатков:
PINFLAGSCD = 0xCC;
при этом PORTACFG не проинициализирован, а следовательно FlagD - это обычный порт ввода-вывода.
Далее при сбросе FIFO:
SYNCDELAY;
FIFORESET = 0x80;
SYNCDELAY;
FIFORESET = 0x02;
SYNCDELAY;
FIFORESET = 0x04;
SYNCDELAY;
FIFORESET = 0x06;
SYNCDELAY;
FIFORESET = 0x08;
SYNCDELAY;
FIFORESET = 0x00;
Что касается сброса то TRM рекомендует сбрасывать по другому, например так: FIFORESET = 0x82;
Теперь, что касается вашего примера: он у меня не работает. Конфигурация устройства у меня немного другая:
Источник IFCLK у меня внешний:
Код
void TD_Init(void) // Called once at startup
{
// ports initialization
PORTACFG = bmFLAGD;
SYNCDELAY;
OEC = 0xFF; //this is test port, don't connected anything
SYNCDELAY; //
IOC = 0x00;
SYNCDELAY;
OEA = 0x01; //PA.0 = PROG
SYNCDELAY;
IOA = 0x01;
SYNCDELAY;
OEE = 0x91; //PE.0 - FPGA Reset, PE.4 - DOUT, PE.7 - CCLK
SYNCDELAY;
IOE = 0x01;
SYNCDELAY;
//core initialization
CPUCS = bmCLKSPD1 | bmCLKOE; //Setting 48MHz, CLKOE
SYNCDELAY;
IFCONFIG = bmIFCFG1 | bmIFCFG0; // IFCFG = 11 - Slave FIFO Interface (external master)
SYNCDELAY;
REVCTL = bmNOAUTOARM | bmSKIPCOMMIT;
SYNCDELAY;
//PINFLAGS initialization
PINFLAGSAB = 0x88;
SYNCDELAY;
PINFLAGSCD = 0x88;
SYNCDELAY;
FIFOPINPOLAR = 0x00; //standard pin polarity
SYNCDELAY;
//Endpoints config
//EP1 - standard configuration
EP2CFG = 0xA2; // EP2OUT
SYNCDELAY;
EP4CFG = 0x00; //EP4 - disabled
SYNCDELAY;
EP6CFG = 0x00; //EP6 - disabled
SYNCDELAY;
EP8CFG = 0x00; //EP8 - disabled
SYNCDELAY;
//FIFO reset
FIFORESET = 0x80;
SYNCDELAY;
FIFORESET = 0x82;
SYNCDELAY;
FIFORESET = 0x84;
SYNCDELAY;
FIFORESET = 0x86;
SYNCDELAY;
FIFORESET = 0x88;
SYNCDELAY;
FIFORESET = 0x00;
SYNCDELAY;
// since the defaults are double buffered we must write dummy byte counts twice
OUTPKTEND = 0x82; // arm EP2OUT by writing byte count w/skip.
SYNCDELAY;
OUTPKTEND = 0x82; // arm EP2OUT by writing byte count w/skip.
SYNCDELAY;
EP2FIFOCFG = bmAUTOOUT | bmWORDWIDE;
SYNCDELAY;
// enable dual autopointer feature
AUTOPTRSETUP |= 0x01;
Rwuen = TRUE; // Enable remote-wakeup
}
Обратите внимание, что все флаги у меня находятся в одном состоянии = EP2EMPTY, при этом результат на флагах у меня разный: флаги A,C,D - установлены, а флаг B - сброшен.
Есть ли какие-то идеи как этот код запустить.