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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> DMA - для чего он и как его использовать
Abakt
сообщение Jan 30 2007, 22:39
Сообщение #1


Участник
*

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



Подскажите для чего нужен DMA и если можно пример как его использовать. Пример "фирменный" или свой - в чем "СОЛЬ" DMA ?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jan 31 2007, 01:07
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



DMA aka Direct Memory Access - дает возможность принимать данные полностью на аппаратном уровне. Проинициализировав DMA один раз можно уже не беспокоиться об обработке приема/передачи. Например УАРТ надо постоянно поллить или вызывать прерывание по получению байта. С помощью DMA указываеться адрес буфера и количество байт. После этого ядро будет заниматься своими делами, а данные потихоньку капать в буфер. Прерывание вызоветься уже по окончании приема. То же самое и с передачей.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Abakt
сообщение Jan 31 2007, 01:20
Сообщение #3


Участник
*

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



Спасибо. подскажите апноут какой нить чтоб посмотреть конкретно.

и еще - этот буфер будет требовать данные или принимть по мере помтупления ? т.е. как передатчик даст ... или по всякому бывает.

и еще - ресь идет о внутренней РАМ или и внешней тоже ?
Go to the top of the page
 
+Quote Post
Abakt
сообщение Jan 31 2007, 01:45
Сообщение #4


Участник
*

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



и какова скорость приема дданных ? например по параллельному интерфейсу в LPC или SAM - во сколько раз медленней такта ?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 31 2007, 02:36
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



DMA - это маленький простеникий и тупой slave сопроцессор, который занимается только тем что копирует данные из одного места в другое. Сам по себе DMA работать не может. Основной процессор должен инициализировать DMA - задать ему адрес источника данных, адрес приемника данных, количество данных, после чего - запустить DMA. DMA оповестит основной процессор с помощью прерывания после того как окончит работу.

Скорость работы DMA - определяется источником и приемником данных. С памятью DMA работает точно также как и процессор, т.о. он может писать и во внешнюю память и во внутреннюю. За исключением того, что DMA и процессору приходится делить шину памяти. Доминирует на шине процессор, тобиш если процессору срочно потребовалось что-то прочитать/записать в/из памяти - то DMA в это время будет курить в сторонке.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jan 31 2007, 10:27
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Спасибо. подскажите апноут какой нить чтоб посмотреть конкретно.

Нечего там смотреть. Прописываются два регистра - указатель на буфер и количество байт. Для SAM все описание узла страницы на три включая раскладку регистров.
Цитата
и еще - этот буфер будет требовать данные или принимть по мере помтупления ? т.е. как передатчик даст ... или по всякому бывает.

По сути DMA это второй счетчик адреса. Т.е. в обычном режиме идет пересылка IO -> регистры ядра -> RAM, с DMA IO -> RAM (для передачи наоборот) пока не насчитает заданное количество байт.
Для IO будет ждать готовности данных, для памяти будет молотить пока свободна шина.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Abakt
сообщение Jan 31 2007, 11:40
Сообщение #7


Участник
*

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



большое спасибо за помощь. сижу разбираюсь.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 31 2007, 20:34
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(defunct @ Jan 31 2007, 01:36) *
Доминирует на шине процессор, тобиш если процессору срочно потребовалось что-то прочитать/записать в/из памяти - то DMA в это время будет курить в сторонке.

C сточностью до наоборот - курить будет процессор, а DMA будет его тормозить и тупо выполнять его приказ.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Jan 31 2007, 22:17
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Цитата(zltigo @ Jan 31 2007, 20:34) *
C сточностью до наоборот - курить будет процессор, а DMA будет его тормозить и тупо выполнять его приказ.


Странно. Всегда считал наоборот. Например DMA у ARMов от TI курят как раз, когда проц работает. smile.gif


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jan 31 2007, 22:35
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
C сточностью до наоборот - курить будет процессор, а DMA будет его тормозить и тупо выполнять его приказ.

А и действительно. Не дадите ли ссылку на доку? Момент ведь весьма принципиальный.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
ASN
сообщение Jan 31 2007, 23:05
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



zltigo
Режим работы контроллера DMA определяется в первую очередь типом используемой накристальной шины. В частности, шина AHB может иметь несколько ведущих и ведомых, и несколько шина адреса данных, подключаемых через мультиплексор. Поэтому время задержки транзакции незначительно, то есть как CPU, так и DMA имеют, в среднем, одинаковые возможности для доступа к ресурсам.
Поправите, если не прав.
Abakt
В режиме DMA не используются ресурсы (регистры, АЛУ и т.п.) на операции пересылки данных.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Feb 1 2007, 00:40
Сообщение #12


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(beer_warrior @ Jan 31 2007, 23:35) *
А и действительно. Не дадите ли ссылку на доку? Момент ведь весьма принципиальный.

Вот что написано в мануале к SAM7S:

The Memory Controller has a simple, hard-wired priority bus arbiter that gives the control of the
bus to one of the two masters. The Peripheral DMA Controller has the highest priority; the ARM
processor has the lowest one.
[AT91SAM7S.pdf, 6175G–ATARM–22-Nov-06, page 120]

Действительно, курить в сторонке будет процессор, а не DMA...

Сообщение отредактировал sonycman - Feb 1 2007, 00:41
Go to the top of the page
 
+Quote Post
Karl
сообщение Feb 1 2007, 08:49
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Помогите, пожалуйста, с конкретной задачей: Необходимо через ДМА передавать массив в SPI и получать из него ответ (контроллер SAM7S64). Какие операции необходимо произвести?
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Feb 1 2007, 12:23
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(Karl @ Feb 1 2007, 08:49) *
Помогите, пожалуйста, с конкретной задачей: Необходимо через ДМА передавать массив в SPI и получать из него ответ (контроллер SAM7S64). Какие операции необходимо произвести?


Вот как делаю я (коментарии от специалистов приветствуются wink.gif )
Здесь только отсылка, ну и особенности от FreeRTOS, но общий смысл должен быть понятен.

Код
void SPI_task(void *pvParameters)
{
    unsigned portCHAR i;
    unsigned portCHAR SPI_buf[8];
    ( void ) pvParameters;
    portENTER_CRITICAL();

    AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_SPI);
    AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, AT91C_PA11_NPCS0 |
        AT91C_PA12_MISO |
        AT91C_PA13_MOSI |
        AT91C_PA14_SPCK, 0);
    AT91F_SPI_Reset(AT91C_BASE_SPI);

    AT91C_BASE_SPI->SPI_MR=0x0E0011;//Master mode, fixed select, disable decoder, FDIV=0 (MCK), PCS=1110

    AT91F_SPI_CfgCs(AT91C_BASE_SPI, 0,  AT91C_SPI_NCPHA | (128 << 8) | 0x04 );
    AT91F_SPI_Enable(AT91C_BASE_SPI);
    AT91F_PDC_Open(AT91C_BASE_PDC_SPI);
    for(i=0;i<8;i++) SPI_buf[i]=i;
    portEXIT_CRITICAL();

    for(;;)

     {
        while(AT91F_SPI_SendFrame(AT91C_BASE_SPI,(char*) &SPI_buf[0],8,0,0) == 0)
          vTaskDelay(portTICK_RATE_MS * 10);
        i++;
        SPI_buf[7]=i;
        vTaskDelay(portTICK_RATE_MS * 1000);
     }
}
Go to the top of the page
 
+Quote Post
Karl
сообщение Feb 1 2007, 13:26
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Спасибо, вроде все понятно. А с приемом Вы не разбирались?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 18:19
Рейтинг@Mail.ru


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