Цитата(owl @ Mar 18 2009, 12:35)

Может кому поможет.
Были проблемы с зависанием передачи в функции USBD_Write(), помогла замена макроса SET_CSR(bEndpoint, AT91C_UDP_TXPKTRDY), на:
Происходило прерывание и передача оказывалась завершенной до момента проверки условия флага. - проц вешался.
Может быть есть более красивое решение?
Макрос менять не обязательно, трабла возникает только при вызове USBD_Write() не
из прерваний, поэтому:
DWORD cpu_state = sys_disable_irq();
SET_CSR(bEndpoint, UDP_CSR_TXPKTRDY);
sys_restore_irq(cpu_state);
в USBD_Write()
решает все проблеммы.