В даташите к 320-й написано что бит INPRDY (EINCSRL.0) устанавливается програмно а очищается аппаратно. В примере
USB_Bulk, в функции
BulkOrInterruptIn(...) есть такой кусочек:
Цитата
// If a FIFO slot is open, write a new packet to the IN FIFO
if (!(bCsrL & rbInINPRDY)){
pEpInStatus->uNumBytes = NumBytes;
pEpInStatus->pData = (BYTE*)DataToWrite;
// Write <uNumBytes> bytes to the <bEp> FIFO
FIFOWrite(pEpInStatus->bEp, pEpInStatus->uNumBytes,(BYTE*)pEpInStatus->pData);
// Set Packet Ready bit (INPRDY)
UWRITE_BYTE(EINCSRL, rbInINPRDY);
}
Короче говоря у меня на второй раз этот кусок затыкается - при первой проверке у меня FIFO slot NOT is open
Я же вызываю функцию
BulkOrInterruptIn(...) из функции
main().
И по идее после того как произойдет передача буфера FIFO вызовется прерывание.
КАК ЕГО ОБРАБАТЫВАТЬ ?
Что нужно делать в
USB_ISR() Цитата
void USB_ISR () interrupt 8{
....
// Endpoint1 IN
if (bInInt & rbIN1){
ЧТО ДЕЛАТЬ СДЕСЬ ???
}
....
}
Смотреть в себя, зреть муки свои, зная, что сам ты виновник мук - вот истинное страдание.
Отладка / Софокл, "Аякс".