GPIO+DMA stm32f429

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
allplayer
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс апр 24, 2011 20:12:21

GPIO+DMA stm32f429

Сообщение allplayer »

Всем привет! Столкнулся с задачей скоростного считывания ног порта. Завёл всё через DMA, копируют по одному младшему байта в массив с инкрементом. Проц работает на заявленной максимуме (180 МГц).
Но, вот беда, получилось только раскачать на 50 МГц, хотя в даташите пишут, что можно до 90 считывать.
Подскажите, можно ли настройками поднять скорость считывания я повыше?
Или же придётся камень менять?
Добавлю, что раскачал в режиме оверклока до 240 МГц, скорость считывания поднялась примерно до 66.
Заранее спасибо!
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

С GPIO меньше 4 тактов не получишь, быстрее только через DCMI, побайтно можно за 2 такта забирать, больше - за 3.
Реклама
Аватара пользователя
allplayer
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс апр 24, 2011 20:12:21

Re: GPIO+DMA stm32f429

Сообщение allplayer »

Но 2 такта - это 45 МГц, а я несколько раз проверял - ровно 50 получается. Может, это ограничение GPIO?
UPD: 4 такта
Последний раз редактировалось allplayer Пт янв 26, 2018 22:47:42, всего редактировалось 1 раз.
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

Хм, на всякий случай проверил на F429 и неожиданно получил 3 такта, хотя для F407 тот же код дает 4. Это странно, ведь у них даже RM один...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
allplayer
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс апр 24, 2011 20:12:21

Re: GPIO+DMA stm32f429

Сообщение allplayer »

[uquote="Reflector",url="/forum/viewtopic.php?p=3293718#p3293718"]Хм, на всякий случай проверил на F429 и неожиданно получил 3 такта, хотя для F407 тот же код дает 4. Это странно, ведь у них даже RM один...[/uquote]
3 такта на DMA+GPIO?
Или же с DCMI?
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

[uquote="allplayer",url="/forum/viewtopic.php?p=3293783#p3293783"]3 такта на DMA+GPIO?
Или же с DCMI?[/uquote]
DMA+GPIO.

ps. Это если после запуска DMA мк усыплять командой __WFI(), иначе будет 4 такта, а на F407 было 4 и с WFI.
Реклама
Аватара пользователя
allplayer
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс апр 24, 2011 20:12:21

Re: GPIO+DMA stm32f429

Сообщение allplayer »

На сайте производителя написано:
Up to 164 fast I/Os up to 90 MHz
До 164 быстрых ИОшек со скоростью до 90 МГц.
Что производитель имеет ввиду? В каком режиме получить 90 МГц?
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

[uquote="allplayer",url="/forum/viewtopic.php?p=3293875#p3293875"]До 164 быстрых ИОшек со скоростью до 90 МГц.
Что производитель имеет ввиду? В каком режиме получить 90 МГц?[/uquote]
Можешь на ассме написать, выводишь константы сохраненные в регистрах в порт, тогда по идее должно быть 2 такта, а если из массива выводить, то уже 4.
Аватара пользователя
allplayer
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс апр 24, 2011 20:12:21

Re: GPIO+DMA stm32f429

Сообщение allplayer »

Мне бы хотелось получить чтение порта (8 бит) со скоростью 90 мегасемплов (2 такта), вывести в оверклок и поднять считывание до 100 мегасемплов. Но это получится провернуть только для записи в одну переменную. Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?

А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

[uquote="allplayer",url="/forum/viewtopic.php?p=3293930#p3293930"]Мне бы хотелось получить чтение порта (8 бит) со скоростью 90 мегасемплов (2 такта), вывести в оверклок и поднять считывание до 100 мегасемплов. Но это получится провернуть только для записи в одну переменную. Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?[/uquote]
Инкремент адреса - это мелочи, главное каждое значение прочитанное в регистр придется сохранять еще и в памяти.
А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Нет. И зачем вообще такое делать, если порты 16-ти битные и можно обойтись одним? Читай за 3 такта 16 бит, даже в таком случае можно получить 100 MSPS если разогнать мк до 300 MHz, а у меня он на них работает. По крайней мере 90 MSPS ты таким образом получишь точно. Если достаточно 8 бит, то бери DCMI...
Аватара пользователя
allplayer
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс апр 24, 2011 20:12:21

Re: GPIO+DMA stm32f429

Сообщение allplayer »

[uquote="Reflector",url="/forum/viewtopic.php?p=3293940#p3293940"][uquote="allplayer",url="/forum/viewtopic.php?p=3293930#p3293930"]Мне бы хотелось получить чтение порта (8 бит) со скоростью 90 мегасемплов (2 такта), вывести в оверклок и поднять считывание до 100 мегасемплов. Но это получится провернуть только для записи в одну переменную. Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?[/uquote]
Инкремент адреса - это мелочи, главное каждое значение прочитанное в регистр придется сохранять еще и в памяти.
А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Нет. И зачем вообще такое делать, если порты 16-ти битные и можно обойтись одним? Читай за 3 такта 16 бит, даже в таком случае можно получить 100 MSPS если разогнать мк до 300 MHz, а у меня он на них работает. По крайней мере 90 MSPS ты таким образом получишь точно. Если достаточно 8 бит, то бери DCMI...[/uquote]

Я уже читаю инфу по DCMI. Подтолкните, пожалуйста, с чего лучше начать?
Я так понимаю, что в режиме DCMI мне придется подцепить и внешнее тактирование?
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

[uquote="allplayer",url="/forum/viewtopic.php?p=3293948#p3293948"]Я уже читаю инфу по DCMI. Подтолкните, пожалуйста, с чего лучше начать?
Я так понимаю, что в режиме DCMI мне придется подцепить и внешнее тактирование?[/uquote]
DCMI очень простой, там всего один CR для настройки и, насколько я помню, для 8 бит в нем достаточно только бит разрешения захвата включить. 90 MHz придется самому генерить, потом еще для старта нужно короткий импульс на вход VSYNC подать. И усыплять мк тоже придется, на таких скоростях любая активность добавляет тормоза.
jcxz
Мудрый кот
Сообщения: 1727
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: GPIO+DMA stm32f429

Сообщение jcxz »

[uquote="allplayer",url="/forum/viewtopic.php?p=3293930#p3293930"]Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?[/uquote]
Программно не получится: нужна как минимум одна инструкция чтения памяти (GPIO) - это два такта, и одна - записи в ОЗУ - ещё 2 такта. Даже с многословными инструкциями - никак.

[uquote="allplayer",url="/forum/viewtopic.php?p=3293930#p3293930"]А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?[/uquote]
Можно попробовать. Только зачем разные порты если оба DMA-канала можно натравить на один GPIO?
Генерить сигналы событий к DMA от таймеров со сдвигом 2 такта.
Хотя всё это ненадёжно очень.
Лучше взять LPC43xx - у него есть порт SGPIO, он штатно работает на частоте до 204МГц. Без всяких оверклоков.
И при этом у SGPIO имеется FIFO. И до 16 входных линий.
Аватара пользователя
allplayer
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс апр 24, 2011 20:12:21

Re: GPIO+DMA stm32f429

Сообщение allplayer »

Я перечитал на форуме много сообщений на тему самодельных осциллографов на базе stm32f4, где используют 100 МГц-й АЦП, успешно с него считывают, при этом успевая еще и на экран графики вывести. Но, вот беда, не смог я увидеть, каким образом идет считывание. И генерации на 100 МГц я нигде не увидел :dont_know:

Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки.
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет :)))
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

[uquote="allplayer",url="/forum/viewtopic.php?p=3294772#p3294772"]Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки.
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет :)))[/uquote]
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?
Аватара пользователя
Fusion
Грызет канифоль
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва
Контактная информация:

Re: GPIO+DMA stm32f429

Сообщение Fusion »

STM32F446 разогнан до 240 мГц.
DCMI через DMA работает до 120мГц стабильно.
Клок для АЦП Port A8 OUT MCO.
На 60 мГц и ниже тактирование по таймеру.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

[uquote="Fusion",url="/forum/viewtopic.php?p=3294836#p3294836"]Клок для АЦП Port A8 OUT MCO.
На 60 мГц и ниже тактирование по таймеру.[/uquote]
А для чего MCO, если таймер и так может F/2 выдавать?
Аватара пользователя
Fusion
Грызет канифоль
Сообщения: 272
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Откуда: Москва
Контактная информация:

Re: GPIO+DMA stm32f429

Сообщение Fusion »

Reflector:
На таймере сразу не получилось. Макс. 60 мГц при Prescaler = 0 и Period = 1 (TIM1)
Не стал дальше копать и подключил MCO.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: GPIO+DMA stm32f429

Сообщение Reflector »

[uquote="Fusion",url="/forum/viewtopic.php?p=3294854#p3294854"]На таймере сразу не получилось. Макс. 60 мГц при Prescaler = 0 и Period = 1 (TIM1)
Не стал дальше копать и подключил MCO.[/uquote]
У меня генераторы сконфигурированы как ШИМы, но, естественно, так можно генерить и меандр. Для F/2 нужны ARR и CCR равные 1/1, для F/4 - 3/2 и т.д.... А если таймер настроить в режиме инверсии, тогда минимальная частота уже действительно будет F/4. Естественно нужно выбирать быстрые таймеры сидящие на APB2 или для APB1 ставить делитель 2, хотя практика показывает можно спокойно везде ставить 1 :)
Аватара пользователя
allplayer
Открыл глаза
Сообщения: 72
Зарегистрирован: Вс апр 24, 2011 20:12:21

Re: GPIO+DMA stm32f429

Сообщение allplayer »

[uquote="Reflector",url="/forum/viewtopic.php?p=3294815#p3294815"][uquote="allplayer",url="/forum/viewtopic.php?p=3294772#p3294772"]Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки.
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет :)))[/uquote]
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?[/uquote]

Разве могут быть помехи, если у меня внешний АЦП продавливает ноги порта?

Добавлено after 17 minutes 16 seconds:
[uquote="Reflector",url="/forum/viewtopic.php?p=3294815#p3294815"][uquote="allplayer",url="/forum/viewtopic.php?p=3294772#p3294772"]Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки.
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет :)))[/uquote]
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?[/uquote]

Мне надо начать оцифровку и подать 2 независимых импульса (дернуть друг за другом 2 ноги) длительностью 100нс. А потом можно и поспать :hunger:
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Ответить

Вернуться в «ARM»