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

 
 
> Как правильно синхронизировать SGDMA?
smersh
сообщение Mar 8 2016, 14:33
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 33
Регистрация: 19-06-04
Пользователь №: 64



Здравствуйте, коллеги!
Вот такая связка:

АЦП-----ОБРАБОТКА-----FIFO-----SGDMA----NIOSII

Вопрос не по реализации, с ней все нормально, а по алгоритму. Дело в том, что здесь АЦП производит 256 измерений последовательно от 256 разных каналов и т.д. по кругу. Важен порядковый номер каждого байта, принятого в буфер ДМА.

Если по каким-то причинам пропускаетcя байт от АЦП, буфер теряет синхронность, нулевой байт уже не соответствует нулевому каналу и возникает “кольцевой” сдвиг. Причем этот сдвиг остается и при следующем трансфере.

Как с этим бороться? Нужно придумать механизм самосинхронизации.

Дополнительно нумеровать байты очень не хочется (например, можно добавить один бит и выставлять его только для нулевого канала). Сбрасывать фифо не получается, т.к. оно заполняется непрерывно; в прерывании, возникающем по окончании ДМА трансфера этого делать нельзя, потому что фифа уже начала заполняться новыми данными.

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

Спасибо!
NJ
Go to the top of the page
 
+Quote Post



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

 


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


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