Делаю управление ПЛИСкой со стороны ПК с применением FT232H в режиме синхронного FIFO. Данные могут быть от одного до 1000 байт.
В сторону ПЛИС данные идут стабильно, ПЛИС их читает, все нормально.
Но вот обратно из ПЛИС не получается выдать ни одного байта ((
Вроде все делаю стандартно:
- проверяю TX# чтобы был 0
- ставлю WR#=0 и на каждом такте CLK (от FTDI) подставляю байты
- по окончании данных ставлю WR#=1
...Пока пытаюсь передать 4 байта.
На ПК код такой:
Код
ftStatus = FT_Write(ftHandle, byOutputBuffer, dwNumBytesToSend, &dwNumBytesSent);
if( (ftStatus != FT_OK) || (dwNumBytesSent != dwNumBytesToSend) ) // Did the write-command execute OK?
{
mdebug("Error in FT_Write");
return -1; // Exit with error
}
while(1)
{
qApp->processEvents();
// ftStatus = FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord);
ftStatus = FT_GetQueueStatus(ftHandle,&RxBytes);
if( (ftStatus != FT_OK) ) // Did the FT_GetStatus-command execute OK?
{
mdebug("Error in FT_GetStatus");
return -1; // Exit with error
}
mdebug("RxBytes=" + QString::number(RxBytes) + "\tTxBytes=" + QString::number(TxBytes) + "\tEventDWord=" + QString::number(EventDWord));
Sleep(1000);
// проверяем наличие данных в приемном буфере микросхемы
if (RxBytes > 0)
{
ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&BytesReceived); // по этой команде считываем данные
// из микросхемы, RxBuffer содержит сами данные,
// RxBytes — количество доступных для чтения данных,
// BytesReceived — число принятых данных
if (ftStatus == !FT_OK)
{
mdebug("Error in FT_GetStatus");
return -1; // Exit with error
}
else
{
mdebug("Data is OK");
return 0;
}
}
}
if( (ftStatus != FT_OK) || (dwNumBytesSent != dwNumBytesToSend) ) // Did the write-command execute OK?
{
mdebug("Error in FT_Write");
return -1; // Exit with error
}
while(1)
{
qApp->processEvents();
// ftStatus = FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord);
ftStatus = FT_GetQueueStatus(ftHandle,&RxBytes);
if( (ftStatus != FT_OK) ) // Did the FT_GetStatus-command execute OK?
{
mdebug("Error in FT_GetStatus");
return -1; // Exit with error
}
mdebug("RxBytes=" + QString::number(RxBytes) + "\tTxBytes=" + QString::number(TxBytes) + "\tEventDWord=" + QString::number(EventDWord));
Sleep(1000);
// проверяем наличие данных в приемном буфере микросхемы
if (RxBytes > 0)
{
ftStatus = FT_Read(ftHandle,RxBuffer,RxBytes,&BytesReceived); // по этой команде считываем данные
// из микросхемы, RxBuffer содержит сами данные,
// RxBytes — количество доступных для чтения данных,
// BytesReceived — число принятых данных
if (ftStatus == !FT_OK)
{
mdebug("Error in FT_GetStatus");
return -1; // Exit with error
}
else
{
mdebug("Data is OK");
return 0;
}
}
}
Сигналтапом в ПЛИСке вижу, что сигналы TX# и WR# имеют запланированные уровни. Но прога на ПК висит в цикле и пишет, что RxBytes = 0.
Все связи прозвонил...уже не знаю, к чему придраться...
Кто работал с такими микросхемами, подскажите плз, что может быть не так у меня.
Буду очень благодарен за рабочие проектики по подобной теме.
Нажмите для просмотра прикрепленного файла
Вот картина на сигналтапе, здесь я пытаюсь выдать 12 байт 0xFF (не спрашивайте зачем...так надо)
Видно, что циклограмма "рабочая"...
...но ПК не видит данных в буфере FT232H...