AT91SAM7 Periodic Interval Timer (PIT) |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Периодический интервальный таймер (Periodic Interval Timer, PIT) в микроконтроллерах ARM7 обычно используется для планировщика операционной системы, или отсчета реального времени в программе. Он разработан с целью обеспечения максимальной точности и эффективного управления. Рис. 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). Рис. 15-2. Разрешение/запрет PIT с помощью бита PITEN. [Интерфейс программирования PIT] В таблице показан общий список всех регистров, используемых для доступа к PIT. Смещение адресов регистров отсчитывается относительно адреса 0xFFFFFD30. Таблица 15-1. Регистры PIT.
Регистр режима PIT (Periodic Interval Timer Mode Register). Работает и на чтение, и на запись.
PIV: Periodic Interval Value (величина интервала периода счета). Определяет значение, которое сравнивается с внутренним 20-битным счетчиком интервала (CPIV). Период равен (PIV + 1). PITEN: Period Interval Timer Enabled (разрешение PIT). PITIEN: Periodic Interval Timer Interrupt Enable (разрешение прерывания PIT). Регистр состояния PIT (Periodic Interval Timer Status Register). Работает только на чтение, и содержит только один бит PITS.
PITS: Periodic Interval Timer Status (бит состояния PIT). Значения счетчиков PIT (Periodic Interval Timer Value Register). Работает только на чтение.
Чтение этого регистра очистит бит PITS в регистре PIT_SR. CPIV: Current Periodic Interval Value. Возвратит текущее значение PIT. PICNT: Periodic Interval Counter. Возвратит количество периодических интервалов, начиная от момента последнего чтения PIT_PIVR. Регистр образа счетчиков PIT (Periodic Interval Timer Image Register). Работает только на чтение.
CPIV: Current Periodic Interval Value. Возвратит текущее значение PIT. PICNT: Periodic Interval Counter. Возвратит количество периодических интервалов, начиная от момента последнего чтения PIT_PIVR. [Ссылки] 1. ARM-based Flash MCU SAM7X512 / SAM7X256 / SAM7X128 DATASHEET site:atmel.com. |