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

 
 
 
Reply to this topicStart new topic
> использование DMA на AT91SAM7S64(256), кто использовал, подскажите плз...
PrSt
сообщение Sep 26 2006, 12:48
Сообщение #1


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Люди подскажите как использовать DMA канал?

Появилось желание переписать зобор данных с прерываний на DMA, в старом проекте.
Но не знаю как работать с DMA каналом... и нет примера под рукой, чтоб подсмотреть...

Сейчас используется принцип:
"начало приема --> прерываение --> байт в массив и инкремент индекса --> по окончанию обработка данных".

Хочется что бы данные забирать когда заполнился массив, по принципу:
"начало приема --> по окончанию обработка данных".

Нужно что бы данные по USART (или SPI) пожились сразу в память и с этой памятью я мог работать.

Подскажите пожалуста? где можна подсмотреть пример реализации на языке C?
Или подскажите здесь.


--------------------
Go to the top of the page
 
+Quote Post
ig_z
сообщение Sep 26 2006, 13:16
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



Цитата(PrSt @ Sep 26 2006, 15:48) *
Люди подскажите как использовать DMA канал?

Подскажите пожалуста? где можна подсмотреть пример реализации на языке C?
Или подскажите здесь.


Я выдрал кусок из атмельских примеров:
AT91SAM7S64-BasicPDC-IAR4_30A-1_21
Использую для логироания работы УДП в уарт, двойной буферизации пока хватает, хотя по большому счету все равно нужно делать фифо для входных\выходных буферов.

Цитата
Introduction

The goal of this demonstration project is to demonstrate how to use the AT91 USART with the PDC transmission and Reception chain. This project runs a test of the AT91SAM7Sxx device and his corresponding Evaluation Kit, the AT91SAM7S-EK. This project also implements an interrupt example


Description

Please refer to the AT91 Basic tools project for the description of the initialization.

Different PDC mode are used in this application example.

*** ATMEL POLLING ***

*** ATMEL PDC ***

*** ATMEL PDC 1 ***

*** ATMEL PDC 2 ***
Go to the top of the page
 
+Quote Post
PrSt
сообщение Sep 27 2006, 05:58
Сообщение #3


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



вообще ни чего не понял...


--------------------
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Sep 27 2006, 06:22
Сообщение #4


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Я не претендую на титул гуру, сам только начинаю программировать под at91. Недавно для себя делал бибилиотечку для работы с USART, чуть чуть не дописал расчет скорости при разных режимах. Можете посмотреть как работать с PDC , в файле main есть много отрывков кода для эхо-теста, за одно и критику наведете. smile.gif
Прикрепленные файлы
Прикрепленный файл  pr_USART.rar ( 10.28 килобайт ) Кол-во скачиваний: 102
 


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Sep 27 2006, 06:50
Сообщение #5


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(PrSt @ Sep 27 2006, 09:58) *
вообще ни чего не понял...

Вообще BasicPDC действительно помогает. На базе его я сделал SPI и SSC over PDC и все заработало сразу (правда я делал без прерываний).

Какое место вы не поняли? Собственно пример качается с www.at91.com, как и многие другие. Двойная буферизация -- это когда выделяется в памяти два буфера, DMA пишет сначала в один, а next-регистры ссылаются на второй. После заполнения первого возникает прерывание, вы переключаете next-регистры на первый буфер, а DMA пока пишет все во второй. И так далее. Все хорошо, когда вы успеваете обработать один буфер до заполнения второго. Если нет, то нужно делать FIFO: DMA его заполняет, а фоновая обработка его освобождает.


--------------------
شامل
Go to the top of the page
 
+Quote Post
PrSt
сообщение Sep 27 2006, 08:20
Сообщение #6


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Цитата(Edmundo @ Sep 27 2006, 09:50) *
Цитата(PrSt @ Sep 27 2006, 09:58) *

вообще ни чего не понял...

Вообще BasicPDC действительно помогает. На базе его я сделал SPI и SSC over PDC и все заработало сразу (правда я делал без прерываний).

Какое место вы не поняли? Собственно пример качается с www.at91.com, как и многие другие. Двойная буферизация -- это когда выделяется в памяти два буфера, DMA пишет сначала в один, а next-регистры ссылаются на второй. После заполнения первого возникает прерывание, вы переключаете next-регистры на первый буфер, а DMA пока пишет все во второй. И так далее. Все хорошо, когда вы успеваете обработать один буфер до заполнения второго. Если нет, то нужно делать FIFO: DMA его заполняет, а фоновая обработка его освобождает.


угу, вот теперь все прояснилось, благодарю!


--------------------
Go to the top of the page
 
+Quote Post
PrSt
сообщение Sep 27 2006, 08:40
Сообщение #7


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Цитата(SpiritDance @ Sep 27 2006, 09:22) *
Я не претендую на титул гуру, сам только начинаю программировать под at91. Недавно для себя делал бибилиотечку для работы с USART, чуть чуть не дописал расчет скорости при разных режимах. Можете посмотреть как работать с PDC , в файле main есть много отрывков кода для эхо-теста, за одно и критику наведете. smile.gif

Спасибо, за пример.
посмотрю обязательно его....


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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