Всем привет! Столкнулся с задачей скоростного считывания ног порта. Завёл всё через DMA, копируют по одному младшему байта в массив с инкрементом. Проц работает на заявленной максимуме (180 МГц). Но, вот беда, получилось только раскачать на 50 МГц, хотя в даташите пишут, что можно до 90 считывать. Подскажите, можно ли настройками поднять скорость считывания я повыше? Или же придётся камень менять? Добавлю, что раскачал в режиме оверклока до 240 МГц, скорость считывания поднялась примерно до 66. Заранее спасибо!
_________________ Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650.
Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Мне бы хотелось получить чтение порта (8 бит) со скоростью 90 мегасемплов (2 такта), вывести в оверклок и поднять считывание до 100 мегасемплов. Но это получится провернуть только для записи в одну переменную. Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?
А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
_________________ Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Мне бы хотелось получить чтение порта (8 бит) со скоростью 90 мегасемплов (2 такта), вывести в оверклок и поднять считывание до 100 мегасемплов. Но это получится провернуть только для записи в одну переменную. Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?
Инкремент адреса - это мелочи, главное каждое значение прочитанное в регистр придется сохранять еще и в памяти.
Цитата:
А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Нет. И зачем вообще такое делать, если порты 16-ти битные и можно обойтись одним? Читай за 3 такта 16 бит, даже в таком случае можно получить 100 MSPS если разогнать мк до 300 MHz, а у меня он на них работает. По крайней мере 90 MSPS ты таким образом получишь точно. Если достаточно 8 бит, то бери DCMI...
Мне бы хотелось получить чтение порта (8 бит) со скоростью 90 мегасемплов (2 такта), вывести в оверклок и поднять считывание до 100 мегасемплов. Но это получится провернуть только для записи в одну переменную. Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?
Инкремент адреса - это мелочи, главное каждое значение прочитанное в регистр придется сохранять еще и в памяти.
Цитата:
А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Нет. И зачем вообще такое делать, если порты 16-ти битные и можно обойтись одним? Читай за 3 такта 16 бит, даже в таком случае можно получить 100 MSPS если разогнать мк до 300 MHz, а у меня он на них работает. По крайней мере 90 MSPS ты таким образом получишь точно. Если достаточно 8 бит, то бери DCMI...
Я уже читаю инфу по DCMI. Подтолкните, пожалуйста, с чего лучше начать? Я так понимаю, что в режиме DCMI мне придется подцепить и внешнее тактирование?
_________________ Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Я уже читаю инфу по DCMI. Подтолкните, пожалуйста, с чего лучше начать? Я так понимаю, что в режиме DCMI мне придется подцепить и внешнее тактирование?
DCMI очень простой, там всего один CR для настройки и, насколько я помню, для 8 бит в нем достаточно только бит разрешения захвата включить. 90 MHz придется самому генерить, потом еще для старта нужно короткий импульс на вход VSYNC подать. И усыплять мк тоже придется, на таких скоростях любая активность добавляет тормоза.
Если мне нужно пихать в массив, то придется инкрементировать адрес (еще +2 такта=4), я всё правильно понял?
Программно не получится: нужна как минимум одна инструкция чтения памяти (GPIO) - это два такта, и одна - записи в ОЗУ - ещё 2 такта. Даже с многословными инструкциями - никак.
А если запараллелить 2 порта, получится ли настроить GPIO и DMA так, чтобы сдвиг между считыванием данных был 2 такта и я смог каждый четный байт массива записывать из порта GPIOA, а каждый нечетный с порта GPIOB, например?
Можно попробовать. Только зачем разные порты если оба DMA-канала можно натравить на один GPIO? Генерить сигналы событий к DMA от таймеров со сдвигом 2 такта. Хотя всё это ненадёжно очень. Лучше взять LPC43xx - у него есть порт SGPIO, он штатно работает на частоте до 204МГц. Без всяких оверклоков. И при этом у SGPIO имеется FIFO. И до 16 входных линий.
Я перечитал на форуме много сообщений на тему самодельных осциллографов на базе stm32f4, где используют 100 МГц-й АЦП, успешно с него считывают, при этом успевая еще и на экран графики вывести. Но, вот беда, не смог я увидеть, каким образом идет считывание. И генерации на 100 МГц я нигде не увидел
Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки. В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
_________________ Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки. В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?
На таймере сразу не получилось. Макс. 60 мГц при Prescaler = 0 и Period = 1 (TIM1) Не стал дальше копать и подключил MCO.
У меня генераторы сконфигурированы как ШИМы, но, естественно, так можно генерить и меандр. Для F/2 нужны ARR и CCR равные 1/1, для F/4 - 3/2 и т.д.... А если таймер настроить в режиме инверсии, тогда минимальная частота уже действительно будет F/4. Естественно нужно выбирать быстрые таймеры сидящие на APB2 или для APB1 ставить делитель 2, хотя практика показывает можно спокойно везде ставить 1
Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки. В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?
Разве могут быть помехи, если у меня внешний АЦП продавливает ноги порта?
Кстати, да: Прикупил генератор на 50 МГц (больше просто не было в наличии). И при тактировании в 150 МГц получил как раз 50М измерений в секунду через DCMI без режимов спячки. В принципе, если проц не помрёт от оверклока 180->300 МГц, то и нормально будет
Мк усыпляют еще и чтобы от помех избавиться, да и что ты будешь делать непосредственно во время оцифровки?
Мне надо начать оцифровку и подать 2 независимых импульса (дернуть друг за другом 2 ноги) длительностью 100нс. А потом можно и поспать
_________________ Купил лазерный принтер... Теперь осталось спаять машину времени и прислать себе принтер пораньше =D
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения