Jenya7, вы по все видимости начинающий разработчик - прислушайтесь к советам опытных МК-программистов.
Зачем вам аппаратный таймер, если вы от него даже прерываний боитесь? Это две крайности.
Нужно сделать аппаратный таймер для счета программного счетчика с интервалом 1 или 10 мс.
Затем все миллисекундные задержки и выше делать программно. Только так.
Если у вас какая-то неприязнь к такому решению, то вы в чем-то заблуждаетесь - можете высказать свои "фи", и мы вас переубедим.
Повторюсь, у Cortex-ов есть специальный таймер SysTick, и 99% проектов использует его
для миллисекундных и выше задержек, с программным отсчетом времени.
Задержки на микросекунды и ниже уже могут потребовать аппаратный таймер.
Использование аппаратного таймера жестко привязывает проект к данной архитектуре и данному камню - проект будет
слабо переносимым и склонным к аппаратным конфликтам с другими библиотеками и т.п.
Насколько я понимаю, ТС хочет сделать некую инициализацию, чтоб потом вычитывать из некого регистра число, равное числу миллисекунд.
Желательно, чтоб регистр был 32-битным. Вроде, у LPC17xx таймеры были 32 битными с 32-битным предделителем.
Цитата(Jenya7 @ Jun 13 2018, 12:25)
у меня есть критические секции. можно сказать очень критические. я не могу их сделать атомик, мне другие прерывания важны.
У Cortex-M есть NVIC, который может делать вложенные прерывания с приоритетами.
Если 32-битная переменная выровненная, то доступ к ней будет атомарным.
Но я так понял, что из счетчика миллисекунд бы будете только вычитывать.