Программирование ARM nRF52 TIMER Mon, September 27 2021  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF52 TIMER Печать
Добавил(а) microsin   

TIMER может работать в двух режимах: как таймер и как счетчик.

nRF52 TIMER block diagram fig01

Рис. 1. Блок/схема таймера/счетчика TIMER. Здесь n может быть от 0 до 3 или от 0 до 5, в зависимости от экземпляра TIMER (см. таблицу 1).

Примечание: непонятные термины и сокращения см. в Словарике [3].

Таймер/счетчик работает на высокой частоте тактов (HFCLK) и включает 4-разрядный прескалер (1/2X), который может делить входную частоту тактов таймера, поступающую от контроллера HFCLK. Выбор источника тактов между PCLK16M и PCLK1M автоматический, в соответствии с базовой частотой тактов TIMER, установленной прескалером. Базовая частота тактов TIMER всегда равна частоте 16 МГц, поделенной на значение прескалера.

Подсистема PPI [2] позволяет событию таймера/счетчика (TIMER event) активировать задачу (trigger task) любого другого системного периферийного устройства MCU серий nRF5x. PPI также позволяет функциям TIMER task/event генерировать периодические выходные сигналы и ШИМ (PWM) на любой из ножек GPIO [4]. Количество одновременно используемых входов/выходов ограничено количеством каналов GPIOTE [5].

TIMER может работать в двух режимах, как таймер (Timer mode) и как счетчик импульсов (Counter mode). В обоих режимах TIMER начинает работать при активации задачи START, и останавливает работу при активации задачи STOP. После того, как таймер был остановлен, он может продолжить свою работу повторной активацией задачи START. Когда работа таймера/счетчика была возобновлена, таймер продолжит работу от того состояния (значения счетчика), на котором он был ранее остановлен.

Интересно отметить, что у таймера/счетчика нет прямого доступа к регистру счетчика со стороны вычислительного ядра MCU. Т. е. у него нет регистра COUNTER, доступного для программы, это отличает TIMER от RTC [6]. Кроме того, TIMER не может тактироваться от низкой тактовой частоты LFCLK, и по сравнению с RTC потребляет больше энергии.

Timer mode. В режиме таймера внутренний регистр счетчика TIMER инкрементируется каждый тик частоты fTIMER, как было показано на рис. 1. Частота таймера получается из частоты тактов PCLK16M, как показано ниже, с использованием значений, указанных в регистре PRESCALER:

fTIMER = 16 МГц / (2PRESCALER)

Когда частота fTIMER меньше или равна 1 МГц, TIMER будет использовать для тактирования внутреннюю частоту PCLK1M вместо PCLK16M с целью снижения потребления энергии.

Counter mode. В режиме счетчика внутренний регистр счетчика TIMER инкрементируется каждый раз, когда активируется задача COUNT. Таким образом, в этом режиме частота таймера и прескалер не используются. Соответственно задача COUNT не имеет никакого эффекта в режиме таймера.

Максимальное значение TIMER конфигурируется изменением битовой ширины его счетчика в регистре BITMODE.

PRESCALER и BITMODE должны обновляться только когда таймер остановлен. Если эти регистры обновляются, когда TIMER запущен, то это может привести к непредсказуемому поведению.

Когда таймер при инкрементировании дошел до своего максимального значения, регистр счетчика переполнится, и TIMER будет автоматически считать, начиная с 0.

Регистр счетчика может быть очищен, т. е. его внутреннее значение явно установится в 0, путем активации задачи CLEAR.

В TIMER реализовано несколько регистров захвата/сравнения (capture/compare).

Независимо от настройки прескалера точность TIMER (разрешающая способность по времени) эквивалентна одному тику на частоте fTIMER, как показано на рис. 1.

Capture (захват). В TIMER реализована одна задача захвата для каждого из доступных регистров capture/compare (регистры CC[n]). Каждый раз, когда активируется задача CAPTURE[n], значение счетчика копируется в регистр CC[n].

Compare (сравнение). В TIMER реализовано по одному событию COMPARE на каждый из доступных регистров capture/compare (регистры CC[n]).

Событие COMPARE генерируется, когда счетчик инкрементируется, и после этого становится равным значению, которое находится в одном из регистров  CC[n]. Когда значение счетчика становится равным значению в регистре CC[n], генерируется соответствующее событие COMPARE[n].

BITMODE задает, сколько бит в регистре счетчика и регистре CC используется, когда выполняется сравнение. Другие биты будут игнорироваться.

Задержки задачи. После того, как TIMER был запущен, задача CLEAR, задача COUNT и задача STOP гарантированно вступят в действие в пределах одного периода тактов частоты PCLK16M.

Приоритет задачи. Если задача START и задача STOP активировались одновременно, т. е. в одном и том же периоде тактов PCLK16M, то приоритет получит задача STOP.

[Регистры TIMER]

Таблица 1. Экземпляры TIMER.

Баз. адрес Периф. устройство Экз. Описание Конфигурация
0x40008000 TIMER TIMER0 Таймер/счетчик 0 У этих таймеров 4 регистра CC (CC[0..3]).
0x40009000 TIMER1 Таймер/счетчик 1
0x4000A000 TIMER2 Таймер/счетчик 2
0x4001A000 TIMER3 Таймер/счетчик 3 У этих таймеров 6 регистров CC (CC[0..5]).
0x4001B000 TIMER4 Таймер/счетчик 4

Таблица 2. Обзор регистров TIMER.

Регистр Смещ. Описание
TASKS_START 0x000 Задача запуска таймера.
TASKS_STOP 0x004 Задача остановки таймера.
TASKS_COUNT 0x008 Задача инкремента таймера (только для режима счетчика, Counter mode).
TASKS_CLEAR 0x00C Задача очистки таймера.
TASKS_SUTDOWN 0x010 Задача отключения таймера.
TASKS_CAPTURE[0] 0x040 Задача захвата значения счетчика таймера в регистр CC[0].
TASKS_CAPTURE[1] 0x044 Задача захвата значения счетчика таймера в регистр CC[1].
TASKS_CAPTURE[2] 0x048 Задача захвата значения счетчика таймера в регистр CC[2].
TASKS_CAPTURE[3] 0x04C Задача захвата значения счетчика таймера в регистр CC[3].
TASKS_CAPTURE[4] 0x050 Задача захвата значения счетчика таймера в регистр CC[4].
TASKS_CAPTURE[5] 0x054 Задача захвата значения счетчика таймера в регистр CC[5].
EVENTS_COMPARE[0] 0x140 Событие совпадения сравнения счетчика и CC[0].
EVENTS_COMPARE[1] 0x144 Событие совпадения сравнения счетчика и CC[1].
EVENTS_COMPARE[2] 0x148 Событие совпадения сравнения счетчика и CC[2].
EVENTS_COMPARE[3] 0x14C Событие совпадения сравнения счетчика и CC[3].
EVENTS_COMPARE[4] 0x150 Событие совпадения сравнения счетчика и CC[4].
EVENTS_COMPARE[5] 0x154 Событие совпадения сравнения счетчика и CC[5].
SHORTS 0x200 Регистр шортката.
INTENSET 0x304 Разрешение прерываний.
INTENCLR 0x308 Запрет прерываний.
MODE 0x504 Выбор режима работы таймера.
BITMODE 0x508 Конфигурирование количества бит, используемого таймером.
PRESCALER 0x510 Регистр настройки предварительного делителя тактов счетчика.
CC[0] 0x540 Регистр захвата/сравнения 0.
CC[1] 0x544 Регистр захвата/сравнения 1.
CC[2] 0x548 Регистр захвата/сравнения 2.
CC[3] 0x54C Регистр захвата/сравнения 3.
CC[4] 0x550 Регистр захвата/сравнения 4.
CC[5] 0x554 Регистр захвата/сравнения 5.

Смещение адреса: 0x200. Запись 1 разрешает шорткат, запись 0 запрещает. Чтение показывает текущее состояние.

Биты регистра SHORTS:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                     L K J I H G     F E D C B A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW COMPARE0_CLEAR Шорткат между событием COMPARE[0] и задачей TASKS_CLEAR.
B RW COMPARE1_CLEAR Шорткат между событием COMPARE[1] и задачей TASKS_CLEAR.
C RW COMPARE2_CLEAR Шорткат между событием COMPARE[2] и задачей TASKS_CLEAR.
D RW COMPARE3_CLEAR Шорткат между событием COMPARE[3] и задачей TASKS_CLEAR.
E RW COMPARE4_CLEAR Шорткат между событием COMPARE[4] и задачей TASKS_CLEAR.
F RW COMPARE5_CLEAR Шорткат между событием COMPARE[5] и задачей TASKS_CLEAR.
G RW COMPARE0_STOP Шорткат между событием COMPARE[0] и задачей TASKS_STOP
H RW COMPARE1_STOP Шорткат между событием COMPARE[1] и задачей TASKS_STOP
I RW COMPARE2_STOP Шорткат между событием COMPARE[2] и задачей TASKS_STOP
J RW COMPARE3_STOP Шорткат между событием COMPARE[3] и задачей TASKS_STOP
K RW COMPARE4_STOP Шорткат между событием COMPARE[4] и задачей TASKS_STOP
L RW COMPARE5_STOP Шорткат между событием COMPARE[5] и задачей TASKS_STOP

Смещение адреса: 0x304. Запись 1 разрешает соответствующее прерывание. Запись 0 не оказывает никакого влияния. Чтение показывает состояние прерывания: 0 прерывание запрещено, 1 разрешено.

Биты регистра INTENSET:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                     F E D C B A                                
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW COMPARE0 Разрешение прерывания для события COMPARE[0]. См. EVENTS_COMPARE[0].
B RW COMPARE1 Разрешение прерывания для события COMPARE[1]. См. EVENTS_COMPARE[1].
C RW COMPARE2 Разрешение прерывания для события COMPARE[2]. См. EVENTS_COMPARE[2].
D RW COMPARE3 Разрешение прерывания для события COMPARE[3]. См. EVENTS_COMPARE[3].
E RW COMPARE4 Разрешение прерывания для события COMPARE[4]. См. EVENTS_COMPARE[4].
F RW COMPARE5 Разрешение прерывания для события COMPARE[5]. См. EVENTS_COMPARE[5].

Смещение адреса: 0x308. Запись 1 запрещает соответствующее прерывание. Запись 0 не оказывает никакого влияния. Чтение показывает состояние прерывания: 0 прерывание запрещено, 1 разрешено.

Биты регистра INTENCLR:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                     F E D C B A                                
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW COMPARE0 Запрет прерывания для события COMPARE[0]. См. EVENTS_COMPARE[0].
B RW COMPARE1 Запрет прерывания для события COMPARE[1]. См. EVENTS_COMPARE[1].
C RW COMPARE2 Запрет прерывания для события COMPARE[2]. См. EVENTS_COMPARE[2].
D RW COMPARE3 Запрет прерывания для события COMPARE[3]. См. EVENTS_COMPARE[3].
E RW COMPARE4 Запрет прерывания для события COMPARE[4]. См. EVENTS_COMPARE[4].
F RW COMPARE5 Запрет прерывания для события COMPARE[5]. См. EVENTS_COMPARE[5].

Смещение адреса: 0x504.

Биты регистра MODE:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                                             A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW MODE 0, Timer: работа в режиме таймера.
1, Counter: работа в режиме счетчика событий, устарело.
2, LowPowerCounter: выбор режима счетчика с пониженным энергопотреблением.

Смещение адреса: 0x508. Конфигурирует количество бит, которое использует TIMER.

Биты регистра BITMODE:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                                             A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW BITMODE 0, 16Bit: используется 16 разрядов.
1, 08Bit: используется 8 разрядов.
2, 24Bit: используется 24 разряда.
3, 32Bit: используется 32 разряда.

Смещение адреса: 0x510. Конфигурирует коэффициент деления прескалера.

Биты регистра PRESCALER:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id                                                         A A A A
Reset 0x00000004 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

Назначение бит:

Id RW Поле Описание
A RW PRESCALER Значение прескалера в диапазоне от 0 до 9.

Смещение адреса: 0x540 + 4*n.

Биты регистра CC:

№ бита 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
Id A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Назначение бит:

Id RW Поле Описание
A RW CC Значение прескалера в диапазоне от 0 до 9.

[Электрические параметры TIMER]

Символ Описание min Typ MAX Ед.
ITIMER1M Ток потребления в при работе от тактовой частоты 1 МГц (PCLK1M) 3 5 8 мкА
ITIMER16M Ток потребления в при работе от тактовой частоты 16 МГц (PCLK16M) 50 70 120
tTIMER,START Время от выдачи задачи START до момента начала счета таймера   0.25   мкс

[Ссылки]

1. TIMER timer/counter nRF52832 site:nordicsemi.com.
2. nRF5x PPI: Programmable Peripheral Interconnect.
3. nRFxx: аббревиатуры и термины.
4. nRF5x: порты GPIO.
5. nRF5x GPIOTE: события и задачи GPIO.
6nRF52: счетчик реального времени RTC.

 

Добавить комментарий


Защитный код
Обновить

Top of Page