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

 
 
> SAM4L, DMA и проц
sifadin
сообщение May 22 2014, 17:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Здравствуйте!
Использую массив памяти, разбитый на две части для записи во флэш
DMА заполняет одну половину массива, а другую проц перекидывает во флэш
Потом они меняются
итд
При считывании ошибки, неясно почему.
Вот думаю
Могут ли процессор и DMA одновременно обращатся к SRAM?
Останавливается ли проц когда работает DMA?
В документации не нашел. В глаза не бросилось.
Странно такой важный пункт могли бы почетче
Подскажите плз, если кто знает
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение May 22 2014, 18:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sifadin @ May 23 2014, 01:10) *
В документации не нашел. В глаза не бросилось.

Целая глава в документации: 15. HSB Bus Matrix (HMATRIXB)
Go to the top of the page
 
+Quote Post
sifadin
сообщение May 22 2014, 18:18
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Цитата(aaarrr @ May 23 2014, 02:14) *
Целая глава в документации: 15. HSB Bus Matrix (HMATRIXB)

А спасибо. Слона то я и не приметил
Go to the top of the page
 
+Quote Post
sifadin
сообщение May 29 2014, 06:59
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Подскажите плз где взять Errata на SAM4L
у Atmel не нашел, наверное плохо искал

Есть проблема совместной работы DMA и проц
На всякий случай опишу проблему

есть массив разбитый на 2 части по DMABLSIZE

Есть SPI slave по которому передаются в камень 32битные слова по 4 байта
в одном кадре передается 3 слова.
Каждое слово на 1 больше предыдущего
поток бесконечен

Передача осуществляется через DMA, программа в это время крутится в цикле
while(true){

while(!blocktowrite);

ProgPage();

blocktowrite = false;
}

по окончании заполнения одного блока DMA переключается на второй, адрес которого был заранее установлен в релоад регистре
срабатывает прерывание в котором
- устанавливается reload адрес первого блока. DMA при этом не выкл
- устанавливается reload размер. DMA продолжает работать
- устанавливает флаг blocktowrite
прерывание завершается

далее программа переходит в цикл, откуда вызывается ProgPage(), сбрасывающее содержимое первого блока во flash

итд все повторяется. Блоки, естественно меняются местами. Заполняется один считывание из другого.

При смене блоков или как-то еще происходит искажение одних из первых байт. Искажение в общем случайное, но строго регулярно

Может у кого-то было такое? Мало ли. Неделю t,ecm

Errata не нашел в поисковике, видно молодой проц

Рубрикатора такого тоже нет на сайте, gblfhfcs

Помогите, если кто что знает
Спасибо

Go to the top of the page
 
+Quote Post



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

 


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


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