Код красивый, но непонятный в хлам, как я его запущу, когда половина не объявленных типов переменных и функций? Могу только смысл понять, что память 32 битный буфер, порт как 8 бит, сейчас проверю. Наконец то!Reflector писал(а):Я перебрал кучу настроек, всегда получается 4 такта кроме случаев, когда размер источника в 2 раза больше, т.е., например, читаешь из порта 16 бит, а пишешь по 8, но тогда выходит 8 тактов, а не 6. С разной скоростью DMA тоже не должен работать, если не считать лаги. VGA либа, на которую я ссылался, выдает 800x600, там скорость вывода пикселей ровно 40MHz, а скорость проца - 160MHz.GFX писал(а): У меня работает за 6, это точно и это факт, почему у вас за 4 не знаю, я проверю DMA1 может оно быстрее. Код выложите свой сравню. ДМА может работать с разной скоростью, нужно понять просто, как выжать максимальную.
Код практически такой-же, как и на F103:Спойлер
Код: Выделить всё
ch1.initMemToMem((void*)&GPIOA->IDR, DmaDataSize::_8bits, false, data, DmaDataSize::_32bits, true, 3584, DmaPriority::VeryHigh, 1); void initMemToMem(void* srcAddr, DmaDataSize srcSize, bool srcInc, void* dstAddr, DmaDataSize dstSize, bool dstInc, uint16_t bufSize, DmaPriority prio, uint32_t channel, bool circular = false, bool doubleBuffer = false) { _assert_(dma == DMA2); disableConfirmed(); dma->LISR = dma->HISR = 0; memorySrcAddr(uint32_t(srcAddr)); memoryDstAddr(uint32_t(dstAddr)); bufferSize(bufSize); stream->CR = (doubleBuffer << 18) | uint32_t(DmaDir::MemToMem) | uint32_t(prio) | (uint32_t(srcSize) << 11) | (uint32_t(dstSize) << 13) | (circular << 8) | (srcInc << 9) | (dstInc << 10) | (channel << 25); }
Карманный осциллограф на STM32
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
- Вложения
-
- Скриншот 2016-09-03 11.15.35.png
- (64.93 КБ) 676 скачиваний
Последний раз редактировалось GFX Сб сен 03, 2016 10:48:17, всего редактировалось 2 раза.
Re: Карманный осциллограф на STM32
А что вам не нравится? Да и писал не я, а Мартин. Хотите ДМА-трансфер быстрее чем вручную? Не дождётесь! Почему? Мартин написал почему. Где-то этот расклад встречал и в официальных доках СТМ, но не могу вспомнить где. Максимальная скорость ДМА это м2м, выше уже не бывает и быть не может. Для р2м латентность будет на пару тактов больше. При выводе р2м в порт из ОЗУ латентность для Ф0 - 6 тактов, для Ф1хх - 11 тактов. Для Ф4 не пробовал. Не думаю, что при чтении с порта в ОЗУ что-то радикально подвинется в цифрах.GFX писал(а): Да и перечитайте, что вы написали, там не о 4 тактах говорится "with the exception of the
bus access phase.", т.е. доступ к шине может быть больше а на сколько не указано, это от загрузки шины зависит видимо, ну оно так и есть стоит два ДМА запустить их скорость падает.
Последний раз редактировалось scorpi_0n Сб сен 03, 2016 10:19:02, всего редактировалось 1 раз.
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Ну выше я уже дождался) Подход к ДМА нужно было найти, ему не нравится сохранять в меньшую размерность, чем 32 бита просто.scorpi_0n писал(а):А что вам не нравится? Да и писал не я, а Мартин. Хотите ДМА-трансфер быстрее чем вручную? Не дождётесь! Почему?GFX писал(а): Да и перечитайте, что вы написали, там не о 4 тактах говорится "with the exception of the
bus access phase.", т.е. доступ к шине может быть больше а на сколько не указано, это от загрузки шины зависит видимо, ну оно так и есть стоит два ДМА запустить их скорость падает.
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
На текущий момент выяснено ДМА:
1. у stm32f0xx ?
2. у stm32f1xx 9 тактов на мем то мем, точно, как не меняй битность источника и приемника
3. у stm32f3xx ?
4. у stm32f4xx 4 такта на мем то мем, если источник меньше буфера 8 бит и 32 бита, 6 тактов на мем то мем, если источник равен буферу=8 бит, другие комбинации не проверял, этих достаточно.
Программное чтение:
1. у stm32f0xx ?
2. у stm32f1xx 6 тактов, точно
3. у stm32f3xx ?
4. у stm32f4xx 4 такта, точно
1. у stm32f0xx ?
2. у stm32f1xx 9 тактов на мем то мем, точно, как не меняй битность источника и приемника
3. у stm32f3xx ?
4. у stm32f4xx 4 такта на мем то мем, если источник меньше буфера 8 бит и 32 бита, 6 тактов на мем то мем, если источник равен буферу=8 бит, другие комбинации не проверял, этих достаточно.
Программное чтение:
1. у stm32f0xx ?
2. у stm32f1xx 6 тактов, точно
3. у stm32f3xx ?
4. у stm32f4xx 4 такта, точно
Re: Карманный осциллограф на STM32
По-моему, и так понятно, что делает функция memorySrcAddr или что значит переменная srcInc, тем более понятно, что означает DmaDataSize::_8bits. При желании уж точно можно разобратьсяGFX писал(а): Код красивый, но непонятный в хлам, как я его запущу, когда половина не объявленных типов переменных и функций? Могу только смысл понять, что память 32 битный буфер, порт как 8 бит, сейчас проверю.
В том и дело, что у меня это не имеет значения. 8->8, 8->16, 8->32, 16->16 - во всех этих случаях получается 4 такта. Кроме того 8->8 и 8->32 визуально выглядят идентично, 8->32 я выбрал, т.к. это дает только 1 Memory transfer, а не 4. В даташите есть таблица на все варианты. Обрати внимание, что в этом плане DMA для F1 и F4 отличаются, на F1 "лишние" байты отбрасываются...Наконец то!А говорили ДМА не может с разной скоростью работать! Но работает же теперь 4 такта, правда не знаю корректно ли массив заполнился и в нем данные как распределены из 32 бит всего 8 занято... не порядок мягко говоря.
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Ну работает 4 такта и ладно, почему у вас и в 8->8 работает быстрее не знаю, но это и не важно, не вижу разницы, в память трамбуется хорошо, не отбрасывает, а именно трамбует. Кстати, когда речь идет о даташите, не плохо указывать страницуReflector писал(а): В том и дело, что у меня это не имеет значения. 8->8, 8->16, 8->32, 16->16 - во всех этих случаях получается 4 такта. Кроме того 8->8 и 8->32 визуально выглядят идентично, 8->32 я выбрал, т.к. это дает только 1 Memory transfer, а не 4. В даташите есть таблица на все варианты. Обрати внимание, что в этом плане DMA для F1 и F4 отличаются, на F1 "лишние" байты отбрасываются...
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: Карманный осциллограф на STM32
Да, я измеряю скорость количеством команд, на F0 при тактовых частотах до 24МГц имею полное право так делать. Выше 24МГц уже латентность флеша добавляет. Но при умеренном размере кода можно его впихнуть в RAM и запускать оттуда.GFX писал(а):Вы изменяете скорость количеством команд? не смешите, дайте реальную скорость своего кода посчитанную как-то желательно на логическом анализаторе. "4000*6 = 24 000 байт" кто вам сказал такое? что это за расчет? просто ни в какие ворота он не годится, смешно просто. подсказка каждая команда не весит 1 байт, вторая подсказка, не каждая команда выполняется за 1 такт. И смех и грех.Andrew Martin писал(а):Очень полезная информация. А главное ни в одном даташите нет этих данных. Стесняются своего DMA что ли?![]()
Однако на F0 получается забирать за 5 тактов
И это на ядре М0. А у вас МК на ядре М3 и 6 тактов? Плохая сосискаКод: Выделить всё
ldrb r0,[r1] ;2 strb r0,[r2] ;2 adds r2,1 ;1![]()
И размер... при 4000 семплов длина сосиски будет 4000*6 = 24 000 байт.
мой код, кстати, лучше вашего, сосиска не плоха.Вот только выполняются эти две команды по 3 такта и это есть в описании этих команд, вернее в описании 3 задержки в каждой команде, чему они равны хз, ну судя по всему по 1 такту а там ХЗ, но по факты вместе они 6 тактов занимаютКод: Выделить всё
LDR r2,[r1,#0x00] STRB r2,[r0,#0x07]
Каждая команда ldr/str выполняется за 2 такта, а adds - за 1 такт, как и написано в соответствующем Technical Reference Manual к ядру М0. Итого 5 тактов на выборку.
Что за расчет? Каждая из команд занимает по 2 байта. Это конечно на самой простой и быстрой сосиске. На более низких скоростях уже можно организовать цикл.
На ядре М0 лучше не сделаешь - нет постинкремента адреса. Вернее, он есть, но только для 32-битного слова (ldm/stm).
Вот этот код
Код: Выделить всё
ldrb r0,[r1] ;2
stm r2!,{r0} ;2
Это чем-то перекликается с вашим
хотя причины очевидно иные.GFX писал(а): ему не нравится сохранять в меньшую размерность, чем 32 бита просто.
А адресация с Immediate offset на ядре М0 поддерживает только 32 байта.
Последний раз редактировалось Andrew Martin Сб сен 03, 2016 17:54:57, всего редактировалось 2 раза.
Re: Карманный осциллограф на STM32
Для F0 может так и есть, но для F1 и выше такое уже не работает, там LDR и STR пайплайнятся с кучей оговорок.Andrew Martin писал(а): Да, я измеряю скорость количеством команд, на F0 при тактовых частотах до 24МГц имею полное право так делать. Выше 24МГц уже латентность флеша добавляет. Но при умеренном размере кода можно его впихнуть в RAM и запускать оттуда.
Каждая команда ldr/str выполняется за 2 такта, а adds - за 1 такт, как и написано в соответствующем Technical Reference Manual к ядру М0. Итого 5 тактов на выборку.
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Это хорошо, но вы сами дали оговорку, да и F0 мы не рассматривали. Важен результат, который получается фактически, а такие расчеты ничего не гарантируют. Проверять нужно в железе, тогда нет проблемы с неправильной интерпретацией даташитов или личных расчетов.Andrew Martin писал(а): Да, я измеряю скорость количеством команд, на F0 при тактовых частотах до 24МГц имею полное право так делать. Выше 24МГц уже латентность флеша добавляет. Но при умеренном размере кода можно его впихнуть в RAM и запускать оттуда.
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Ну что, запихал без проблем прямо в Кейле 71к в STM32f103C8, я в шоке, подарочек STM сделала, мало того, что на 128МГц работает без видимых проблем (ну юсб не заработает конечно), так еще и памяти в два раза больше. Спасибо за наводкуReflector писал(а):В документации есть глава "Device overview", там все подвиды мк сведены в таблицу и сгруппированы в том числе по объему флеша и RAM. Например, у меня есть F103VC, в таблице он в одной группе с 103VD и 103VE, в таком случае обычно(может и всегда) все эти 3 мк есть 103VE, т.е. самый старший из них. Реально у 103VC в 2 раза больше флеша и на четверть больше RAM. F103C8 в таблице рядом с F103CB и они оба F103CB. F407VE рядом с F407VG и они оба VG. Так под F407VG прогу и собираем, главное подобрать правильные настройки программатора или его самого, иначе придется шить отдельной утилитой, что не так удобно. Еще есть и более экзотические варианты, у того же F030 не только в 2 раза больше памяти, но еще есть 32-ти битный таймер и по сути он F031. У F101 есть USB и т.д.GFX писал(а): Вот это интересно, т.е. программу собираем для мк STM32F103СB, чтобы ошибки по памяти не было, а потом тупо пытаемся залить в МК с заявленными 64 кбайтами 128? Где можно об этом почитать, выглядит загадочно![]()
Re: Карманный осциллограф на STM32
F0 и F1 гонятся в 2 раза, по крайней мере мне пока других не попадалось.GFX писал(а):мало того, что на 128МГц работает без видимых проблем
Re: Карманный осциллограф на STM32
Заинтересовался проектом,заказал у китайцев микроконтроллеры и дисплей.МК уже пришли-вместо STM32F103C8T6 узкопленочный выслал STM32F103ZET6(корпус 144pin).Открыл спор на алиэкспресс,но не уверен что выиграю.Возможно применение такого МК в данной схеме?Разумеется,с изменением разводки печатки.
Re: Карманный осциллограф на STM32
ссылочку на дисплей дадите?
этот пойдет?тут вроде выводы не так https://ru.aliexpress.com/item/J34-F85- ... a48e9cac1e
этот пойдет?тут вроде выводы не так https://ru.aliexpress.com/item/J34-F85- ... a48e9cac1e
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Вы шутите? Радоваться нужно. Конечно применим, пин ту пут если поставите то и работать будет также, зато куча свободных ног и памяти в придачу, но проще купить еще один тот, что нужен, дешевый. А этот припасти на черный день)molotok26 писал(а):Заинтересовался проектом,заказал у китайцев микроконтроллеры и дисплей.МК уже пришли-вместо STM32F103C8T6 узкопленочный выслал STM32F103ZET6(корпус 144pin).Открыл спор на алиэкспресс,но не уверен что выиграю.Возможно применение такого МК в данной схеме?Разумеется,с изменением разводки печатки.
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Да пойдет, лишние выводы откусите или выпаяете, это под сенсор, которого там нет (пустое место под микросхему и на экране его нет)redram55 писал(а):ссылочку на дисплей дадите?
этот пойдет?тут вроде выводы не так https://ru.aliexpress.com/item/J34-F85- ... a48e9cac1e
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Обучил ослик скриншотам, по долгому удержанию кнопки энкодера. Скрины в формате BMP, пережал для радиокота, он никак не научится нормально картинки загружать.
- Вложения
-
- 027.png
- (4.26 КБ) 1158 скачиваний
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: Карманный осциллограф на STM32
Картинки - пустая трата памяти. Хоть сырые, хоть пожатые.GFX писал(а):Обучил ослик скриншотам, по долгому удержанию кнопки энкодера. Скрины в формате BMP
Лучше разработайте свой, бинарный формат данных, в котором бы хранились и данные, и настройки осциллографа, при которых эти данные сняты.
А потом можно написать софтину для анализа этой мути на ПК. Если конечно нужно.
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Ну можно и так сделать, правда мне лень, убил я итак много времени на этого ослика. Картинки все равно нужны. Увидел что-то, не нужно телефон искать, да и качество получше. Скрин всегда нужная штука, а памяти на флешке не жалко, что там 240 кбайт. Починил, кстати, а то двоилось изображение. Радиокот все равно добивает файлы, даже мелкие...Andrew Martin писал(а):Картинки - пустая трата памяти. Хоть сырые, хоть пожатые.GFX писал(а):Обучил ослик скриншотам, по долгому удержанию кнопки энкодера. Скрины в формате BMP
Лучше разработайте свой, бинарный формат данных, в котором бы хранились и данные, и настройки осциллографа, при которых эти данные сняты.
А потом можно написать софтину для анализа этой мути на ПК. Если конечно нужно.
Re: Карманный осциллограф на STM32
5 тактов, программно или ДМА - без разницы1. у stm32f0xx ?
- GFX
- Поставщик валерьянки для Кота
- Сообщения: 2040
- Зарегистрирован: Вт окт 23, 2012 18:36:14
- Откуда: Ростов-на-Дону
Re: Карманный осциллограф на STM32
Кто собирался собирать устройство, вы не спешите, комплектующие можете заказать, но плату не травите, я уже говорил, но повторяюсь на всякий случай, 7660 не заказывайте. Плата будет меняться и схема тоже.