Цитата(_dem @ Dec 7 2009, 11:40)

1. Можно. Работает и организовано все вполне пристойно, почитайте мануал
Отправка идет по фреймам, то есть пока отправляется фрейм, вы готовите новые данные.
Может вопрос не правильно задал. Не получается, поясню на коде:
Инициализация DMA:
Код
#define defUDMA_Ctrl (0xC0000000|(0x1<<23)|(0x1<<21)|(0x0<<19)|(0x2<<17) |(0x1<<15)|(0x0<<9)|(0x1<<7)|(0x2<<5)|(0x0<<3))
void USB_InitDMA(void){
UDMAFCP1 = 0x00000001;
// DMA channel 0
DMACh0EOT = 1;
UDMA0Dest = 0x00000004; // EP1 IN transfer
UDMA0Throtl = 0x00000001;
UDMA0Ctrl = defUDMA_Ctrl;
// DMA channel 1
DMACh1EOT = 1;
UDMA1Dest = 0x00000004; // EP1 IN transfer
UDMA1Throtl = 0x00000001;
UDMA1Ctrl = defUDMA_Ctrl;
}
Циклическая ф-ция для проверки:
Код
if(!(UDMA0Stat & 0x03)){ // 0x00 - Idle
UDMA0Src = (DWORD)&pData[DataOffset]; // Source is IRAM on LPC288x
UDMA0Cnt = cnt;
DMACh0EOT = 0x00;
UDMA0Ctrl |= 0x01; // Send DMA request on channel 0 (CHEN = Low priority)
DataOffset += cnt;
}
if(!(UDMA1Stat & 0x03)){ // 0x00 - Idle
UDMA1Src = (DWORD)&pData[DataOffset]; // Source is IRAM on LPC288x
UDMA1Cnt = cnt;
DMACh1EOT = 0x00;
UDMA1Ctrl |= 0x01; // Send DMA request on channel 1
DataOffset += cnt;
}
Отправляет первый пакет в 512 байт, а дальше тишина. С одним каналом работает.