Цитата(aaarrr @ Mar 25 2010, 20:44)

Придется смочь.
Я попытался через 2 банка передавать данные на хост
CODE
while(1) // MAIN infinite LOOP
{
if(bank == 0)
{
if(!(regUDP->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXPKTRDY))
{
//заполняем первый банк
...
}
if(kA==0)
{
bank = 1;
regUDP->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
kA=12;
}
}
else //if(bank = 1)
{
if(chTXC == 0) //второй банк не заполнен
{
//заполняем второй банк
...
if(kA==0) chTXC = 1;
}
else //второй банк заполнен
{
if(regUDP->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP)
{
chTXC = 0;
regUDP->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
regUDP->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
kA = 12;
}
}//else chTXC == 1
}//else if(bank = 1)
}
То есть тут я не задерживаю выполнение основного цикла программы на ожидании TXCOMP, а просто периодически опрашиваю его в основном цикле. Но так нестабильно работает. Бывает нормально, стабильно передает данные по USB, а бывает почти сразу захлебывается и перестает передавать. И всеравно пропусков много.