Добрый день!
При работе с ISP1583 возникла необходимость использования двойной буферизации конечных точек.
Я использую две конечные точки - Bulc (IN1, OUT1 , MaxPackSize = 512). Работаю по прерываниям - EP1TX, EP1RX.
При инициализации конечных точек выставляю бит DBLBUF в регистре Endpoint Type, Два раза очищаю буфер (CLBUF = 1 в регистре Control Function). Отключаю конечную точку (ENABLE = 0 в регистре Endpoint Type) Устанавливаю MaxPackSize = 512. Выставляю тип конечной точки Bulc, включаю ее и еще раз делаю двойную очистку буфера.
Ловлю прерывание допустим - EP1RX. Проверяю регистр статуса буфера - Buffer Status. Выставляется бит BUF0. Считываю 512 байт данных из FIFO контроллера. Сбрасываю флаг EP1RX и выхожу из прерывания. Ловлю следующее прерывание - EP1RX. При проверке регистра статуса буфера опять выставляется бит BUF0, а не BUF1. Данные при этом передаются корректно.
Если не забирать 512 байт данных из FIFO, то следующего прерывания я не дожидаюсь.
Подобная ситуация и при передаче к хосту.
Подскажите кто знает. Почему не выставляется бит BUF1. Может алгоритм обработки прерывания должен быть другой. Или конечная точка не так настроена.
|