Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Настройка на таймери
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=17250
Страница 1 от 2

Автор:  syscop [ Сря Апр 22, 2020 8:18 am ]
Заглавие:  Настройка на таймери

Трябва ми "точен" интервал от време. Направил съм таймер, който щрака на необходимото време, но има малка разлика в това, което съм задал и това, което трябва да е. Става дума за 2-3us при интервал 10ms, логично е прекъсвания, вход във функцията за обработка и т.н. В конкретния случай не много, но може да се наложи да се намали времето таймера до 100us.
Какъв е правилния начин да го настроя така, че винаги първата инструкция/ред след входа в прекъсването да се изпълнява точно навреме?
След това мога да измеря останала част от кода за колко време се изпълнява и да коригирам времето.

Автор:  Zdrav [ Сря Апр 22, 2020 9:51 am ]
Заглавие:  Re: Настройка на таймери

Цитат:
"направил съм таймер"

Предполагам някаква софтуерна имплементация (дори и да има хардуерен таймер като времева база).
С този таймер се опитваш да докараш периодични "софтуерни" събития с минимален джитер или таймера се стартира по някакво събитие и искаш да получиш "софтуерното" събитие след точно определен интервал с гарантирано минимално отклонение?
Но ако ще дялкаш времето инструкция по инструкция, от какъв зор? МЦУ-то няма сободен или досттъчно ресурс или на теб не ти стига вътъка?

Автор:  syscop [ Сря Апр 22, 2020 10:16 am ]
Заглавие:  Re: Настройка на таймери

Моя грешка - "железен" е таймера.

Автор:  ToHu [ Сря Апр 22, 2020 10:26 am ]
Заглавие:  Re: Настройка на таймери

Това повече зависи от желязото, какъв е контролера?

Автор:  syscop [ Сря Апр 22, 2020 10:43 am ]
Заглавие:  Re: Настройка на таймери

MCU-то е lpc54605, но въпросът е принципен. Мога да мърдам пин и да гледам каква е честотата, респективно периода. Искам да разбера колко е времето между щракването на таймера и мръдването на пина и дали това време е постоянно.

Автор:  TheWizard [ Сря Апр 22, 2020 10:48 am ]
Заглавие:  Re: Настройка на таймери

ако "заключиш" веднага прекъсванията ще зависи от оптимизацията на фунцията

Автор:  Zdrav [ Сря Апр 22, 2020 10:56 am ]
Заглавие:  Re: Настройка на таймери

syscop написа:
MCU-то е lpc54605, но въпросът е принципен. Мога да мърдам пин и да гледам каква е честотата, респективно периода. Искам да разбера колко е времето между щракването на таймера и мръдването на пина и дали това време е постоянно.


Понеже говориш и за прекъсвания, явно "мъдаш" пина с някакъв код. Щото ако задачата е мърдане на пина само, може и изцяло хардуерно(без намесата на ядрото и код някакъв) да го докараш с това МЦУ.
Пина само за измерванията ли го "мърдаш"?

Автор:  syscop [ Сря Апр 22, 2020 11:02 am ]
Заглавие:  Re: Настройка на таймери

Само за измерване.

Автор:  ToHu [ Сря Апр 22, 2020 11:10 am ]
Заглавие:  Re: Настройка на таймери

Принципно пак зависи от контролера, ако имаш отделни вектори на прекъсване трябва да си сигурен че този е с най-голям приоритет, и/или другите са забранени докато обработва този вектор, зависи как са реализирани прекъсванията. Ако имаш един вектор за всички както е в малките пликове, трябва да си сигурен че първо проверяваш този флаг.
Отделно трябва да си сигурен какво прави компилатора при прекъсване, т.е.какъв код има още извън твоя, дали там няма нещо което да създава неопределеност.
Най вече ако мериш подхода е софтуерен, ако ти дава прекъсване на определена стойност няма голямо значение кога ще влезеш, достатъчно е да се офсетнеш с текущото му състояние. Ако това не те устройва може да помислиш как да използваш хардуерните ресурси за да решиш задачата.
С тоя контролер не съм запознат и не мога да ти кажа как би могло да стане, трябва да се прочете малко.

Автор:  Zdrav [ Сря Апр 22, 2020 11:43 am ]
Заглавие:  Re: Настройка на таймери

syscop написа:
Само за измерване.

Не ми се задълбава. В общи линии, това което ToHu казва е така.
Малко по-конкретно:
Цитат:
The Cortex-M4 Technical Reference Manual (TRM) states that the interrupt latency on entry is 12 cycles, plus a possible 17 cycles more for Cortex-M4 with Floating-point Unit (FPU) implemented. The TRM also states that the latency on exit is ten cycles, plus a possible 17 cycles more for Cortex-M4 with FPU.

И директно от извора:
https://community.arm.com/developer/ip- ... processors
Цитат:
The interrupt latency listed in table 1 makes a number of simple assumptions:

The memory system has zero wait state (and with resources not being used by other bus masters)
The system level design of the chip does not add delay in the interrupt signal connections between the interrupt sources and the processor
The Interupt service is not blocked by another current running exception/interrupt service
For Cortex-M4, with FPU enabled, the lazy stacking feature is enabled (this is the default)
The current executing instruction is not doing an unaligned transfer/bitband transfer (which can take 1 extra transfer cycle)


...

Автор:  syscop [ Сря Апр 22, 2020 12:02 pm ]
Заглавие:  Re: Настройка на таймери

Май намерих някакво решение. Изхода на таймера, който ползвам може да се "закара" до входа на друг таймер вътрешно :) Ще чета документацията за да разбера как да организирам измерването. Поне ще се получи "желязно".

Автор:  ToHu [ Сря Апр 22, 2020 12:03 pm ]
Заглавие:  Re: Настройка на таймери

аз не разбрах точно каква задача решаваш, ако споделиш може да ни хрумне нещо.

Автор:  syscop [ Сря Апр 22, 2020 12:07 pm ]
Заглавие:  Re: Настройка на таймери

Трябва да имам точен момент на задействане на таймера в абсолютно време. Сега го имам плюс "нещо". Искам да определя колко е това "нещо" и дали е постоянно.

Автор:  ToHu [ Сря Апр 22, 2020 12:19 pm ]
Заглавие:  Re: Настройка на таймери

Вярно че не съм спал много ама пак не схванах :) трябва ти точният момент в който таймера е генерирал прекъсване или таймера е спрян и ти искаш да го пуснеш в един точно определен момент, или пък нещо съвсем друго. Въпросът е доста основополагащ при решаването на тази задача, както ти писах, ако те интересува момента в който таймера е генерирал прекъсване просто когато влезеш в обслужването на това прекъсване го четеш, и коригираш текущото време с текущата стойност на тйамера, примерно ако клока ти е 1 us и таймера ти е на 62, коригираш времето на прочитане със 62 us + инструкциите за прочитане на таймера или текущото време зависи кое чете първо. Тази задача се решава чисто софтуерно и няма нужда от хардуер друг, разбира се ако не говорим за много малки времена и препълването на таймера може да отнеме по-малко време от нужното за обработка.
Съвсем друг е въпроса ако като казваш да знаеш, имаш в предвид че точно в този момент трябва да направиш нещо друго, да речем ако правиш софтуерен PWM и по прекъсване инкрементваш брояча на PWM /което не виждам много смисъл да е така, но да предположим че е така реализирано/ тогава вече ако не го правиш точно на време ще ти се появи джитер в коефициента на запълване, а и в честотата, и ако е такъв случая и искаш да елиминираш нещо такова ще трябва да търсиш хардуерно решение при условие че времето за изпълнение на кода ти е в някакви мин/мах граници от които не можеш да излезеш.

Автор:  slav4o.com [ Чет Апр 23, 2020 2:01 am ]
Заглавие:  Re: Настройка на таймери

Ами ако е на един вектор и да е с най-голямият приоритет, ако прекъсването дойде докато се изпълнява нещо друго с по-нисък приоритет, трябва да влезе пак в прекъсване, но в обичайната ситуация когато е в прекъсване не може да се влиза повторно. Трябва да се промени това.
Иначе другият вариант е на новите пико-ве има прекъсвания с нисък и висок приоритет. И тогава да се сложи на висок приоритет.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/