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

 
 
> Подвисает SGDMA, Идеи?
alexPec
сообщение Jul 5 2011, 19:04
Сообщение #1


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Добрый день всем. Ситуация такая. Периодически приходят данные, которые отсылаю по dma на выход (мемори то стрим). Данные приходят регулярно, раз в 100 мс. Пока данные копятся в одном буфере, из второго в это время dma качает наружу. Когда проверяю с брейкпоинтами на процедурах старта dma - все стабильно работает. Т.е. нажимаю РАН - останавливается на брейкпоинте старта первого буфера, снова нажимаю РАН - останавливается на брейкпоинте второго буфера и т.д., в таком режиме все ок. Если убираешь брейк хотя бы с одного буфера, т.е. дма запускается два раза без брейка, - все, конец. Больше от ДМА данных не дождешься пока софт не перезапустишь. Признаки такие:

-дескрипторы не портятся, в обоих случаях одинаковые.

Регистры на брейкпоинте:

Статус регистр дма - 0x0000000C ( когда в норме, означает Chain complete + Descriptor complete)
0x00000014 ( когда НЕ в норме, означает Busy + Descriptor complete)
Control регистр дма - 0x00020060 ( когда в норме, означает PARK+RUN+DMAERR) ??? Почему run и dmaerr, ведь транзакция закончена, а dmaerr вообще написано только для stream to memory, а у меня наоборот.
0x00020000 ( когда НЕ в норме, означает PARK)

Порылся в штатных алтеровских процедурах запуска тразакции - поскольку бит busy в 1 - они и не запускают дма. А чем он занят, не понятно. Сигнал дма Ready находится в 1, данные на выход не идут.

UPD: попробовал сделать простую программку, которая по очереди запускает дма сначала первого, потом второго буфера. По шагам все ок, как только запускаешь подряд сначала первый буфер, потом сразу второй - говорит busy и больше не стартует. Как то сбросить бы его...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vadimuzzz
сообщение Jul 6 2011, 02:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



проект выложить есть возможность? обрезанный по самое не могу, чтобы только баг воспроизводился
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jul 6 2011, 05:19
Сообщение #3


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ Jul 6 2011, 06:27) *
проект выложить есть возможность? обрезанный по самое не могу, чтобы только баг воспроизводился

Нет, проект не могу выложить. Весь весит 800 Мб, урезать - вспотеешь. Да и не факт что баг после урезки проявится.
Вобщем выяснил вот что: если вызываешь функцию alt_avalon_sgdma_do_async_trasfer() до того как заканчивает работу текущий трансфер (dma не закончил передавать, а я начинаю новый трансфер), то все, виснет. Биты бы какие-нибудь у него сбросить, но вроде судя по регистрам нечего...
Ждать бита окончания тоже нельзя, в это время обработка идет. ДМА без прерываний.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:08
Рейтинг@Mail.ru


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