jenya7 0 13 июня, 2018 Опубликовано 13 июня, 2018 (изменено) · Жалоба У Kinetis есть 64-х битный lifetimer на базе PIT. Так что хватит на всю жизнь с точностью в 16 ns PIT не имеет пределителя. его невозможно настроить на 1 милисекундный тик. можно через второй таймер но второй таймер генерирует прерывание - а я этого хочу избежать. // Timer 2 PIT_LDVAL2 = 0x00000009; // setup Timer 2 for 10 counts PIT_TCTRL2 = TIE; // enable Timer 2 interrupt PIT_TCTRL2 |= CHN; // chain Timer 2 to Timer 1 PIT_TCTRL2 |= TEN; // start Timer 2 // Timer 1 PIT_LDVAL1 = 0x23C345FF; // setup Timer 1 for 600 000 000 cycles PIT_TCTRL1 = TEN; // start Timer 1 Изменено 13 июня, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба PIT не имеет пределителя. его невозможно настроить на 1 милисекундный тик. 2 AlexandrY: неужто у супер-пупер кинетиса нету таймера с хотя-бы 20-битным прескалером? или возможности использования в качестве такого прескалера другого таймера (concatenating)? :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба PIT не имеет пределителя. его невозможно настроить на 1 милисекундный тикЧто мешает считать в тиках таймера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба Это очень удобно и работать с переменной просто но мне не нравиться парадигма прерывания програмы каждую милисекунду. Допустим, тактовая частота процессора 120 МГц. На вход в прерывание и выход тратим по 12 тактов. На инкремент счетчика, пусть, еще 12 тактов. Итого: 36 / 120 000 = 0,0003 Вы боитесь потерять производительность на 0,03%? :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба 2 AlexandrY: неужто у супер-пупер кинетиса нету таймера с хотя-бы 20-битным прескалером? или возможности использования в качестве такого прескалера другого таймера (concatenating)? :smile3046: Так это и есть после конкатенации. Но при этом атомарное чтение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба Допустим, тактовая частота процессора 120 МГц. На вход в прерывание и выход тратим по 12 тактов. На инкремент счетчика, пусть, еще 12 тактов. Итого: 36 / 120 000 = 0,0003 Вы боитесь потерять производительность на 0,03%? :rolleyes: я не боюсь потерять производительность. я не хочу чтоб у меня прерывание молотило кажую милисекунду. если вам это не мешает то вы счастливый человек. :) Что мешает считать в тиках таймера?это типа шутка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба я не боюсь потерять производительность. я не хочу чтоб у меня прерывание молотило кажую милисекунду. если вам это не мешает то вы счастливый человек. :) Как может мешать нечто с нагрузкой 0,03%? :laughing: Из-за неоптимального кода можно потерять куда больше. Прерывание лишнего тока не ест, помех не создает. Все ОС используют прерывание от системного таймера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба Как может мешать нечто с нагрузкой 0,03%? :laughing: Из-за неоптимального кода можно потерять куда больше. Прерывание лишнего тока не ест, помех не создает. Все ОС используют прерывание от системного таймера. у меня есть критические секции. можно сказать очень критические. я не могу их сделать атомик, мне другие прерывания важны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба Jenya7, вы по все видимости начинающий разработчик - прислушайтесь к советам опытных МК-программистов. Зачем вам аппаратный таймер, если вы от него даже прерываний боитесь? Это две крайности. Нужно сделать аппаратный таймер для счета программного счетчика с интервалом 1 или 10 мс. Затем все миллисекундные задержки и выше делать программно. Только так. Если у вас какая-то неприязнь к такому решению, то вы в чем-то заблуждаетесь - можете высказать свои "фи", и мы вас переубедим. Повторюсь, у Cortex-ов есть специальный таймер SysTick, и 99% проектов использует его для миллисекундных и выше задержек, с программным отсчетом времени. Задержки на микросекунды и ниже уже могут потребовать аппаратный таймер. Использование аппаратного таймера жестко привязывает проект к данной архитектуре и данному камню - проект будет слабо переносимым и склонным к аппаратным конфликтам с другими библиотеками и т.п. Насколько я понимаю, ТС хочет сделать некую инициализацию, чтоб потом вычитывать из некого регистра число, равное числу миллисекунд. Желательно, чтоб регистр был 32-битным. Вроде, у LPC17xx таймеры были 32 битными с 32-битным предделителем. у меня есть критические секции. можно сказать очень критические. я не могу их сделать атомик, мне другие прерывания важны. У Cortex-M есть NVIC, который может делать вложенные прерывания с приоритетами. Если 32-битная переменная выровненная, то доступ к ней будет атомарным. Но я так понял, что из счетчика миллисекунд бы будете только вычитывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба у меня есть критические секции. можно сказать очень критические. я не могу их сделать атомик, мне другие прерывания важны. Такие критические, что 0,3 мкс не могут подождать? Не верю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба можно сказать очень критические Можете подробнее рассказать о них? Это не норма, такие вещи нужно делать аппаратно и/или подбирать соответствующее аппаратное решение. Я уже 10 лет не пользуюсь запретом/разрешением прерываний, а проектов сделал очень много. ЧЯДНТ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба adnega так что вы предлагаете? я честно говоря так и не понял. по моему вот этого Нужно сделать аппаратный таймер для счета программного счетчика с интервалом 1 или 10 мс.я и пытаюсь добиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба это типа шутка? Не шутка. Так все и делают... кроме вас почему-то... :laughing: Jenya7, вы по все видимости начинающий разработчик - прислушайтесь к советам опытных МК-программистов. Ага, уже лет N как начинающий и всё не могущий начать :biggrin: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба по моему вот этогоя и пытаюсь добиться. Дык, настраиваете SysTick на генерацию прерываний с интервалом 1 мс, а в обработчике прерывания делаете maintimer++; , где maintimer - 32-битная переменная, в которой будут лежать миллисекунды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 июня, 2018 Опубликовано 13 июня, 2018 · Жалоба Дык, настраиваете SysTick на генерацию прерываний с интервалом 1 мс, а в обработчике прерывания делаете maintimer++; , где maintimer - 32-битная переменная, в которой будут лежать миллисекунды. мда... ну вобщем тему можно закрывать. признаюсь был не прав. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться