![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
adnega
-
Постов
3 594 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные adnega
-
-
Кста, я когда звук поверх CAN в низкоприоритетном потоке передавал сделал просто передачу четных и нечетных выборок в соседних пакетах. Т.е. при потере пакета просто полоса сигнала резалась. И, вроде, был у меня tog-бит в ID.. Но там можно было пакет потерять) И частота была небольшая, что несколько боксов с этим ID не забивались)
-
5 минут назад, jcxz сказал:
А как в жизни
В жизни ни у всех есть аппаратный FIFO. У многих это просто три коробки. При приеме пакета выставляется флаг. Далее в обработчике смотришь какая коробка заполнена и помещаешь содержимое в программный FIFO. Бывает, что заполнено сразу несколько коробок - и вот это не гарантирует порядок пакетов.
-
3 минуты назад, jcxz сказал:
Приёмная сторона примет их точно в том порядке, в котором они будут передаваться по шине. Ибо - другое невозможно по определению.
Примет, разложит по mailbox`ам. Как узнать какой mailbox принят раньше?
-
2 минуты назад, jcxz сказал:
Не очень понятно - что мешает отправить в нужном порядке?
Что гарантирует прием в нужном порядке? Отправить не проблема.
-
4 минуты назад, Arlleex сказал:
Я хотел сократить оверхед и задействовать все 8 байтов под куски записи.
Лучше так не делать. Сам сталкиваюсь с тем, что при плотном потоке, даже если они все будут успешно отправлены в нормальном порядке, нет гарантий, что на приемной стороне этот порядок можно будет выстроить, т.к. они там тоже залетают в почтовые ящики)
1 минуту назад, Arlleex сказал:отводить байт под некий счетчик последовательности
Можно часть ID выделить под счетчик (размером не менее числа mailbox на приемной стороне). Если протокол позволяет)
-
Нужно понимать, что между событием и DMA-транзакцией для этого события проходит время. Насколько я помню, порядка 12 тактов (для Cortex-M3).
-
Тогда подробности тут
-
Насколько я помню, WCH-Link, даже получив команду частичного взаимодействия в памятью, все равно стирает всю. Т.е. по USB, по протоколу приходит описание региона (смещение и размер), но он эти данные игнорирует. По-моему, ответ: никак невозможно. Однако, что-то могло поменяться.
-
WCH-Link не умеет стирать/дописывать частями. Всегда делает MassErase на любую просьбу.
-
А внутри HF есть возможность получить значения регистров mepc, mcause, mtval ?
-
По адресу 0x0 лежит не указатель на reset_handler, а инструкция j reset_handler - понимаете разницу?
По адресу 0х4 нет ничего полезного.
Не советую использовать адреса 0x800.. для адресации flash - попробуйте 0x000...
-
А где метка _vector_base ?
Попробуйте так:
la t0, _start ori t0, t0, 3 csrw mtvec, t0
-
Сделал загрузку конфигурационной SRAM по JTAG. С учетом данной ветки все прошло гладко. Хочу сделать красиво, но для этого нужен сигнал DONE, который живет своей жизнью (или я чего-то не понимаю).
После импульса сброса на RECONFIG, получаю READY (через 741 мкс).
Затем делаю IR(0x11) [запрос DEVICE_ID], следом IR(0x15) и после этой команды DONE взводится в единицу. Почему?
Ожидаю, что он взведется после перехода в User Mode (как на Figure 4-1 Configuration Flow Power).
Я правильно понимаю "when configuring SRAM using JTAG circuit, it does not need to take DONE signal into account"
в моем случае "не требуется учитывать" означает "не стоит учитывать"?
-
1 час назад, ozforester сказал:
По cortex3-m нашел книжку
ЦитатаARM ASSEMBLY LANGUAGE (Fundamentals and Techniques) - William Hohl.pdf
ARM instruction set quick reference card.pdf
ARMv7-M_ARM.pdf
ARM_SoC_Arch_2nd_E.pdf
Cortex-M4 Instruction Timing.pdf
DDI0403D_arm_architecture_v7m_reference_manual.pdf
DDI0419C_arm_architecture_v6m_reference_manual.pdf
defingidtoarmcortm23&m33(pdf).pdf
Fisher M., ARM Cortex M4 cookbook(2016).pdf
Furber S., ARM system-on-chip architecture(2000).pdf
GNU ARM assembler quick reference.pdf
Mahout V., Assembly Language Programming ARM Cortex-M3(2012).pdf
Martin T., The Designer's Guide to the Cortex-M Processor Family. A Tutorial Approach(2013).pdf
Martin T., The Insiders Guide to the STM32 ARM based Microcontroller(2008).pdf
The Definitive Guide to ARMR CortexR-M0 and Cortex-M0+ Processors - Second Edition [2016].pdf
Yiu J., The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors(2014).pdf
Yiu J., The Definitive Guide to the ARM Cortex-M0(2011).pdf
Yiu J., The Definitive Guide to the ARM Cortex-M3(2007).pdf
Yiu J., The Definitive Guide to the ARM Cortex-M3(2010).pdf
Zhu Y., Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C(2018).pdf
Вовк П., Введение в архитектуру Cortex-M3. Части 1-3(2007).pdf
Ознакомительное руководство по ARM-микроконтроллерам Cortex-M3.pdf
Ю Д., Ядро CORTEX-M3 компании ARM(2012).djvu -
1 час назад, jcxz сказал:
По каким именно "уделывает"???
Конкретно мне он интересен: USB-HS со встроенной физикой на 480МГц.
Ethernet 10/100/1000 со встроенной физикой на 10МГц.
Восемь последовательных портов, SDIO, CAN (два), еще один USB, но -FS, контроллер внешней памяти FSMC, порт для камеры DVP, ADC-12бит 2 по 16 (с возможностью тача), DAC-12бит, операционники/компараторы OPA/CMP (четыре штуки), часы реального времени, три SPI, два I2C.
А главное ценник от 250 руб/шт (почти в розницу) и наличие в РФ.
Кста, частота 144 МГц (но есть особенности). Оперативки можно накрутить до 128КБ за счет флеши (которая WS0).
По плотности кода и эффективности исполнения соглашусь - до Cortex-M4 не дотягивает, но я на последние и не гуляю.
FPU одинарной точности имеется.
-
11 минут назад, jcxz сказал:
PS: Странно - ещё пару дней назад эта же плата в этом же магазине стоила 2400руб, а сейчас уже 2900руб.
Дело хозяйское, но рекомендую про RISC-V не забывать)
Есть отладка, в два раза дешевле, по некоторым пунктам уделывает "нормальный" МК)
Если принципиально Cortex-M, то смотреть AT32F, GD32F что-то из 4хх-линейки.
-
45 минут назад, ozforester сказал:
Прерывания загнулись где-то на 1/20 тактовой. DMA примерно на 1/3.
Это очень хороший результат.
Я бы разделил понятия: "точность-погрешность-и т.п." Тут все ок, без предфильтров будет 1 такт таймера.
И "пропуски-дребезг-загнулись". Нужно до ядра доводить только ту информацию, которая нужна для принятия решений. Т.е. если можно аппаратно выкинуть часть импульсов - это нужно делать.
У вас настроен DMA на два переноса - в будущем можете просто увеличить размер буфера или вообще перейти на кольцо.
Если передавать ядру всю информацию об импульсах, то оно загнется раньше TIM/DMA/ISR.
> Применить смогу, например, при измерении частоты
Частоту можно двумя способами измерять:
1) измерив период между соседними импульсами.
2) измерив количество импульсов за единицу времени.
В зависимости от требований выбирается тот или иной способ.
> Анти-шим это обратное извелечение информации из ШИМ, декодирование что-ли?
Да. Очень во многих областях/протоколах информация передается длительностью импульса/паузы.
> Правильные МК посмотрел. Купить в розницу незадорого, и собрать минимальный набор для отладки не получится.
Не знаю что в них правильного? В наличии нет, ценник конский, решение получится не универсальное, т.к. будет привязано к конкретному МК.
Сразу поставить ПЛИС, если программист не способен решить задачу без красивостей/правильностей в железе.
> Для того, чтобы сделать вывод о возможном пропуске
Вариантов много. Я часто один из свободных каналов захвата/сравнения использую для аппаратных таймаутов.
> Для меня интересным было время, которое тратится на дма, на вход в прерывание, на синхронизацию, время сохранности результата в регистре.
Это правильные интересы. У вас ядро популярное. Советую книги Джозефа Ю - зачитаться.
-
2 минуты назад, jcxz сказал:
Да уж... Видимо вы из тех, кто на каждую минимальную функцию (типа захвата фронта/спада) ставит по отдельному процессору.
В этом вы ошибаетесь сильно: у меня все разрабатываемые контроллеры нафаршированы максимально) Под задачу я выбираю МК из типовых (что уже серийно используем, чтоб не раздувать номенклатуру), затем свободные ресурсы задействую для добавления функционала в перспективе.
Я максимально использую аппаратные возможности МК. "Хоть поллингом флагов" это не призыв к действию, а иллюстрация простоты задачи.
Для захвата ШИМ я использую два варианта:
1) с обработкой в реальном времени каждого импульса в прерывании;
2) с постобработкой порции или всего пакета импульсов в связке TIM+DMA.
ТС не поставил никакой практической задачи, поэтому конкретно ответить сложно, но это точно не "использовать нормальный МК". Когда мы подменяем принцип выбора подходящего под задачу камня, нытьем танцора, которому в "обычных" МК все жмет. Не хочу переходить на личности, но мимо заявления о существовании неких "нормальных" МК пройти не смог.
Итого, ТСу нужно зафиксировать задачу. Если это анти-ШИМ чего-то нешустрого, то советую освоить TIM+ISR. Для более шустрого, но не требовательного с реалтайму - TIM+DMA. Это закроет 99% типовых потребностей. Будут вопросы - поможем.
Если задачу экстремалить, т.е. повышать частоту до предела, то, разумеется, в этот предел упрешься, а там уже принципиально иные способы решения могут возникнуть. Вместо этого рекомендую освоить TIM_master+TIM_slave - добавит в копилку решений еще 0.99%
-
1
-
-
>Может не будем валить с больной головы на здоровую? Речь шла о фиксации длительности одиночных импульсов.
С одиночными импульсами вообще проблем никаких нет - хоть поллингом флагов CCR таймера.
Речь шла о захвате в пределе - в терминах ТС "с минимальной задержкой". Я понял, что речь идет о задержке между соседними импульсами.
>отсутствие информации, что такая потеря произошла.
И что делать с информацией, что потеря произошла? Какой практический смысл?
> была короткая иголка (в несколько тактов)
В таймере перед блоком захвата есть аппаратный фильтр - для борьбы с такими иголками)
> Поэтому при наличии всякого рода дребезгов, анализ посредством DMA на STM32 очень сложен.
Я борьбу с дребезгом поручаю аппаратному фильтру. Иначе "дребезги" разобьют в дребезги любую систему, борющуюся с ними программно.
Разве нет?))
Системы, типа, "я зафиксировала дребезг на входе поэтому работать дальше не буду" я рассматривать не готов)
> Тогда расскажите - как будете действовать в случае...
Вообще проблем не вижу. Недавно сдал систему захвата 12 каналов датчиков детонации с привязкой к углу возникновения с точностью 0.025 градуса. Помехи от частотника прут и по каналам захвата и от энкодера)) Есть и аппаратная борьба на входе МК (причем лайтовая, чтоб импульс не сдвинуть и не наврать с углом), и программная низкоуровневая, и программная высокоуровневая. Забавно, вообще все построил на EXTI-прерываниях. А точность получилась - мама не горюй - видно как вал скручивается в зависимости от нагрузки и оборотов)) Кста, есть программная компенсация задержки распространения сигнала во входных аналоговых цепях.
ШИМ-декодировать приходилось в драйвере приемника от ИК-пультов. Или в вызывной панели VIZIT. Или в работе с 1-wire устройствами. Вообще без проблем.
Итого: если не придумывать себе проблему, чтоб потом ее героически решить, то и проблемы не будет.
> ЗЫ: Или всё-таки в таймерах STM32 есть какой-то способ зарегистрировать факт потери события? Кто знает?
Я же сказал: задача фиксировать факт потери события в большинстве случаев не стоит.
Кто знает систему, где обработка потерь импульсов играет рояля?
-
Могут предложить такую задачку (если ТС не против):
1) Есть адресные светодиодные ленты (типа WS2811) - 4 шт.
2) Есть источник данных для этой светодиодной ленты.
3) Нужно сделать контроллер с одним входом (WS2811) и 4 выходами (WS2811).
4) На каждом выходе нужно индивидуально задать сколько светодиодов будет пропущено из потока.
Проще: нужно входные импульсы пропустить на выход, но первые 24*Ni (i от 1 до 4, Ni > 0) заменить на лог "0".
Будем считать, что импульсы со скважностью 2 и частотой 800кГц.
Я сделал такое на STM32F042 (аналог F030, на F030 тоже заработает). Контроллер позволяет данные для одной длинной светодиодной ленты поделить на сегменты с индивидуальным смещением - резко удобнее становится подключение.
Кста, одноканальный вариант вообще на Тини13 делал)
-
36 минут назад, jcxz сказал:
Кто? Очевидно программа на этом МК. И в чём именно проблема обработать?
Чушь. FIFO не может быть "на один элемент". По определению.
И как например хотя бы узнать, что произошло переполнение (была потеря события) с одним CCR? Не говоря уж о полноценной регистрации...
Идут импульсы/паузы в тактах: 1/1-1/2-1/1-1/1 и т.д. непрерывно. Сколько тактов стоит CPU вытащить эти данные из FIFO (со всеми флагами переполнения и т.п.)? Очевидно же, CPU не сможет обработать такой непрерывный поток. Очевидно же, DMA тоже может обеспечить поток, который CPU не сможет обработать.
Чушь - ок.
Отсутствие потери событий гарантируется архитектурой системы. Кто-то проектирует систему, где допускается потеря событий - я так не поступаю и другим не советую.
Предметнее проще: приведите пример задачи, где без "нормального" МК не обойтись. Я довольно сильно использую таймеры - пока все задачки решаются STM-совместимой таймерной периферий большинства популярных МК.
-
12 часов назад, ozforester сказал:
Как лучше поступить? Или я просто чего-то недочитал, и выдумал проблему на ровном месте?
Обрисуйте конкретную задачу - будет проще предложить решение.
Регистры CCR - это и есть FIFO на один элемент, далее - DMA (с характерным темпом не чаще 12 тактов CPU).
Не знаю зачем "нормальным" МК какие-то FIFO: ну наловишь импульсы "хоть в 1 такт" - дальше что? кто их будет способен обработать?
-
2 часа назад, Zlumd сказал:
Ремаппинг USART1 на PB6, PB7 не работает
А мне приходится их оба (USART1 и I2C1) включать, чтобы USART1 работал на PB6, PB7.
Ремаппинг TMR2 на PB8, PB9 не работает при IOMUX->remap_bit.tmr2_mux = 3
При IOMUX->remap_bit.tmr2_mux = 2 ремаппинг TMR2 на PB8, PB9 нормально работает, но почему не работает при 3 ?
Ремаппинг TMR9 на PB14, PB15 никакими ухищрениями не удалось заставить работать.
А разве TMR2 должен ремапиться на PB8/9 ?
"Non-timer peripherals has priority over timer peripherals". Нужно проверить, что на этих пинах нет никакой нетаймерной периферии.
Кста, в чем отличия _MUX и _GMUX регистров?
-
Упорядочены ли кадры с одним и тем же CAN ID?
в Controller Area Network (CAN)
Опубликовано · Пожаловаться
Полностью согласен. ID и его администрирование дает очень много полезных возможностей. Нельзя к нему так упрощенно относиться. Это и адресация, и фильтрация, и приоритеты, и какие-то поля данных.