реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LPC288x USB два канала DMA на одну ЕР.
AndreyKar
сообщение Dec 7 2009, 05:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 17-01-07
Пользователь №: 24 508



1.Кто-нибудь разбирался как работает USB DMA? Меня интересует можно ли на одну ЕР направлять оба канала DMA, т.е. пока DMA0 отправляет, подготовить DMA1 и т.д.? Если да, то как будет происходить арбитраж между ними?
2. За счет чего этот МК выдает скорость USB 480MB/s (HS)?
Go to the top of the page
 
+Quote Post
_dem
сообщение Dec 7 2009, 08:40
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



1. Можно. Работает и организовано все вполне пристойно, почитайте мануал smile.gif
Отправка идет по фреймам, то есть пока отправляется фрейм, вы готовите новые данные.

2. За счет того, что для передачи за один фрейм с помощью DMA доступно до 64Кбайта данных. Соотвественно, если вы будете успевать их подсовывать - то 64*8*100 = 480 мбит. ( учитывая служебку)
Go to the top of the page
 
+Quote Post
AndreyKar
сообщение Dec 8 2009, 05:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 17-01-07
Пользователь №: 24 508



Цитата(_dem @ Dec 7 2009, 11:40) *
2. За счет того, что для передачи за один фрейм с помощью DMA доступно до 64Кбайта данных. Соотвественно, если вы будете успевать их подсовывать - то 64*8*100 = 480 мбит. ( учитывая служебку)

Мож я плохо читал мануал, но я так и не понял, где он берет эту частоту? Ядро на 60МГц, Main PLL - 160 MHz ≤ .... ≤ 320 MHz.
High speed PLL тоже не понял зачем он. В общем, для меня, даташит и юзер мануал очень слабенькие после Атмеловских ARMов.
Go to the top of the page
 
+Quote Post
AndreyKar
сообщение Feb 18 2010, 08:53
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 17-01-07
Пользователь №: 24 508



Цитата(_dem @ Dec 7 2009, 11:40) *
1. Можно. Работает и организовано все вполне пристойно, почитайте мануал smile.gif
Отправка идет по фреймам, то есть пока отправляется фрейм, вы готовите новые данные.

Может вопрос не правильно задал. Не получается, поясню на коде:
Инициализация 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 байт, а дальше тишина. С одним каналом работает.

Сообщение отредактировал AndreyKar - Feb 18 2010, 08:55
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 06:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016