Код обработки прерывания от EP1(out). Этот коди спользует прерключающиеся банки.
Код
if((AT91C_BASE_UDP->UDP_ISR) & AT91C_UDP_EPINT1) // EP1 Interrupt
{
unsigned int packetSize, nbBytesRcv = 0;
if(pCDC.currentConfiguration)
{
if(AT91C_BASE_UDP->UDP_CSR[AT91C_EP_OUT] & pCDC.currentRcvBank)
{
packetSize = AT91C_BASE_UDP->UDP_CSR[AT91C_EP_OUT]>>16; // EP1
while(packetSize--) EP1_buf[nbBytesRcv++] = AT91C_BASE_UDP->UDP_FDR[AT91C_EP_OUT];
Udp_ep_clr_flag(pUDP,AT91C_EP_OUT, pCDC.currentRcvBank);
if(pCDC.currentRcvBank == AT91C_UDP_RX_DATA_BK0)pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK1;
else pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK0;
}
Udp_ep_clr_flag(pUDP, 1, AT91C_UDP_RX_DATA_BK0);
Udp_ep_clr_flag(pUDP, 1, AT91C_UDP_RX_DATA_BK1);
}
length = nbBytesRcv;
}
Мне нужно использовать только банк 0, т.е. я убираю из кода, приведенного выше
Код
if(pCDC.currentRcvBank == AT91C_UDP_RX_DATA_BK0)pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK1;
else pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK0;
и pCDC.currentRcvBank у меня всегда равен AT91C_UDP_RX_DATA_BK0. Но в этом случае посылки по 50 байт от хоста у меня принмаются через раз, т.е. одну посылку считываю нормально(приходит то, что нужно), а вместо следающей посылки считываю нули. Т.е. надо переключать банки? А как, тогда с одним банком работать?