Используется чип вместе с FPGA в режиме slave fifo.Передача идет по EP2 (размер 512 байт,двойная буфферизация)
Хост периодически передает данные в контроллер.(один кадр размером 512 байт).
FPGA срабатывает по прерыванию от чипа.
Для этого в коде прошивки в процедуре TD_Poll есть такой код:
Код
if(!(EP2468STAT & 0x01)) { // EP2E
IOE &= ~_int_dsp_;
IOE |= _int_dsp_;
SYNCDELAY;
OUTPKTEND = 0x02;
return;
}
IOE &= ~_int_dsp_;
IOE |= _int_dsp_;
SYNCDELAY;
OUTPKTEND = 0x02;
return;
}
Тоесть если буффер не пустой дрыгаем ногой.По нему собственно FPGA и начинает вычитывать fifo.
Проблема вот в чем.
При первой отсылке происходит прерывание,данные вычитываются хорошо.А вот по второй тоже идет прерывание только данные читаются теже самые.А по третьей отсылке читаются уже обновленные.
Я подумал что возможно так происходит из-за двойной буфферизации. Хотя мне кажется что если присылаем всегда один пакет и шлем мы не часто(раз в секунду) то второй буффер не должен быть задействован.Врочем логика работы двойной буфферизации для меня покрыта мраком.Хотелось бы просвятится в этом направлении.
ЗЫ: Есть ли возможность убрать двойную буфферизацию.В даташите есть варианты:double triple quad invalid.Что означает invalid.Отсутствие буфферизации?
Спасибо.