Цитата(billidean @ Nov 19 2017, 18:10)

. . .
Попробовал асинхр. режим...толку ноль.
. . .
Поделиться прошивкой не могу, тк. "немое". Да и сделана она в Keil/FX2 и привязана на inf-конфигурацию, опятьже "немою".
Отличается от примера только парой строк в ассемблерно файле прошивки и-или в опциях поекта.
Пороюсь в архивах, цитаты выложу (для работы в асинхр. режиме).
----
Повторяю свой вопрос, чем смотрите линии данных ? (осцилограф, или что)
Проверьте настройки полярностей, в частности OE.Если есть возможность - вместо ПЛИС прикрутите на кипариса эмулятор ПЛИСы в виде любого процессора,
который позволяет делать отладку (это если нет нормальных средств чтоб нормально аппаратно мониторить - осцилограф и лог.анализатор). Это всего-то 10 линий подключить (всю шину данных не надо, достаточно 1-4 линии).
Запустить "с лету" такую систему можно если, как предлагается у кипариса, взять 2 ихних кита и сделать кольцевой канал fifo.
Если китов нет (я стартовал без них), то самое оптимальное - это
- Консольное win32 утилита на базе ихней библиотеки
(за основу можно взять ихний исходник, не помню чего, но назывался cydesc)
- собственно fifo
- процессор "клиент/сервер" для fifo.
Вот код тестилки, которую я использовал (для приема).
Код
#include <windows.h>
#include <stdio.h>
#include "cyapi.h"
#include <conio.h>
#include <time.h>
int main()
{
CCyUSBDevice *USBDevice;
USB_DEVICE_DESCRIPTOR descr;
USBDevice = new CCyUSBDevice(NULL);
printf("device count = %d \n",USBDevice->DeviceCount());
for (int i=0; i < USBDevice->DeviceCount(); i++)
{
if (USBDevice->Open(i))
{
USBDevice->GetDeviceDescriptor(&descr);
printf("bLength \t\t 0x%02x\n",descr.bLength);
. . . . .
printf("iSerialNumber \t\t 0x%02x\n",descr.iSerialNumber);
printf("bNumConfigurations \t 0x%02x\n\n",descr.bNumConfigurations);
USBDevice->Close();
}
else
{ printf("unable to open device\n");
exit(-1);
}
}
USBDevice->Close();
OVERLAPPED outOvLap, inOvLap;
CCyUSBDevice *USBDevice1 = new CCyUSBDevice(NULL);
int n_devices = USBDevice1->DeviceCount();
if ( n_devices <= 0 )
{ printf("\nINFO: Unable to open device CYPRESS;\n");
exit(-1);
}
outOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_OUT");
inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN");
static unsigned char inBuf[100000];
LONG length = 65000; //128;
ZeroMemory(inBuf, sizeof(inBuf));
clock_t start, stop;
double duration;
while( !kbhit() )
{
length = 65000;
start = clock( ); // метка времени старта цикла опроса
UCHAR *inContext = USBDevice1->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap);
USBDevice1->BulkInEndPt->WaitForXfer(&inOvLap,5000);
USBDevice1->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext);
stop = clock( ); // метка времени стопа
duration = (double)(stop - start) / CLOCKS_PER_SEC;
printf("\nLen = %lu PacketInterval = %02.2f sec", length, duration);
display_hex( inBuf, 100, "=== Packet In =====");
ZeroMemory(inBuf, sizeof(inBuf));
Beep(6000, 10);
}
CloseHandle(outOvLap.hEvent);
CloseHandle(inOvLap.hEvent);
exit(0);
} // main
Update:В оригинале было так (переключение через установку в опциях компилятора - #defaine)
Код
#ifdef FREE
IFCONFIG = 0x03; // IFCLK Source external (i.e.) connected to MPEG_CLK minimum should be 5 MHz
// Synchronous Mode, Free Running MPEG_CLK, MPEG_VALID is used as SLWR strobe
// FX2LP in SLAVE FIFO Mode
SYNCDELAY;
#endif
#ifdef GATED
IFCONFIG = 0xCB; // IFCLK Source internal (i.e.) Gated MPEG_CLK, MPEG_CLK is connected to SLWR
// FX2LP in SLAVE FIFO Mode
SYNCDELAY;
#endif
Чтоб заработало (асинхронный режим) - переделал так (и убрал переключатель)
Код
IFCONFIG = 0xCB; // IFCLK Source internal (i.e.) Gated MPEG_CLK, MPEG_CLK is connected to SLWR
// FX2LP in SLAVE FIFO Mode
SYNCDELAY;
// стробирующие сигналы с активным отрицательным уровнем
// FIFOPINPOLAR = 0x04; // SLWR is configured as active HIGH : Can be changed to 0x00 for SLWR to be active Low
FIFOPINPOLAR = 0x00;