Автор |
Съобщение |
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1953
|
Настройка на таймери
Трябва ми "точен" интервал от време. Направил съм таймер, който щрака на необходимото време, но има малка разлика в това, което съм задал и това, което трябва да е. Става дума за 2-3us при интервал 10ms, логично е прекъсвания, вход във функцията за обработка и т.н. В конкретния случай не много, но може да се наложи да се намали времето таймера до 100us. Какъв е правилния начин да го настроя така, че винаги първата инструкция/ред след входа в прекъсването да се изпълнява точно навреме? След това мога да измеря останала част от кода за колко време се изпълнява и да коригирам времето.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Сря Апр 22, 2020 7:18 am |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Настройка на таймери
Предполагам някаква софтуерна имплементация (дори и да има хардуерен таймер като времева база). С този таймер се опитваш да докараш периодични "софтуерни" събития с минимален джитер или таймера се стартира по някакво събитие и искаш да получиш "софтуерното" събитие след точно определен интервал с гарантирано минимално отклонение? Но ако ще дялкаш времето инструкция по инструкция, от какъв зор? МЦУ-то няма сободен или досттъчно ресурс или на теб не ти стига вътъка?
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Апр 22, 2020 8:51 am |
|
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1953
|
Re: Настройка на таймери
Моя грешка - "железен" е таймера.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Сря Апр 22, 2020 9:16 am |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27949 Местоположение: София
|
Re: Настройка на таймери
Това повече зависи от желязото, какъв е контролера?
|
Сря Апр 22, 2020 9:26 am |
|
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1953
|
Re: Настройка на таймери
MCU-то е lpc54605, но въпросът е принципен. Мога да мърдам пин и да гледам каква е честотата, респективно периода. Искам да разбера колко е времето между щракването на таймера и мръдването на пина и дали това време е постоянно.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Сря Апр 22, 2020 9:43 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: Настройка на таймери
ако "заключиш" веднага прекъсванията ще зависи от оптимизацията на фунцията
_________________ main[-1u]={1};
|
Сря Апр 22, 2020 9:48 am |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Настройка на таймери
Понеже говориш и за прекъсвания, явно "мъдаш" пина с някакъв код. Щото ако задачата е мърдане на пина само, може и изцяло хардуерно(без намесата на ядрото и код някакъв) да го докараш с това МЦУ. Пина само за измерванията ли го "мърдаш"?
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Апр 22, 2020 9:56 am |
|
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1953
|
Re: Настройка на таймери
Само за измерване.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Сря Апр 22, 2020 10:02 am |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27949 Местоположение: София
|
Re: Настройка на таймери
Принципно пак зависи от контролера, ако имаш отделни вектори на прекъсване трябва да си сигурен че този е с най-голям приоритет, и/или другите са забранени докато обработва този вектор, зависи как са реализирани прекъсванията. Ако имаш един вектор за всички както е в малките пликове, трябва да си сигурен че първо проверяваш този флаг. Отделно трябва да си сигурен какво прави компилатора при прекъсване, т.е.какъв код има още извън твоя, дали там няма нещо което да създава неопределеност. Най вече ако мериш подхода е софтуерен, ако ти дава прекъсване на определена стойност няма голямо значение кога ще влезеш, достатъчно е да се офсетнеш с текущото му състояние. Ако това не те устройва може да помислиш как да използваш хардуерните ресурси за да решиш задачата. С тоя контролер не съм запознат и не мога да ти кажа как би могло да стане, трябва да се прочете малко.
|
Сря Апр 22, 2020 10:10 am |
|
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 1:01 pm Мнения: 1952 Местоположение: Варна
|
Re: Настройка на таймери
Не ми се задълбава. В общи линии, това което ToHu казва е така. Малко по-конкретно: И директно от извора: https://community.arm.com/developer/ip- ... processors...
_________________ Най-опасният враг на истината и свободата е мнозинството.
|
Сря Апр 22, 2020 10:43 am |
|
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1953
|
Re: Настройка на таймери
Май намерих някакво решение. Изхода на таймера, който ползвам може да се "закара" до входа на друг таймер вътрешно Ще чета документацията за да разбера как да организирам измерването. Поне ще се получи "желязно".
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Сря Апр 22, 2020 11:02 am |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27949 Местоположение: София
|
Re: Настройка на таймери
аз не разбрах точно каква задача решаваш, ако споделиш може да ни хрумне нещо.
|
Сря Апр 22, 2020 11:03 am |
|
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 8:39 pm Мнения: 1953
|
Re: Настройка на таймери
Трябва да имам точен момент на задействане на таймера в абсолютно време. Сега го имам плюс "нещо". Искам да определя колко е това "нещо" и дали е постоянно.
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!
|
Сря Апр 22, 2020 11:07 am |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 27949 Местоположение: София
|
Re: Настройка на таймери
Вярно че не съм спал много ама пак не схванах трябва ти точният момент в който таймера е генерирал прекъсване или таймера е спрян и ти искаш да го пуснеш в един точно определен момент, или пък нещо съвсем друго. Въпросът е доста основополагащ при решаването на тази задача, както ти писах, ако те интересува момента в който таймера е генерирал прекъсване просто когато влезеш в обслужването на това прекъсване го четеш, и коригираш текущото време с текущата стойност на тйамера, примерно ако клока ти е 1 us и таймера ти е на 62, коригираш времето на прочитане със 62 us + инструкциите за прочитане на таймера или текущото време зависи кое чете първо. Тази задача се решава чисто софтуерно и няма нужда от хардуер друг, разбира се ако не говорим за много малки времена и препълването на таймера може да отнеме по-малко време от нужното за обработка. Съвсем друг е въпроса ако като казваш да знаеш, имаш в предвид че точно в този момент трябва да направиш нещо друго, да речем ако правиш софтуерен PWM и по прекъсване инкрементваш брояча на PWM /което не виждам много смисъл да е така, но да предположим че е така реализирано/ тогава вече ако не го правиш точно на време ще ти се появи джитер в коефициента на запълване, а и в честотата, и ако е такъв случая и искаш да елиминираш нещо такова ще трябва да търсиш хардуерно решение при условие че времето за изпълнение на кода ти е в някакви мин/мах граници от които не можеш да излезеш.
|
Сря Апр 22, 2020 11:19 am |
|
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 7:04 pm Мнения: 2580 Местоположение: Велико Търново / София
|
Re: Настройка на таймери
Ами ако е на един вектор и да е с най-голямият приоритет, ако прекъсването дойде докато се изпълнява нещо друго с по-нисък приоритет, трябва да влезе пак в прекъсване, но в обичайната ситуация когато е в прекъсване не може да се влиза повторно. Трябва да се промени това. Иначе другият вариант е на новите пико-ве има прекъсвания с нисък и висок приоритет. И тогава да се сложи на висок приоритет.
|
Чет Апр 23, 2020 1:01 am |
|
|