Программирование ARM AT91SAM7 Periodic Interval Timer (PIT) Thu, November 21 2024  

Поделиться

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

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


AT91SAM7 Periodic Interval Timer (PIT) Печать
Добавил(а) microsin   

Периодический интервальный таймер (Periodic Interval Timer, PIT) в микроконтроллерах ARM7 обычно используется для планировщика операционной системы, или отсчета реального времени в программе. Он разработан с целью обеспечения максимальной точности и эффективного управления.

ARM7 PIT block diagram fig15 2

Рис. 15-1. Блок-схема внутреннего устройства PIT.

Чаще всего PIT настраивается для генерации периодических прерываний, используемых операционными системами. PIT предоставляет программируемый переполняемый счетчик с возможность сброса при чтении. Счетчик построен на основе 2 счетчиков: 20-битный CPIV и 12-битный Periodic Interval Counter, PICNT. Оба счетчика работают на частоте Master Clock / 16.

Первый 20-битный счетчик CPIV инкрементируется от 0 до запрограммированного значения переполнения, которое устанавливается в поле PIV регистра режима (Mode Register, PIT_MR). Когда счетчик CPIV достигает этого значения, он сбрасывается в 0, и в этот момент инкрементирует счетчик PICNT. Бит состояния PITS в регистре Status Register (PIT_SR) устанавливается, и это может вызвать срабатывание прерывания, если оно разрешено (флагом PITIEN в регистре PIT_MR).

Запись нового значения PIV в регистр PIT_MR не сбрасывает и не перезапускает счетчики.

Когда CPIV и PICNT получены чтением регистра интервала (Periodic Interval Value Register, PIT_PIVR), счетчик переполнения (PICNT) сбрасывается, и флаг PITS очищается, что работает как подтверждение прерывания. Значение PICNT дает количество периодических интервалов, которое прошло с момента последнего чтения PIT_PIVR.

Когда значения CPIV и PICNT получены чтением PIT_PIIR, это не оказывает влияние ни на счетчики CPIV и PICNT, ни на бит PITS. Например, профайлер может читать PIT_PIIR без очистки ожидающего обработки прерывания, в то время как обработчик прерывания таймера очистит прерывание чтением PIT_PIVR.

PIT может быть разрешен или запрещен записью бита PITEN в регистре PIT_MR (при сбросе PIT по умолчанию запрещен). Бит PITEN становится эффективным только тогда, когда  значение счетчика CPIV равно 0. На рис. 15-2 иллюстрирован процесс счета PIT. После сброса бита разрешения PIT (PITEN= 0), CPIV продолжает счет до достижения значения в поле PIV, и затем сбрасывается. PIT снова начнет счет только когда опять будет установлен бит PITEN.

PIT останавливается, когда ядро входит в режим отладки (debug state).

ARM7 enable disable PIT fig15 2

Рис. 15-2. Разрешение/запрет PIT с помощью бита PITEN.

[Интерфейс программирования PIT]

В таблице показан общий список всех регистров, используемых для доступа к PIT. Смещение адресов регистров отсчитывается относительно адреса 0xFFFFFD30.

Таблица 15-1. Регистры PIT.

Смещение Регистр Имя Доступ Сброс
0x0000 Mode Register (регистр режима) PIT_MR R/W 0x000FFFFF
0x0004 Status Register (регистр состояния) PIT_SR R 0x00000000
0x0008 Periodic Interval Value Register (значение счетчиков) PIT_PIVR R 0x00000000
0x000C Periodic Interval Image Register (образ счетчиков) PIT_PIIR R 0x00000000

Регистр режима PIT (Periodic Interval Timer Mode Register). Работает и на чтение, и на запись.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
- - - - - - PITIEN PITEN - - - - PIV
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
PIV

PIV: Periodic Interval Value (величина интервала периода счета). Определяет значение, которое сравнивается с внутренним 20-битным счетчиком интервала (CPIV). Период равен (PIV + 1).

PITEN: Period Interval Timer Enabled (разрешение PIT).
0 = работа PIT будет запрещена, как только счетчик CPIV достигнет при счете до значения, запрограммированного в поле PIV.
1 = PIT разрешен.

PITIEN: Periodic Interval Timer Interrupt Enable (разрешение прерывания PIT).
0 = установка бита PITS в регистре PIT_SR не вызовет генерацию прерывания.
1 = установка бита PITS в регистре PIT_SR запустит прерывание PIT.

Регистр состояния PIT (Periodic Interval Timer Status Register). Работает только на чтение, и содержит только один бит PITS.

   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   
- - - - - - - - - - - - - - - PITS

PITS: Periodic Interval Timer Status (бит состояния PIT).
0 = счетчик PIT не достиг значения PIV после последнего чтения PIT_PIVR.
1 = счетчик PIT при счете достиг значения PIV после последнего чтения PIT_PIVR.

Значения счетчиков PIT (Periodic Interval Timer Value Register). Работает только на чтение.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
PICNT CPIV
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CPIV

Чтение этого регистра очистит бит PITS в регистре PIT_SR.

CPIV: Current Periodic Interval Value. Возвратит текущее значение PIT.

PICNT: Periodic Interval Counter. Возвратит количество периодических интервалов, начиная от момента последнего чтения PIT_PIVR.

Регистр образа счетчиков PIT (Periodic Interval Timer Image Register). Работает только на чтение.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
PICNT CPIV
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
CPIV

CPIV: Current Periodic Interval Value. Возвратит текущее значение PIT.

PICNT: Periodic Interval Counter. Возвратит количество периодических интервалов, начиная от момента последнего чтения PIT_PIVR.

[Ссылки]

1. ARM-based Flash MCU SAM7X512 / SAM7X256 / SAM7X128 DATASHEET site:atmel.com.

 

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


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

Top of Page