Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
Настройка на таймери 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

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

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Сря Апр 22, 2020 7:18 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 1:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: Настройка на таймери
Цитат:
"направил съм таймер"

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

_________________
Най-опасният враг на истината и свободата е мнозинството.


Сря Апр 22, 2020 8:51 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 8:39 pm
Мнения: 1953
Мнение Re: Настройка на таймери
Моя грешка - "железен" е таймера.

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Сря Апр 22, 2020 9:16 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: Настройка на таймери
Това повече зависи от желязото, какъв е контролера?


Сря Апр 22, 2020 9:26 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 8:39 pm
Мнения: 1953
Мнение Re: Настройка на таймери
MCU-то е lpc54605, но въпросът е принципен. Мога да мърдам пин и да гледам каква е честотата, респективно периода. Искам да разбера колко е времето между щракването на таймера и мръдването на пина и дали това време е постоянно.

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Сря Апр 22, 2020 9:43 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Настройка на таймери
ако "заключиш" веднага прекъсванията ще зависи от оптимизацията на фунцията

_________________
main[-1u]={1};


Сря Апр 22, 2020 9:48 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 1:01 pm
Мнения: 1952
Местоположение: Варна
Мнение Re: Настройка на таймери
syscop написа:
MCU-то е lpc54605, но въпросът е принципен. Мога да мърдам пин и да гледам каква е честотата, респективно периода. Искам да разбера колко е времето между щракването на таймера и мръдването на пина и дали това време е постоянно.


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

_________________
Най-опасният враг на истината и свободата е мнозинството.


Сря Апр 22, 2020 9:56 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 8:39 pm
Мнения: 1953
Мнение Re: Настройка на таймери
Само за измерване.

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Сря Апр 22, 2020 10:02 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: Настройка на таймери
Принципно пак зависи от контролера, ако имаш отделни вектори на прекъсване трябва да си сигурен че този е с най-голям приоритет, и/или другите са забранени докато обработва този вектор, зависи как са реализирани прекъсванията. Ако имаш един вектор за всички както е в малките пликове, трябва да си сигурен че първо проверяваш този флаг.
Отделно трябва да си сигурен какво прави компилатора при прекъсване, т.е.какъв код има още извън твоя, дали там няма нещо което да създава неопределеност.
Най вече ако мериш подхода е софтуерен, ако ти дава прекъсване на определена стойност няма голямо значение кога ще влезеш, достатъчно е да се офсетнеш с текущото му състояние. Ако това не те устройва може да помислиш как да използваш хардуерните ресурси за да решиш задачата.
С тоя контролер не съм запознат и не мога да ти кажа как би могло да стане, трябва да се прочете малко.


Сря Апр 22, 2020 10:10 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 1:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 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)


...

_________________
Най-опасният враг на истината и свободата е мнозинството.


Сря Апр 22, 2020 10:43 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 8:39 pm
Мнения: 1953
Мнение Re: Настройка на таймери
Май намерих някакво решение. Изхода на таймера, който ползвам може да се "закара" до входа на друг таймер вътрешно :) Ще чета документацията за да разбера как да организирам измерването. Поне ще се получи "желязно".

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Сря Апр 22, 2020 11:02 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: Настройка на таймери
аз не разбрах точно каква задача решаваш, ако споделиш може да ни хрумне нещо.


Сря Апр 22, 2020 11:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 8:39 pm
Мнения: 1953
Мнение Re: Настройка на таймери
Трябва да имам точен момент на задействане на таймера в абсолютно време. Сега го имам плюс "нещо". Искам да определя колко е това "нещо" и дали е постоянно.

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Сря Апр 22, 2020 11:07 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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


Сря Апр 22, 2020 11:19 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2580
Местоположение: Велико Търново / София
Мнение Re: Настройка на таймери
Ами ако е на един вектор и да е с най-голямият приоритет, ако прекъсването дойде докато се изпълнява нещо друго с по-нисък приоритет, трябва да влезе пак в прекъсване, но в обичайната ситуация когато е в прекъсване не може да се влиза повторно. Трябва да се промени това.
Иначе другият вариант е на новите пико-ве има прекъсвания с нисък и висок приоритет. И тогава да се сложи на висок приоритет.

_________________
https://github.com/slav4ocom/


Чет Апр 23, 2020 1:01 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни