GPIO+DMA stm32f429
GPIO+DMA stm32f429
Всем привет! Столкнулся с задачей скоростного считывания ног порта. Завёл всё через DMA, копируют по одному младшему байта в массив с инкрементом. Проц работает на заявленной максимуме (180 МГц).
Но, вот беда, получилось только раскачать на 50 МГц, хотя в даташите пишут, что можно до 90 считывать.
Подскажите, можно ли настройками поднять скорость считывания я повыше?
Или же придётся камень менять?
Добавлю, что раскачал в режиме оверклока до 240 МГц, скорость считывания поднялась примерно до 66.
Заранее спасибо!
Но, вот беда, получилось только раскачать на 50 МГц, хотя в даташите пишут, что можно до 90 считывать.
Подскажите, можно ли настройками поднять скорость считывания я повыше?
Или же придётся камень менять?
Добавлю, что раскачал в режиме оверклока до 240 МГц, скорость считывания поднялась примерно до 66.
Заранее спасибо!
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
- Реклама
Re: GPIO+DMA stm32f429
С GPIO меньше 4 тактов не получишь, быстрее только через DCMI, побайтно можно за 2 такта забирать, больше - за 3.
Re: GPIO+DMA stm32f429
Но 2 такта - это 45 МГц, а я несколько раз проверял - ровно 50 получается. Может, это ограничение GPIO?
UPD: 4 такта
UPD: 4 такта
Последний раз редактировалось allplayer Пт янв 26, 2018 22:47:42, всего редактировалось 1 раз.
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Re: GPIO+DMA stm32f429
Хм, на всякий случай проверил на F429 и неожиданно получил 3 такта, хотя для F407 тот же код дает 4. Это странно, ведь у них даже RM один...
Re: GPIO+DMA stm32f429
[uquote="Reflector",url="/forum/viewtopic.php?p=3293718#p3293718"]Хм, на всякий случай проверил на F429 и неожиданно получил 3 такта, хотя для F407 тот же код дает 4. Это странно, ведь у них даже RM один...[/uquote]
3 такта на DMA+GPIO?
Или же с DCMI?
3 такта на DMA+GPIO?
Или же с DCMI?
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
- Реклама
Re: GPIO+DMA stm32f429
[uquote="allplayer",url="/forum/viewtopic.php?p=3293783#p3293783"]3 такта на DMA+GPIO?
Или же с DCMI?[/uquote]
DMA+GPIO.
ps. Это если после запуска DMA мк усыплять командой __WFI(), иначе будет 4 такта, а на F407 было 4 и с WFI.
Или же с DCMI?[/uquote]
DMA+GPIO.
ps. Это если после запуска DMA мк усыплять командой __WFI(), иначе будет 4 такта, а на F407 было 4 и с WFI.
Re: GPIO+DMA stm32f429
На сайте производителя написано:
Что производитель имеет ввиду? В каком режиме получить 90 МГц?
До 164 быстрых ИОшек со скоростью до 90 МГц.Up to 164 fast I/Os up to 90 MHz
Что производитель имеет ввиду? В каком режиме получить 90 МГц?
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Re: GPIO+DMA stm32f429
[uquote="allplayer",url="/forum/viewtopic.php?p=3293875#p3293875"]До 164 быстрых ИОшек со скоростью до 90 МГц.
Что производитель имеет ввиду? В каком режиме получить 90 МГц?[/uquote]
Можешь на ассме написать, выводишь константы сохраненные в регистрах в порт, тогда по идее должно быть 2 такта, а если из массива выводить, то уже 4.
Что производитель имеет ввиду? В каком режиме получить 90 МГц?[/uquote]
Можешь на ассме написать, выводишь константы сохраненные в регистрах в порт, тогда по идее должно быть 2 такта, а если из массива выводить, то уже 4.
Re: GPIO+DMA stm32f429
Мне бы хотелось получить чтение порта (8 бит) со скоростью 90 мегасемплов (2 такта), вывести в оверклок и поднять считывание до 100 мегасемплов. Но это получится провернуть только для записи в одну переменную. Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?
А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Re: GPIO+DMA stm32f429
[uquote="allplayer",url="/forum/viewtopic.php?p=3293930#p3293930"]Мне бы хотелось получить чтение порта (8 бит) со скоростью 90 мегасемплов (2 такта), вывести в оверклок и поднять считывание до 100 мегасемплов. Но это получится провернуть только для записи в одну переменную. Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?[/uquote]
Инкремент адреса - это мелочи, главное каждое значение прочитанное в регистр придется сохранять еще и в памяти.
Инкремент адреса - это мелочи, главное каждое значение прочитанное в регистр придется сохранять еще и в памяти.
Нет. И зачем вообще такое делать, если порты 16-ти битные и можно обойтись одним? Читай за 3 такта 16 бит, даже в таком случае можно получить 100 MSPS если разогнать мк до 300 MHz, а у меня он на них работает. По крайней мере 90 MSPS ты таким образом получишь точно. Если достаточно 8 бит, то бери DCMI...А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Re: GPIO+DMA stm32f429
[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]
Инкремент адреса - это мелочи, главное каждое значение прочитанное в регистр придется сохранять еще и в памяти.
Я уже читаю инфу по DCMI. Подтолкните, пожалуйста, с чего лучше начать?
Я так понимаю, что в режиме DCMI мне придется подцепить и внешнее тактирование?
Инкремент адреса - это мелочи, главное каждое значение прочитанное в регистр придется сохранять еще и в памяти.
Нет. И зачем вообще такое делать, если порты 16-ти битные и можно обойтись одним? Читай за 3 такта 16 бит, даже в таком случае можно получить 100 MSPS если разогнать мк до 300 MHz, а у меня он на них работает. По крайней мере 90 MSPS ты таким образом получишь точно. Если достаточно 8 бит, то бери DCMI...[/uquote]А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Я уже читаю инфу по DCMI. Подтолкните, пожалуйста, с чего лучше начать?
Я так понимаю, что в режиме DCMI мне придется подцепить и внешнее тактирование?
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Re: GPIO+DMA stm32f429
[uquote="allplayer",url="/forum/viewtopic.php?p=3293948#p3293948"]Я уже читаю инфу по DCMI. Подтолкните, пожалуйста, с чего лучше начать?
Я так понимаю, что в режиме DCMI мне придется подцепить и внешнее тактирование?[/uquote]
DCMI очень простой, там всего один CR для настройки и, насколько я помню, для 8 бит в нем достаточно только бит разрешения захвата включить. 90 MHz придется самому генерить, потом еще для старта нужно короткий импульс на вход VSYNC подать. И усыплять мк тоже придется, на таких скоростях любая активность добавляет тормоза.
Я так понимаю, что в режиме DCMI мне придется подцепить и внешнее тактирование?[/uquote]
DCMI очень простой, там всего один CR для настройки и, насколько я помню, для 8 бит в нем достаточно только бит разрешения захвата включить. 90 MHz придется самому генерить, потом еще для старта нужно короткий импульс на вход VSYNC подать. И усыплять мк тоже придется, на таких скоростях любая активность добавляет тормоза.
Re: GPIO+DMA stm32f429
[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 входных линий.
Программно не получится: нужна как минимум одна инструкция чтения памяти (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 входных линий.
Re: GPIO+DMA stm32f429
Я перечитал на форуме много сообщений на тему самодельных осциллографов на базе stm32f4, где используют 100 МГц-й АЦП, успешно с него считывают, при этом успевая еще и на экран графики вывести. Но, вот беда, не смог я увидеть, каким образом идет считывание. И генерации на 100 МГц я нигде не увидел 
Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки.
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки.
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Re: GPIO+DMA stm32f429
[uquote="allplayer",url="/forum/viewtopic.php?p=3294772#p3294772"]Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки.
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
[/uquote]
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?
- Fusion
- Грызет канифоль
- Сообщения: 272
- Зарегистрирован: Пт ноя 13, 2009 10:39:32
- Откуда: Москва
- Контактная информация:
Re: GPIO+DMA stm32f429
STM32F446 разогнан до 240 мГц.
DCMI через DMA работает до 120мГц стабильно.
Клок для АЦП Port A8 OUT MCO.
На 60 мГц и ниже тактирование по таймеру.
DCMI через DMA работает до 120мГц стабильно.
Клок для АЦП Port A8 OUT MCO.
На 60 мГц и ниже тактирование по таймеру.
Re: GPIO+DMA stm32f429
[uquote="Fusion",url="/forum/viewtopic.php?p=3294836#p3294836"]Клок для АЦП Port A8 OUT MCO.
На 60 мГц и ниже тактирование по таймеру.[/uquote]
А для чего MCO, если таймер и так может F/2 выдавать?
На 60 мГц и ниже тактирование по таймеру.[/uquote]
А для чего MCO, если таймер и так может F/2 выдавать?
- Fusion
- Грызет канифоль
- Сообщения: 272
- Зарегистрирован: Пт ноя 13, 2009 10:39:32
- Откуда: Москва
- Контактная информация:
Re: GPIO+DMA stm32f429
Reflector:
На таймере сразу не получилось. Макс. 60 мГц при Prescaler = 0 и Period = 1 (TIM1)
Не стал дальше копать и подключил MCO.
На таймере сразу не получилось. Макс. 60 мГц при Prescaler = 0 и Period = 1 (TIM1)
Не стал дальше копать и подключил MCO.
Re: GPIO+DMA stm32f429
[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
Не стал дальше копать и подключил MCO.[/uquote]
У меня генераторы сконфигурированы как ШИМы, но, естественно, так можно генерить и меандр. Для F/2 нужны ARR и CCR равные 1/1, для F/4 - 3/2 и т.д.... А если таймер настроить в режиме инверсии, тогда минимальная частота уже действительно будет F/4. Естественно нужно выбирать быстрые таймеры сидящие на APB2 или для APB1 ставить делитель 2, хотя практика показывает можно спокойно везде ставить 1
Re: GPIO+DMA stm32f429
[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нс. А потом можно и поспать
В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?[/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]
Мне надо начать оцифровку и подать 2 независимых импульса (дернуть друг за другом 2 ноги) длительностью 100нс. А потом можно и поспать
Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D


