В 50 посте ассемблер из поста 41. Я ещё раз повторю. Есть пример загрузки регистров таймера через DMA. Я привёл ссылку. Ассемблерный код это не намбер ту. Это намбер ван. Намбер ту это пример STM.
В 50 посте ассемблер из поста 41. Я ещё раз повторю. Есть пример загрузки регистров таймера через DMA. Я привёл ссылку. Ассемблерный код это не намбер ту. Это намбер ван. Намбер ту это пример STM.
Чудесно! На 328-й хардварно, без прерываний, получится? Или всё таки нет?
И кстати! Ваш пример из СПЛ не даёт ответа на поставленную задачу.
Намбер ту это пример STM. Только использовать надо чуть на выверт. Массив из 8 элементов {GPIO_BSRR_BR0, GPIO_BSRR_BS0,GPIO_BSRR_BR1, .... GPIO_BSRR_BR3}, таймер пинает ДМА. DMA по кругу пишет в регистр GPIOх->BSRR массив. Всё. На выходе имеем то что надо. Ядро может спать. Код - сами. Ровно 16 строк + объявления.
На 328 так не получится.
З.Ы. В приведённом коде надо добавить массив и изменить назначение DMA. Использовать строка в строку.
В этом подходе каналы не нужны. Таймеру достаточно по переполнению пинать DMA на запись следующего значения. Сори передумал. Значения 4. Но каждое равно (GPIO_BSRR_BR0|GPIO_BSRR_BS1),(GPIO_BSRR_BR1|GPIO_BSRR_BS2),(GPIO_BSRR_BR2|GPIO_BSRR_BS3),(GPIO_BSRR_BR3|GPIO_BSRR_BS0) - сбрасывает один бит и устанавливаем другой.
Я вас умоляю! Какой там код!? Чтобы соединить два таймера там пару строчек инита таймеров. Всё! К тому же это всё есть в апнотах.
Цитата:
В последнее время всё чаще и чаще звучат слова, о том как на STM всё лучше и удобнее, но готовых программ при этом никто не публикует.
Никто не публикует потому что там действительно всё просто.
Цитата:
А так бы интересно было посмотреть на код того-же частотометра на ARM, с комментариями, описанием принципа работы, с примерными характеристиками.. :)
Примерные характеристики можно прикинуть на калькуляторе, там теория с практикой совпадает, так как всё практически хардварно.
Эсесовец, ты же не умеешь СТМ программировать (сам в этом признавался), поэтому и кодов у тебя никаких нет. Только на калькуляторе считать умеешь ))))))))
Да собственно именно так и написано. Только интервалы не приходится щелкать. 32 бит таймера достаточно без ухищерий. Да и кучу других задач параллельно решать.
От слов "кучу других задач параллельно решать" у некоторых тут мозг просто рвёт на части.
Какой, нахрен, иар? Это биты 4..6 регистра TIMx_CCMR1. Смысл, пин выхода канала перещелкивается при совпадении регистра сравнения. Выставляем нужные значения регистров сравнения по всем каналам и с выходов получаем смещенные друг от друга импульсы одинаковой частоты. Все это без дма и прочей фисгармонии.
"В регистр ARR - период/2
В регистры сравнения на 90 ... сдвинутый эквивалентный код.
Выхода сравнений в режим переключения (togle)."
"Примерно усек. Но это если сами импульсы перекрываются, как на картинке стр. 15 AN2592.
А если импульсы очень коротки, т.е. их длительность значительно менее полупериода и задержек между фазами, они никак между собой не перекрываются. Т.е. toggle mode уже не пройдет, т.к. задержка между импульсами значительно больше их длительности.
Получается в этом случае уже не сделать?"
Эх. Погорячился я. Вариант 2 не проходит. Нельзя заставить DMA по одному перебирать значения массива. Он по одному может выбрасывать только одно значение. Четыре значения выбрасывает за раз. Так что если нужны любые ноги, у меня только вариант 1. Конечно не совсем без участия ядра. Шести фазная генерация встроена ТIМ1. Может её как то можно приспособить на 4 фазы?
Эх. Погорячился я. Вариант 2 не проходит. Нельзя заставить DMA по одному перебирать значения массива. Он по одному может выбрасывать только одно значение. Четыре значения выбрасывает за раз.
Можно заюзать два канала ДМА, а можно и один, если немного подумать. Так что может и прокатить. Но не суть. Несколько вариантов на СТМ32 против одного на 328-й. Вот за это мне СТМ32 и нравятся, можно из нескольких решений выбрать наиболее подходящее.
Ну что вы право дело пристали с намбер ту? Открываем примеры STM
И причём здесь это? Хадварно! Хардварно значит без кода и прерываний, только инит, а дальше оно само!
Так?
Да. Спасибо. Вижу что Вас в один ряд с ssss ставить нельзя. Сорри.
Ну что вы право дело пристали с намбер ту? Открываем примеры STM
И причём здесь это? Хадварно! Хардварно значит без кода и прерываний, только инит, а дальше оно само!
Ну хоть код посмотрите :-) - только один инит ! Дальше оно само. Ни прерываний ничего! Всё хардверно.
Ну хоть код посмотрите :-) - только один инит ! Дальше оно само. Ни прерываний ничего! Всё хардверно.
И что тогда по вашему делает
void
TIM4_IRQHandler(
void
)
)))))))))))))))))))))))))))))))))))))))))))
http://www.longlandclan.yi.org/~stuartl/stm32f10x_stdperiph_lib_um/STM32...
В упор не вижу где. На какой строке? Там вообще TIM1 используется. В примере STM.
В упор не вижу где. На какой строке? Там вообще TIM1 используется. В примере STM.
Скрин из поста номер 50 подойдёт?
Достаточно номера строки из примера по ссылке.
Так?
Ну что вы право дело пристали с намбер ту? Открываем примеры STM
....\arm\examples\ST\STM32F10x\stm32f10x_stdperiph_lib\Project\STM32F10x_StdPeriph_Examples\TIM\DMA\main.c
получите пример без единой софтверной команды кручения таймера через DMA. Настраивается под свои нужды на раз.
Это ваш пост?
В 50 посте ассемблер из поста 41. Я ещё раз повторю. Есть пример загрузки регистров таймера через DMA. Я привёл ссылку. Ассемблерный код это не намбер ту. Это намбер ван. Намбер ту это пример STM.
В 50 посте ассемблер из поста 41. Я ещё раз повторю. Есть пример загрузки регистров таймера через DMA. Я привёл ссылку. Ассемблерный код это не намбер ту. Это намбер ван. Намбер ту это пример STM.
Чудесно! На 328-й хардварно, без прерываний, получится? Или всё таки нет?
И кстати! Ваш пример из СПЛ не даёт ответа на поставленную задачу.
Намбер ту это пример STM. Только использовать надо чуть на выверт. Массив из 8 элементов {GPIO_BSRR_BR0, GPIO_BSRR_BS0,GPIO_BSRR_BR1, .... GPIO_BSRR_BR3}, таймер пинает ДМА. DMA по кругу пишет в регистр GPIOх->BSRR массив. Всё. На выходе имеем то что надо. Ядро может спать. Код - сами. Ровно 16 строк + объявления.
Код - сами. Ровно 16 строк + объявления.
Спасибо великодушно! )))))))))))))))
Только я на этот вопрос и отвечал на том форуме. И никакие ЖПИО там и даром не нужны. Там всё рулилось пинами таймера.
Вот и выяснили!
В приведённом коде надо добавить массив и изменить назначение DMA. Использовать строка в строку.
Да не получится там строка в строку. Из-за этого вопрос и возник, в общем то. Но это уже не суть.
Ну да. Только пины таймера всёж привязаны к ногам, а такой подход можно назначить на любые ноги, использовать таймер 6 - вообще безногий.
Это уже другая пестня! У 6-го таймера 4 канала? Разве?
Как это не получится? DMA_PeripheralBaseAddr = (uint32_t)TIM1_CCR3_Address; поменять на DMA_PeripheralBaseAddr = (uint32_t)&GPIOх->BSRR; и размер на 8.
В этом подходе каналы не нужны. Таймеру достаточно по переполнению пинать DMA на запись следующего значения. Сори передумал. Значения 4. Но каждое равно (GPIO_BSRR_BR0|GPIO_BSRR_BS1),(GPIO_BSRR_BR1|GPIO_BSRR_BS2),(GPIO_BSRR_BR2|GPIO_BSRR_BS3),(GPIO_BSRR_BR3|GPIO_BSRR_BS0) - сбрасывает один бит и устанавливаем другой.
Да по разному можно, только не на 328-й. ))))))))))
Только если использовать 4 канала то уже надо жертвовать либо ацп и SPI, либо ещё чем. А так один канал DMA только занят.
OCnM = 011 ?
Я предложил не следовать этому совету.
Т. е. вы ничего не предложили. Или предложили оставаться дураком на ардуине?
Эсесовец, так ты и есть дурак и на СТМ и на Ардуине - ты же сам ранее сообщал, что не умеешь программировать СТМ, а Ардуины у тебя вообще нет.
Ну так поделились бы готовым рабочим кодом.
Я вас умоляю! Какой там код!? Чтобы соединить два таймера там пару строчек инита таймеров. Всё! К тому же это всё есть в апнотах.
В последнее время всё чаще и чаще звучат слова, о том как на STM всё лучше и удобнее, но готовых программ при этом никто не публикует.
Никто не публикует потому что там действительно всё просто.
А так бы интересно было посмотреть на код того-же частотометра на ARM, с комментариями, описанием принципа работы, с примерными характеристиками.. :)
Примерные характеристики можно прикинуть на калькуляторе, там теория с практикой совпадает, так как всё практически хардварно.
Эсесовец, ты же не умеешь СТМ программировать (сам в этом признавался), поэтому и кодов у тебя никаких нет. Только на калькуляторе считать умеешь ))))))))
Да собственно именно так и написано. Только интервалы не приходится щелкать. 32 бит таймера достаточно без ухищерий. Да и кучу других задач параллельно решать.
От слов "кучу других задач параллельно решать" у некоторых тут мозг просто рвёт на части.
Вот тебе его и оторвало ))))))))
Вот о чём я и говорю. Все говорят что просто, а код не показывают.
"Код ничто, главное идея."(с)
Вам, как миссионеру от STM
Хоть вы не начинайте. Никакого отношения к СТМ я не имею.
Ну вот эсесовец опять признался, что СТМ программировать не умеет.
не дёргай поводок
Эсесовца на поводок посадили ))))))))))))))))
arduino328, кто посмел тебя с клетки выпустить и намордник снять? ))))))))))
Только если использовать 4 канала то уже надо жертвовать либо ацп и SPI, либо ещё чем. А так один канал DMA только занят.
Был вопрос, был ответ. Ответ вопрошающего устроил более чем полностью. Устроил бы его ваш вариант я не знаю, а мне так это вообще не интересно.
Кстати, какова минимальная длительность импульсов вашего варианта? В моём варианте полная шкала.
Мой вариант в №70 подходит?
Мой вариант в №70 подходит?
А что это? Ты ж знаешь, я ИАРом пользуюсь только на СТМ8, да и то не юзаю задротных ИАРовских фишек.
Да там всё просто.
DMA конфигурируем на запись из буфера памяти в DMAR, кольцевой режим. В буфере лежат значения регистров CCR1 - CCR4, 4x4=16 значений.
Выставляем в DIER таймера бит UDE.
В DCR выставляем трансфер в 4 слова и смещение адреса CCR1.
В счётчик ДМА заносим 16.
Запускаем все это хозяйство. Сначала ДМА, потом таймер.
Какой, нахрен, иар? Это биты 4..6 регистра TIMx_CCMR1. Смысл, пин выхода канала перещелкивается при совпадении регистра сравнения. Выставляем нужные значения регистров сравнения по всем каналам и с выходов получаем смещенные друг от друга импульсы одинаковой частоты. Все это без дма и прочей фисгармонии.
Да заряди картинку на Салеае и посмотрим.
Тогле там предлагалось, но отверглось.
"В регистр ARR - период/2
В регистры сравнения на 90 ... сдвинутый эквивалентный код.
Выхода сравнений в режим переключения (togle)."
"Примерно усек. Но это если сами импульсы перекрываются, как на картинке стр. 15 AN2592.
А если импульсы очень коротки, т.е. их длительность значительно менее полупериода и задержек между фазами, они никак между собой не перекрываются. Т.е. toggle mode уже не пройдет, т.к. задержка между импульсами значительно больше их длительности.
Получается в этом случае уже не сделать?"
Хотели такое.
Какая-то синтетическая задача. Посмотреть бы, где такое могло потребоваться.
Не знаю. Но периодически подобные вопросы возникают.
Эх. Погорячился я. Вариант 2 не проходит. Нельзя заставить DMA по одному перебирать значения массива. Он по одному может выбрасывать только одно значение. Четыре значения выбрасывает за раз. Так что если нужны любые ноги, у меня только вариант 1. Конечно не совсем без участия ядра. Шести фазная генерация встроена ТIМ1. Может её как то можно приспособить на 4 фазы?
Эх. Погорячился я. Вариант 2 не проходит. Нельзя заставить DMA по одному перебирать значения массива. Он по одному может выбрасывать только одно значение. Четыре значения выбрасывает за раз.
Можно заюзать два канала ДМА, а можно и один, если немного подумать. Так что может и прокатить. Но не суть. Несколько вариантов на СТМ32 против одного на 328-й. Вот за это мне СТМ32 и нравятся, можно из нескольких решений выбрать наиболее подходящее.
arduino328, кто посмел тебя с клетки выпустить и намордник снять?
Эсесовец опять голос из преисподней подал. Испугался что ли? ))))))))
я ИАРом пользуюсь только на СТМ8
Ну наконец-то эсесовец до программирования СТМ дошёл, но только до 8-разрядного. ))))))))