Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-янв-18 08:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2014-дек-03 15:11 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
Вы можете попробовать использовать режим DMA "Пинг-понг", но в этом случае у вас получится прерывание от DMA по каждой передаче, как следствие, возникает вопрос зачем использовать DMA, если можно в прерывании от таймера делать все необходимые дела, но с другой стороны, получим более-менее детерминированное время копирования данных, если это очень принципиально.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2014-дек-03 15:19 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
а вот вопрос такой, а как происходит передача в UART или SSP там же буфферы фифо, в которые если записать много данных переполнятся и мы потеряем данный, значит там стоит какой-то инструмент контроля заполнения FIFO возможно ли такой же использовать в канале таймера или тут совсем разный принцип работы?в качестве инструмента, видимо, может отслеживаться ДМА заполнение фифо или может флаг заполнения?
да и потом, а если например 10, 100 или 1000 данных нужно отправить, получается еще придется перенастраивать и структуры для "пинг-понга"...

хочу уточнить чтобы снять запрос от от UART ДМА нужно отключить приёмник или передатчик в зависимости от источника возникновения и/или (тут прошу уточнить) снять разрешение запроса в UART DMACR соответствующее источнику запроса или выключить модуль УАПП или выключить ДМА или запретить в ДМА канал УАПП или записать 1 в NVIC->ICPR соответствующему прерыванию т.е. ДМА;
и ССП выключение приёмопередатчика и/или ? снять сигнал разрешения ДМА (это в ДМА модуле или в ССП?) или выключить ССП или выключить ДМА или запретить канал ДМА или записать 1 в NVIC->ICPR
вроде ничего не завыл... все так?
ну и конечно хотелось бы узнать какой из этих методов наиболее правильный по отношению к железу и наиболее быстрый...
а, запрос от таймера вроде бы сбрасывается сам...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2014-дек-04 12:23 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
rubygoblin писал(а):
а вот вопрос такой, а как происходит передача в UART или SSP там же буфферы фифо, в которые если записать много данных переполнятся и мы потеряем данный, значит там стоит какой-то инструмент контроля заполнения FIFO возможно ли такой же использовать в канале таймера или тут совсем разный принцип работы?в качестве инструмента, видимо, может отслеживаться ДМА заполнение фифо или может флаг заполнения?
да и потом, а если например 10, 100 или 1000 данных нужно отправить, получается еще придется перенастраивать и структуры для "пинг-понга"...

Почитайте спецификацию, разделы, посвященные UART и SSP. Вкратце, если рассматривать передатчики UART и SSP, то если есть место в FIFO, то формируется запрос DMA, если нет - не формируется.

rubygoblin писал(а):
хочу уточнить чтобы снять запрос от от UART ДМА нужно отключить приёмник или передатчик в зависимости от источника возникновения и/или (тут прошу уточнить) снять разрешение запроса в UART DMACR соответствующее источнику запроса или выключить модуль УАПП или выключить ДМА или запретить в ДМА канал УАПП или записать 1 в NVIC->ICPR соответствующему прерыванию т.е. ДМА;
и ССП выключение приёмопередатчика и/или ? снять сигнал разрешения ДМА (это в ДМА модуле или в ССП?) или выключить ССП или выключить ДМА или запретить канал ДМА или записать 1 в NVIC->ICPR
вроде ничего не завыл... все так?
ну и конечно хотелось бы узнать какой из этих методов наиболее правильный по отношению к железу и наиболее быстрый...
а, запрос от таймера вроде бы сбрасывается сам...

Я, например, для запрета запросов DMA от передатчика UART запрещал запросы DMA в DMACR. Возможны разные варианты решения, все зависит от вашей задачи. Нет единого метода, который "наиболее правильный по отношению к железу и наиболее быстрый"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2014-дек-04 14:21 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
спасибо за ответы в принципе все ясно с ДМА...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2014-дек-17 09:40 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
эхх... забыл спросить если ДМА не имеет доступ к некоторым адресам шины то хотелось бы уточнить к каким именно не имеет или к каким имеет(что короче будет написать)...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2014-дек-23 15:46 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
в спецификации на странице 31 есть рисунок 8 (Структурная схема организации памяти). Если внимательно посмотреть на рисунок, то можно заметить, что из DMA выходит шина, названная DMA Bus (M). Рассмотрев Bus Matrix, видно, что DMA (шина M) имеет доступ к блокам: Ethernet 10/100, SRAM(DATA), External System Bus (Program & Data), AHB2APB Bridge(Data).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2014-дек-24 08:16 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
непонятно...
у Вас в спецификации имеются 2 рисунка 8-9 и описание BUS_MATRIX в котором говорится что шина ДМА переключается с шиной АХБ-лайт можно ли сказать опираясь на это что у них доступность к адресной адресации одинаковая? и следуя тогда 8-9 рисункам сказать, что ДМА не имеет доступа к адресам:
0х20000000-0х200FFFFF
0x00000000-0x000FFFFF
0x10000000-0x1000FFFF
?

да и раз уж добрались до картинок, вопрос конечно не по теме ДМА скорее к теме о флеш у контроллера 128кБ памяти я так понял это диапазон:
0x00000000-0x000FFFFF
а остальное это при подключении внешних микросхем т.е. эта память не находится в кристалле, так?
а если внешней памяти нет, то обращение к адресам флеш лежащей вне этого диапазона приведет к ошибке или я всегда буду получать нули или то что набежало на портах ввода вывода,
я верно понимаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2015-мар-13 08:43 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
Здравствуйте уважаемые разработчики

вот такая ситуация ... допустим у нас в связке работают 2 МК у каждого работает по 2 SPI
и работают следующим образом дынные SPI 1 связаны по SPI1 данные SPI2 по SPI2
клок у всех SPI аппаратный, чип_селект тоже то есть у нас 1 мастер 3 слейва,
по некоторым причинам у нас перезагружается 1 из контроллеров на цикле работы ДМА,
то есть ДМА не выполнила полную задачу...
тогда получается пере загрузившийся МК пере инициализировался и начинает посылки с начала ,а 2 принимает с того места где остановился
я это правильно понимаю?...
тогда получается данные получат сдвиг и передаваемая информация никогда не сойдется особенно если имеется в наличии контрольная сумма

вопрос вот в чем возможна ли такая ситуация и какие возможные решения существуют для ее ликвидации?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2015-мар-13 09:06 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1043
Откуда: Тула
Круто. Грубейшая архитектурная ошибка. Смотрите как реализованы все приличные интерфейсы и протоколы, и если они по какой то причине не устраивают -- делайте по образу и подобию.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2015-мар-13 09:12 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
ну такая мысль возникла при работе с УАПП, я например в ДМА задаю 4 передачи 8 битных,
с компьютера по очереди ввожу 4 символа( они идут не подряд, а с паузой)
и ДМА их нормально обрабатывает, а перезагрузку 1 из контроллеров для работы SPI, примерно можно рассматривать, как такую же паузу между
посылками УАПП, так что если канал ДМА+SPI работает как и канал ДМА+УАПП, такая ситуация вполне возможна
да и меня вполне устраивает SPI и ДМА, я наконец-то немного в них разобрался, вот только на испытание всех возможных вариантов может уйти слишком много времени,
поэтому интересен наикратчайший способ сброса ДМА счетчиков в контроллере ДМА, если конечно ситуация имеет место на существование...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2015-мар-13 09:59 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1043
Откуда: Тула
Может для Вас это очевидно и поэтому Вы об этом не пишите, но я имел в виду, что всегда полезно формировать некий пакетный/кадровый протокол. Программно или аппаратно - в принципе не суть важно: можно преамбулу начала пакета искать, можно ногами дергать. Главное чтобы можно было определить начало пакета и позиционироваться по нему. Так проблему понял я.
Что на счет пауз и дма - можно попытаться периодически проверять что с ним происходит. Однако принятые им данные стоит рассматривать только как битстрим, где всё возможно.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2015-мар-13 10:16 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
про протокол скорее все не очевидно ))
я данные в определенном порядке посылаю в конце контрольная сумма... это наверное сложно назвать протоколом...
а Вы я так понял предлагаете внести специальное слово при проверки, которого точно можно сказать что это начало посылки,
ну если оно находится в начале посылки (данных оперативной памяти) то никаких проблем с поиском получиться не должно ,
а вот допустим посылка большая ( максимальная для ДМА данного МК) и съехало на половину или еще даже на несколько бит
1 --- информация в конце посылки будет искажаться из-за дополнения посылки ложными единицами (у меня miso\mosi подтянуты к 1)
2 --- поиск этого слова займет достаточное время если перебирать каждый бит посылки,
скорее как я думаю нужно ввести счетчик который при превышении определенного времени будет работать как схема сброса счетчиков
ДМА и это мне кажется вполне быстрый способ получается, вот только я не нашел как заставить ДМА сбросить внутренние счетчики;
у нас есть счетчик в оперативке, который хранит количество передач ДМА с каждым арбитражем он вроде как обновляет значение,
возможный способ получается выставить маску канала и сбросить разрешение, а потом пере инициализировать структуру ДМА в оперативке,
вот только не понятно будет это работать или нет... или может нужно дополнительно сбросить тактирование модуля выключить его,
а потом снова целиком инициализировать

и кажется ситуация вполне возможная я например делал как:
2 МК работают
на выходах висит осциллограф (miso\mosi)
к ресету МК подсоединен провод (пробовал на обоих МК, ресет подтянут к 1)
проводом коммутировал 0
и в некоторых случаях посылка искажалась 1 раз после чего ввод с ПК не приводил ни к каким изменениям
при синхронном сбросе обоих МК все возвращалось в норму

в общем от разработчиков ответа не дождешься...
сделал я как описал выше:
сбросил разрешение канала ДМА
сбросил запросы ДМА от SPI
очистил буффер приема SPI
потом инициализировал каналы ДМА
потом запросы SPI
контроллер как и раньше сбивается, но потом возвращается к нормальной работе,
отлов события я произвожу по счетчику
не совсем наверное по теме, контроллеры я использовал 1986ВЕ9х 3 ревизии в пластиковом корпусе, 1986ВЕ1Т 3 ревизии в металлокерамическом корпусе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2015-мар-13 11:27 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1043
Откуда: Тула
Итак, если вернуться к вашему вопросу, то вас интересует отлов ошибок при передачи информации. ДМА тут выступает просто как помощник ЦП, разгружая его обработкой прерываний SPI. Если болк SPI сам детектит ошибку - её необходимо обрабатывать ЦП. Если не детектит - её в любом случае надо обрабатывать программно. Контрольная сумма же у Вас есть. Это уже протокол, хоть и очень примитивный. Преамбула поможет вам искать именно начало передачи, увеличивая оверхед.
Короче ДМА к обработке ошибок приспосабливать не стоит. При больших проблемах связи можно пытаться переинициализировать его.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2015-мар-13 11:44 
Не в сети

Зарегистрирован: 2014-ноя-17 08:47
Сообщения: 103
prostoRoman а Вы случайно не из разработчиков, а то я их ругаю , а может мне разработчик уже отвечает... ))
ну основная задача обеспечить точную стабильную связь с высокой живучестью и возможностью самовосстановления...
со всем сказанным я не спорю, вся проблема в том что ДМА простая штука, которой говоришь сколько нужно переслать, и она пересылает она получается не видит интервалов и пауз в сообщении ... она на самом деле хорошо справляется со своей задачей... но интервалы и паузы получается видит контрольная сумма и расположение байт в сообщении,
а преамбула может не сойтись в нескольких случаях и в каждом случае получается нужно применять одни и те же меры... мне кажется это не совсем правильно, но наверное стоит попробовать, я так понимаю преамбула что-то типа синхроимпульса в манчестере или стартового бита в УАППе?...
ситуации несхождения преамбулы :
1) выключение МК на работе ДМА
2) ну наверное невероятное оч. сильные помехи
3) разрыв связи
вроде больше в голову ничего не приходит


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по DMA
СообщениеДобавлено: 2015-мар-13 13:14 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1043
Откуда: Тула
rubygoblin, нет, я просто форумчанин. Смело критикуйте дальше.
заявленными характеристиками будет обладать только "умный" канал связи. Тут хорош CAN, например, как низкий уровень. Так же и остальные специфичные для таких применений протоколы как Ethernet или 1553 (оба манчестер). Там преамбула есть уже на уровне железа.
На уровне выше можно применить "магическое число", константу которую искать в потоке данных.
Этим и будет заниматься ЦП, а дма просто снизит накладные расходы на пересылку байтиков из периферии в память, для чего и предназначен.
Все пакеты с не сходящейся КС просто отбрасывать или перезапрашивать по возможности.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB