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

 
 
> 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
 
Start new topic
Ответов
Karl
сообщение Feb 15 2007, 07:26
Сообщение #2


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

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



Цитата(Kitsok @ Feb 12 2007, 21:01) *
Цитата(Karl @ Feb 7 2007, 08:44) *

Спасибо, вроде разобрался. Заработало.

Добрый день!

А можете код показать? Удалось ли принимать данные с использованием PDC?


Да, передачу и прием по PDC организовать удалось. Проблемы, как оказалось, были не с PDC, а с некорректной работой с SPI.
Инициализация SPI:
Код
void SPI_ini(void)
{

    AT91F_SPI_Reset(AT91C_BASE_SPI);
    //delay_ms(5);
    // Инициализация SPI. Запустим на работу с частотой примерно 2,5 МГц
    // Конфигурация канала АЦП (2 канал)
    AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_SPI);        // Тактирование на SPI
    
    AT91F_SPI_CfgMode(AT91C_BASE_SPI,
                    1<<0|                //Интерфейс работает в режиме ведущего.
                    0<<1|                //Фиксированный выбор корпуса внешнего периферийного устройства.
                    0<<2|                //PCSDEC: Декодирование выбора корпуса 0 = Периферийные устройства непосредственно подключены к выводам выбора корпуса.
                    0<<4|                //MODFDIS: Определение ошибки режима работы 0 =Определение ошибки режима работы запрещено.
                    0<<7|                // Зацикливание 0 - отключено
                    0xb<<16);                // PCS: Выбор корпуса периферии  Корпус 3
        
    AT91F_SPI_CfgCs(AT91C_BASE_SPI,2,
                    AT91C_SPI_BITS_8|            // 8 бит в пакете
                    400<<8|                        // Частота SPI в 20 наза меньше MCK    (необходимо не более 2,5 МГц)
                    2<<16|                        // Задержка перед выдачей тактовой частоты
                    0<<24|                        // Задержка между последовательными передачами данных
                    1<<1);


    AT91F_SPI_Enable(AT91C_BASE_SPI);
    AT91F_PDC_Open(AT91C_BASE_PDC_SPI);
}


Собственно работа:
Код
for(;;)

{
while(AT91F_SPI_SendFrame(AT91C_BASE_SPI,(char*) &SPI_buf_TX[0],sizeof(SPI_buf_TX),0,0) == 0);
        u08 a = AT91F_SPI_ReceiveFrame(AT91C_BASE_SPI,(char*) &SPI_buf_RX[0],sizeof(SPI_buf_TX),0,0);
    // Ожидаем, пока приемный буфер заполнится. В дальнейшем включу на прерывание.
    while(!( a = AT91C_BASE_SPI->SPI_SR & AT91C_SPI_ENDRX));
    ...
    ...    
    ...    
}
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Feb 15 2007, 19:59
Сообщение #3


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

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



Цитата
Собственно работа:
Код
for(;;)

{
while(AT91F_SPI_SendFrame(AT91C_BASE_SPI,(char*) &SPI_buf_TX[0],sizeof(SPI_buf_TX),0,0) == 0);
        u08 a = AT91F_SPI_ReceiveFrame(AT91C_BASE_SPI,(char*) &SPI_buf_RX[0],sizeof(SPI_buf_TX),0,0);
    // Ожидаем, пока приемный буфер заполнится. В дальнейшем включу на прерывание.
    while(!( a = AT91C_BASE_SPI->SPI_SR & AT91C_SPI_ENDRX));
    ...
    ...    
    ...    
}


Кстати абсолютно не вижу кайфа в такой конструкции.
ДМА гонит данные, ядро ожидает завершения. Точно так же можно использовать и программные счетчик и указатель.
Чтобы действительно получить выигрыш, флажок завершения приема/передачи надо прицепить к прерыванию. В таком случае действительно ДМА будет жить своей жизнью, а ядро отвлекаться на подготовку/обработку данных один раз на фрейм, а в остальное время заниматься чем-то полезным.


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


Местный
***

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



Цитата(beer_warrior @ Feb 15 2007, 19:59) *
Кстати абсолютно не вижу кайфа в такой конструкции.
ДМА гонит данные, ядро ожидает завершения. Точно так же можно использовать и программные счетчик и указатель.
Чтобы действительно получить выигрыш, флажок завершения приема/передачи надо прицепить к прерыванию. В таком случае действительно ДМА будет жить своей жизнью, а ядро отвлекаться на подготовку/обработку данных один раз на фрейм, а в остальное время заниматься чем-то полезным.


Ну почему-же нету кайфа.

Я например под FreeRTOS клепаю, так у меня, пока данные не готовы, будет отдаваться выполнение другим задачам wink.gif

Другой вопрос меня интересует, может доку не внимательно читал.

Вот допустим, я так сделал железо, что один и тот-же ChipSelect у меня работает и на передачу и на прием (разнос по сигналами MOSI/MISO).
Запускаю я одновременно и передачу и прием.
SPI может дупелксно и передавать и принимать?
Go to the top of the page
 
+Quote Post
Karl
сообщение Feb 16 2007, 12:53
Сообщение #5


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

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



Цитата(Kitsok @ Feb 16 2007, 13:46) *
Вот допустим, я так сделал железо, что один и тот-же ChipSelect у меня работает и на передачу и на прием (разнос по сигналами MOSI/MISO).
Запускаю я одновременно и передачу и прием.
SPI может дупелксно и передавать и принимать?


SPI работает в дуплексном режиме. По каждому тактовому сигналу один битик передается и один принимается.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Abakt   DMA - для чего он и как его использовать   Jan 30 2007, 22:39
- - beer_warrior   DMA aka Direct Memory Access - дает возможность п...   Jan 31 2007, 01:07
- - Abakt   Спасибо. подскажите апноут какой нить чтоб посмотр...   Jan 31 2007, 01:20
- - Abakt   и какова скорость приема дданных ? например по пар...   Jan 31 2007, 01:45
- - defunct   DMA - это маленький простеникий и тупой slave сопр...   Jan 31 2007, 02:36
|- - zltigo   Цитата(defunct @ Jan 31 2007, 01:36) Доми...   Jan 31 2007, 20:34
- - beer_warrior   ЦитатаСпасибо. подскажите апноут какой нить чтоб п...   Jan 31 2007, 10:27
- - Abakt   большое спасибо за помощь. сижу разбираюсь.   Jan 31 2007, 11:40
- - Dron_Gus   Цитата(zltigo @ Jan 31 2007, 20:34) C сто...   Jan 31 2007, 22:17
- - beer_warrior   ЦитатаC сточностью до наоборот - курить будет проц...   Jan 31 2007, 22:35
|- - ASN   zltigo Режим работы контроллера DMA определяется ...   Jan 31 2007, 23:05
|- - sonycman   Цитата(beer_warrior @ Jan 31 2007, 23:35)...   Feb 1 2007, 00:40
|- - Karl   Помогите, пожалуйста, с конкретной задачей: Необхо...   Feb 1 2007, 08:49
||- - Kitsok   Цитата(Karl @ Feb 1 2007, 08:49) Помогите...   Feb 1 2007, 12:23
||- - Karl   Спасибо, вроде все понятно. А с приемом Вы не разб...   Feb 1 2007, 13:26
||- - Kitsok   Цитата(Karl @ Feb 1 2007, 13:26) Спасибо,...   Feb 1 2007, 14:08
||- - Karl   Цитата(Kitsok @ Feb 1 2007, 16:08) Цитата...   Feb 1 2007, 16:47
||- - Kitsok   Это инициализация Код#define NCHANNELS 8 extern ...   Feb 2 2007, 11:48
||- - Karl   Можно ли одновременно передавать массив данных в S...   Feb 6 2007, 13:16
||- - Kitsok   Цитата(Karl @ Feb 6 2007, 13:16) Можно ли...   Feb 6 2007, 15:28
||- - Karl   Цитата(Kitsok @ Feb 6 2007, 17:28) Цитата...   Feb 7 2007, 08:44
||- - Kitsok   Цитата(Karl @ Feb 7 2007, 08:44) Спасибо,...   Feb 12 2007, 19:01
|- - zltigo   Цитата(sonycman @ Jan 31 2007, 23:40) The...   Feb 1 2007, 19:38
|- - defunct   Цитата(zltigo @ Feb 1 2007, 18:38) Причем...   Feb 2 2007, 01:46
- - Dron_Gus   Цитата(Kitsok @ Feb 1 2007, 14:08) Нет, м...   Feb 1 2007, 14:53
|- - Kitsok   Спасибо большое! Я так и думал, что в общем-т...   Feb 15 2007, 18:55
|- - Karl   Цитата(beer_warrior @ Feb 15 2007, 21:59)...   Feb 16 2007, 09:29
|- - HARMHARM   Цитата(Kitsok @ Feb 16 2007, 10:46) Друго...   Feb 16 2007, 12:39
|- - Kitsok   Цитата(Karl @ Feb 16 2007, 12:53) SPI раб...   Feb 20 2007, 01:03
|- - Karl   Цитата(Kitsok @ Feb 20 2007, 03:03) Цитат...   Feb 20 2007, 06:54
|- - Kitsok   Всем привет! Вчера вперся в непонятную пробле...   Feb 20 2007, 12:23
- - Slonic   Подскажите, пожалуйста, можно ли использовать DMA ...   Feb 16 2007, 14:35
- - Dron_Gus   А обьясните мне глупому по PDC у SAM7. Предположим...   Feb 20 2007, 17:21
- - Сергей Борщ   Цитата(Dron_Gus @ Feb 20 2007, 16:21) Зна...   Feb 20 2007, 18:01


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

 


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


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