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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> stm32f4 mem->dma->gpio.odr tim6, не понимаю природу косяка
klen
сообщение Jan 25 2018, 11:37
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 399
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Здравствуйте.
идея простая и проверенная.
тикаем таймером, он генерит запрос DMA по которому DMA перекладывает из циклического буфера данные в GPIO->ODR.
если взять TIM8 DMA2_stream1_chanal7 то все бодро работает и можно сделать например программный шим и много прочего полезного без вмешательств проца.
TIM8 жалко для тупого переполнения и генерации запроса DMA.
попробsвал на "дешевом" TIM6 и DMA1_stream1_chanal7 - DMA отваливается с выставлением флага transfer_error. то есть схема та же .. но не работает.
в документации четко написано что модуль DMA1 - не умеет работать если оба порта прикручивать к диапазону адресов памяти. оди обязательно в диапазоне переферии должен быть.
может gpio->odr "не совсем" переферия?

где я даташит недочитал?
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 25 2018, 11:46
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 975
Регистрация: 7-02-07
Пользователь №: 25 136



GPIO сидит на шине AHB1, туда DMA1 не может дотянуться.
Можно схитрить. Например, у таймеров бывают режимы, которые позволяют управлять ногой CHx через регистр таймера.
Go to the top of the page
 
+Quote Post
klen
сообщение Jan 25 2018, 13:49
Сообщение #3


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 399
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



>GPIO сидит на шине AHB1, туда DMA1 не может дотянуться.
Точно!!! я эти грабли уже получал, и забыл.

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

спасибо.
Go to the top of the page
 
+Quote Post
stas00n
сообщение Jan 25 2018, 16:17
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-11-10
Пользователь №: 61 198



Не спец по F4, даташит не читал, но в порядке выдвижения гипотезы: в Вашем кристалле TIM6 точно присутствует? Например, по опыту с F0 - TIM6, TIM7 - "редкие" таймеры, присутствуют только в "жирных" камнях, а в базовых и малоногих приходится довольствоваться TIM1,3,14,16,17. Может быть обращаетесь к не реализованному на данном кристалле таймеру?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 25 2018, 16:34
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 983
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(klen @ Jan 25 2018, 15:49) *
это да, но мне сразу 16 синхронных шимов надо сделать.

А то что Ваш ШИМ будет иметь приличный джиттер - не смущает?
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jan 25 2018, 18:27
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 013
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(jcxz @ Jan 25 2018, 20:34) *
А то что Ваш ШИМ будет иметь приличный джиттер - не смущает?

То же люблю делать ШИМ черезтДМА.
Объясните по-русски что такое "джиттер"? Может колебания частоты?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 25 2018, 19:02
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 983
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(MiklPolikov @ Jan 25 2018, 20:27) *
То же люблю делать ШИМ черезтДМА.
Объясните по-русски что такое "джиттер"? Может колебания частоты?

У Вас DMA что делает? Пишет в регистры управления GPIO пинами? Чтобы импульсы ШИМ определённой длительности сгенерить?
А теперь подумайте, что будет если таймер выставил запрос обслуживания к DMA, а в этот момент CPU выполняет команду PUSH {R0-R12,LR} ?
Как изменится длительность импульса ШИМ?
А если работают ещё и другие bus-masters и они тоже к шине обращаются?
Вот тогда и получите джиттер - длительность импульсов ШИМа будет болтаться.
Go to the top of the page
 
+Quote Post
klen
сообщение Jan 25 2018, 20:56
Сообщение #8


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 399
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(jcxz @ Jan 25 2018, 22:02) *
У Вас DMA что делает? Пишет в регистры управления GPIO пинами? Чтобы импульсы ШИМ определённой длительности сгенерить?
А теперь подумайте, что будет если таймер выставил запрос обслуживания к DMA, а в этот момент CPU выполняет команду PUSH {R0-R12,LR} ?
Как изменится длительность импульса ШИМ?
А если работают ещё и другие bus-masters и они тоже к шине обращаются?
Вот тогда и получите джиттер - длительность импульсов ШИМа будет болтаться.


приоритет на шине у DMA-стрима выставляем very-high. у CPU мастера ahb он аппаратно равен на один уровень ниже - high, так специально придумали чтобы DMA можно былобы пускать вперед (но есть ограничение - не перманентно, если перегрузить шину запросами мастера c приоритетом very-high то как я помню на 4 транзакции все равно процу дадут доступ на одну транзакцию.) поэтому PUSH {R0-R12,LR} страшен не сильно при наличии не перегруза ahb шины.

болтатся может - но в моем случае это не очень важно. точность такого шима приемлемая - главное требование - много штук одновременно.
закодю померю джиттер раскажу что получилось.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 25 2018, 21:39
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 983
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(klen @ Jan 25 2018, 22:56) *
приоритет на шине у DMA-стрима выставляем very-high. у CPU мастера ahb он аппаратно равен на один уровень ниже - high, так специально придумали чтобы DMA можно былобы пускать вперед (но есть ограничение - не перманентно, если перегрузить шину запросами мастера c приоритетом very-high то как я помню на 4 транзакции все равно процу дадут доступ на одну транзакцию.) поэтому PUSH {R0-R12,LR} страшен не сильно при наличии не перегруза ahb шины.

А где в мануале STM32F4 можно найти табличку с уровнями приоритета разных bus-masters? Что-то я не нахожу такую, подскажите.
Да и интересно: CPU команду PUSH {R0-R12,LR} выполнит отдельными транзакциями через арбитра или одной burst-транзакцией? Если 2-е - тогда будет хуже.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jan 25 2018, 22:26
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 013
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Ага, по русски "джиттер" это "колебания периода".
Один раз видел, когда запустил DMA в режиме m2m , и он тупо занял всю системную шину.
Если по таймеру - то всё чётко.
Т.е. на практике проблемы нет.
И ШИМ через ДМА очень полезен, я таким образом динамическое управление цифровыми индикаторами делаю и много всего другого.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 27 2018, 13:05
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 983
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(MiklPolikov @ Jan 26 2018, 00:26) *
Ага, по русски "джиттер" это "колебания периода".

Это не "колебания периода", а дрожание чего угодно. Кроме периода у цифрового сигнала есть и другие параметры, скважность например.
Go to the top of the page
 
+Quote Post
klen
сообщение Jan 29 2018, 22:25
Сообщение #12


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 399
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



ну вобщем получилось.
240кГц, 50 отсчетов скважности, это примерно 5.6 битный цап. 16 каналов.
работает довольно дубово, то есть хорошо.
у меня предназначено для управления 16 ключами в зарядной станции. что бы все ключи не втыкались одновременно, фазы включения разнесены со сдвигом на 1/16 периода. частоту несущей меняю по псевтослучайному закону в близи 240кгц перегружая регистр аrr , это размазывает спектр помех и убирает пики гармоник.
проц учавствует в этом только когда нужно изменить скажности каналов.
и никаких прерываний.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 29 2018, 23:24
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 983
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(klen @ Jan 30 2018, 00:25) *
240кГц, 50 отсчетов скважности, это примерно 5.6 битный цап. 16 каналов.
работает довольно дубово, то есть хорошо.
у меня предназначено для управления 16 ключами в зарядной станции. что бы все ключи не втыкались одновременно, фазы включения разнесены со сдвигом на 1/16 периода. частоту несущей меняю по псевтослучайному закону в близи 240кгц перегружая регистр аrr , это размазывает спектр помех и убирает пики гармоник.
проц учавствует в этом только когда нужно изменить скажности каналов.
и никаких прерываний.

Жесть какая! Такой паровоз на квадратных колёсах. laughing.gif
Никаких прерываний, зато непрерывный DMA-поток и к тому же - накладывающий ограничения на другие процессы. У вас в устройстве больше ничего кроме этого паровоза нет?
А какой практический смысл было городить такое, а не взять просто более подходящий МК с достаточным количеством аппаратных ШИМ-ов?
И сделать всё с характеристиками на порядок лучше, а не на уровне ардуины.
Go to the top of the page
 
+Quote Post
klen
сообщение Jan 30 2018, 05:38
Сообщение #14


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 399
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(jcxz @ Jan 30 2018, 02:24) *
А какой практический смысл было городить такое, а не взять просто более подходящий МК с достаточным количеством аппаратных ШИМ-ов?
И сделать всё с характеристиками на порядок лучше, а не на уровне ардуины.

лучше что?
какой мк имеет 32 аппаратных канала шим?
в моем случае это самы подходящий вариант, дешево и быстро.
никаких ограничений на другие процессы не присутствуют, предположительно переферийная шина нагружена каждую 13 транзакцию, ahb каждую 52 (с 16 каналами)
это же не цап прецизионный, это балансир-зарядник, чем прще тем надежней. таймеры и процессор - это я экономлю для великих задач.
к стати, во время войны паровоз спасет промышленность.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 30 2018, 10:31
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 4 983
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(klen @ Jan 30 2018, 07:38) *
какой мк имеет 32 аппаратных канала шим?

А у Вас разве 32? 16 вроде wink.gif
Например Infineon XMC4500 или XMC4700 имеют по 8 продвинутых таймеров, в каждом таймере к регистру-счётчику привязаны по 2 compare-регистра, каждый compare - с двумя выводами на пины МК.
Т.е. - уже можно 16 двухтактных ШИМов сделать (а не однотактных как у Вас).
А ещё в каждом МК есть 16 простых таймеров, содержащих каждый по одному compare-регистру с одним выходом - это ещё 16 однотактных ШИМов.
И каждый работает на <= 120/144 МГц (а не 240кГц), имеет разрядность 16 бит (а не 5.5), имеют встроенное аппаратное дрожание (для размазывания спектра), имеют center-aligned режим ШИМа (а не только edge), продвинутые таймеры имеют кроме того аппаратный dead-time и много других фич.
И это всё - без всяких DMA и с полностью свободной шиной.

Поэтому мне и кажется Ваш выбор МК, для такой задачи, странным.

Цитата(klen @ Jan 30 2018, 07:38) *
никаких ограничений на другие процессы не присутствуют, предположительно переферийная шина нагружена каждую 13 транзакцию, ahb каждую 52 (с 16 каналами)

Это всё в теории. В таких системах где необходима жёсткая привязка работы к реалтайму, как показывает практика, добавлять что-то очень сложно - вдруг начинает рушиться работа этого реалтайма и начинает иногда сбоить. Несмотря на теоретические выкладки laughing.gif

PS: Вы мне так и не ответили на мой вопрос, где Вы смотрите таблицу приоритетов доступа к шине разных bus-мастеров для STM32F4? Я что-то не нашёл.... sad.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th August 2018 - 03:39
Рейтинг@Mail.ru


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