Перейти к содержанию
    

Глобальный счетчик милисекунд.

Раньше, тоже делал счет миллисекунд из прерывания, но последнее время стал использовать такой способ

http://we.easyelectronics.ru/Soft/samyy-pr...nyy-taymer.html

Только максимальное значение миллисекунд, которое можно задать зависит от таймера.

А для сильно большой задержки, использую RTC, настроил что бы счетчик работал по секундам и считываю его, также. (только это относиться для stm32f1x, для stm32f4x RTC совсем другая )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Раньше, тоже делал счет миллисекунд из прерывания, но последнее время стал использовать такой способ

http://we.easyelectronics.ru/Soft/samyy-pr...nyy-taymer.html

Только максимальное значение миллисекунд, которое можно задать зависит от таймера.

А для сильно большой задержки, использую RTC, настроил что бы счетчик работал по секундам и считываю его, также. (только это относиться для stm32f1x, для stm32f4x RTC совсем другая )

 

у меня таймера не хватало. в Кинетесе они кривые. кроме LPTM. освободил LPTM. он 16-битный приходиться приращивать в прерывании

void LPTMR0_IRQHandler(void)
{
    LPTMR0_CSR |= LPTMR_CSR_TCF_MASK;
    
    ovf_count++;
    added_val = 0xFFFF * ovf_count;
}

uint32_t SYSTIME_GetSystemTime(void)
{    
    unsigned long cnt;
    LPTMR0_CNR = 0;       // write any value to the counter register so that it puts its present counter value into a temporary register
    cnt = LPTMR0_CNR;    // read the value from the temporary register
    return (cnt + added_val);
}

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Kinetis есть аппаратный таймер (FlexTimer Module (FTM)) 16 бит - это дает нам 65536 милисекунд до переполнения что конечно очень мало для нормальной работы.

Этого мало? Это позволяет делать/контролировать задержки до 65 секунд без какого либо контроля переполнения, в лоб, без бубнов и танцев. Если нужно делать задержки измеряемые в секундах (например 1000 секунд, или 10000000 секунд), то можно отдельный таймер аппаратный завести с тактом 1 мс и переполнением после 1000 мс, в прерывании ++globalSec . Или вообще использовать RTC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В K10 4-канальный 32-битный PIT (программируемый интервальный таймер) есть - делай счётчики интервалов какие хошь (; Впрочем, ТС сознался, что был не прав.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему SysTick не используете?

объяснил это в первом посте.

 

Этого мало? Это позволяет делать/контролировать задержки до 65 секунд без какого либо контроля переполнения, в лоб, без бубнов и танцев. Если нужно делать задержки измеряемые в секундах (например 1000 секунд, или 10000000 секунд), то можно отдельный таймер аппаратный завести с тактом 1 мс и переполнением после 1000 мс, в прерывании ++globalSec . Или вообще использовать RTC.

 

у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду.

 

 

 

В K10 4-канальный 32-битный PIT (программируемый интервальный таймер) есть - делай счётчики интервалов какие хошь

 

то же самое - у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду.

 

Впрочем, ТС сознался, что был не прав.

долгие годы игры в покер научили меня вовремя скидывать слабую руку.

 

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у него нет пределителя

Вы опять за старое.

У него есть период, и за счет периода вы создадите 1 мс.

С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++.

Для этого подойдет любой таймер, но есть же специальный SysTick. Почему его не используют некоторые?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы опять за старое.

У него есть период, и за счет периода вы создадите 1 мс.

С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++.

Писал же ТС, что у него сейчас так и есть, но он не хочет раз в 1 мс падать в прерывание, а хочет сделать аппаратный миллисекундный таймер.

 

 

у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду.
vs
16 бит - это дает нам 65536 милисекунд до переполнения
как это? 16 битный таймер дает переполнение через 65536 милисекунд, но тик у этого таймера не равен 1 мс???

Проблема решена, и слава богу!!! ;)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТС не умеет задавать такое значение в SysTick таймер, чтобы тот перезагружался с периодом 1 мс. Учиться, учиться и еще раз...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы опять за старое.

У него есть период, и за счет периода вы создадите 1 мс.

С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++.

Для этого подойдет любой таймер, но есть же специальный SysTick. Почему его не используют некоторые?

 

вы вообще читали тему? первый мой пост? ради чего была создана тема?

 

Я НЕ ХОЧУ ГЕНЕРИРОВАТЬ ПРЕРЫВАНИЯ КАЖДУЮ МИЛЛИСЕКУНДУ.

 

все. эту руку я сбрасываю.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, мои аргументы, что вы теряете 0.03% производительности, вам не понять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, мои аргументы, что вы теряете 0.03% производительности, вам не понять?

 

да хрен с ней спроизводительностью. хоть 5%. дело не в ней. у меня бегут важные таски. критические можно сказать. и я не хочу прерывать их каждую миллисекунду.может ничего страшного не произойдет. но зачем мне дополнительные, неоправданные как я считаю, риски?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я НЕ ХОЧУ ГЕНЕРИРОВАТЬ ПРЕРЫВАНИЯ КАЖДУЮ МИЛЛИСЕКУНДУ.

Вы можете объяснить почему? Это вполне естественная вещь для МК, но вы категорически ее отвергаете.

Вы бы поменьше секретничали, а то нам в соседних ветках достается, что за вас додумывают недосказанное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы можете объяснить почему?
зачем это объяснять? ТС и так уже всё объяснил. У меня было такое.... сделал таймер с тиком в 1 мс и отрубил прерывания. Полностью аппаратный миллисекундный таймер.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А через каждые 10 мс прерываться рискнете? Тоже нормальный период для RTOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...