Цитата(aaarrr @ Nov 27 2009, 14:13)

И как размер пакета может определить решение использовать или не использовать dual bank? Это совсем не связанные друг с другом вещи.
Будет пропускать.
Используйте два банка.
Вот таким образом правильно использовать 2 банка?:
Код
__ramfunc static uint AT91F_UDP_Write(AT91PS_CDC pCdc, u8 *pData, uint txlength)
{
AT91PS_UDP pUDP = pCdc->pUdp;
uint cpt = 0;
if((pUDP->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXPKTRDY)==0)
{
Udp_ep_clr_flag(pUDP, AT91C_EP_IN, AT91C_UDP_TXCOMP);
cpt = MIN(txlength, AT91C_EP_IN_SIZE); // Send the first packet
cpt = txlength;
txlength -= cpt;
while (cpt--) pUDP->UDP_FDR[AT91C_EP_IN] = *pData++;
Udp_ep_set_flag(pUDP, AT91C_EP_IN, AT91C_UDP_TXPKTRDY);
//Udp_ep_clr_flag(pUDP, AT91C_EP_IN, AT91C_UDP_TXCOMP);
while(txlength)
{
cpt = MIN(txlength, AT91C_EP_IN_SIZE); // Fill the second bank
txlength -= cpt;
while(cpt--)pUDP->UDP_FDR[AT91C_EP_IN] = *pData++;
while(!(pUDP->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP)) // Wait for first bank sented
{
if(!AT91F_UDP_IsConfigured(pCdc))return txlength;
}
Udp_ep_set_flag(pUDP, AT91C_EP_IN, AT91C_UDP_TXPKTRDY);
Udp_ep_clr_flag(pUDP, AT91C_EP_IN, AT91C_UDP_TXCOMP);
}
}
return txlength;
}