Таймер
В системе присутствует 3 модуля таймера. Каждый таймер поддерживает 3 различных независимых режима работы. Кроме того, TIMER0 и TIMER1 дополнительно поддерживают 4-ый режим работы, в котором они взаимодействуют между собой. Каждый модуль имеет внешний вход, который, в зависимости от режима, управляет таймером.
Структурная схема
Таймер состоит из следующих блоков:
- REGISTERS – блок для хранения управляющих данных и статусов;
- TIMER – блок управления счетом;
- SWITCHER_CENTRE – переключатель, определяет будут ли использованы внутренние сигналы или сигналы с соседнего таймера;
- ALLOCATOR – выде литель, выделяет фронт и спад внешнего сигнала;
- SYNCHRONIZER – синхронизатор, синхронизирует внешний сигнал к системной частоте;
- SWITCHER_IN – переключатель, определяет источник внешнего сигнала.
Работа в режиме «Простой таймер»
Принцип работы
В режиме «Простой таймер» модуль представляет собой 24-разрядный таймер с инкрементацией каждый такт системной частоты. Таймер считает до значения, записанного в регистры периода счета таймера TMR_PRDH, TMR_PRDM и TMR_PRDL. По достижению заданного значения таймер либо останавливается, либо начинает счет с нуля. Данная функция определяется битом CYCLES регистра TMR_CTRL. Также во время работы допускается перезапись текущего периода счета таймера.
В результате перезаписи текущее значение таймера будет сброшено в 0 и счет начнется заново. Текущее значение таймера находится в регистрах TMR_VALH, TMR_VALM, TMR_VALL.
Значение, до которого будет считать модуль, определяется как:
Nclk=PRD + 1, где Nclk – количество тактов системной частоты.
Статусы и прерывания
Статусы содержаться в регистре TMR_ST. В данном режиме вырабатывается статус окончания счета периода – бит END_PRD. На основании данного статуса возможно возникновение прерывания. Прерывание разрешается путем записи «1» в соответствующий бит регистра маски прерываний TMR_MSK.
Алгоритм работы
Процедура настройки режима «Простой таймер»:
- в регистры TMR_PRDH, TMR_PRDM и TMR_PRDL записать требуемое значение периода счета таймера;
- в регистре TMR_MSK при необходимости разрешить прерывание;
- в регистре TMR_CTRL:
- установить требуемое значение бита CYCLES;
- установить бит T/C в «0»;
- в биты MODE необходимо записать значение 00b;
- установить бит EN_EXT в «0»;
- установить бит EN в «1».
- текущее значение таймера можно вычитать из регистров TMR_VALH, TMR_VALM и TMR_VALL.
Работа в режиме «Таймер с внешней остановкой»
Принцип работы
В режиме «Таймер с внешней остановкой» модуль представляет собой 24-разрядный таймер с инкрементацией каждый такт системной частоты. При запуске таймер считает с нуля до момента возникновения заданного события на соответствующем выводе GPIO (альтернативная функция I_TIMER_EXT). Тип события остановки определяется битом STOP_TYPE регистра TMR_CFG. Текущее значение таймера находится в регистрах TMR_VALH, TMR_VALM и TMR_VALL.
Статусы и прерывания
Статусы содержатся в регистре TMR_ST. В данном режиме вырабатывается статус переполнения таймера – бит OVW и статус остановки таймера по внешнему событию – бит STOP_EVENT. На основании данных статусов возможно возникновение прерываний. Прерывание разрешается путем записи «1» в соответствующий бит регистра маски прерываний TMR_MSK.
Алгоритм работы
Процедура настройки режима «Таймер с внешней остановкой»:
- в регистре TMR_CFG задать тип события остановки счета таймера путем записи требуемого значения в бит STOP_TYPE;
- в регистре TMR_MSK разрешить необходимые прерывания;
- в регистре TMR_CTRL:
- установить бит CYCLES в «0»;
- установить бит T/C в «0»;
- в биты MODE необходимо записать значение 01b;
- установить бит EN_EXT в «0»;
- установить бит EN в «1».
- текущее значения таймера можно вычитать из регистров TMR_VALH, TMR_VALM и TMR_VALL.
Работа в режиме «Межсобытийный таймер»
Принцип работы
В режиме «Межсобытийный таймер» модуль представляет собой 24-разрядный таймер с инкрементацией каждый такт системной частоты. После разрешения работы таймер ожидает событие старта на соответствующем выводе GPIO (альтернативная функция I_TIMER_EXT). Тип события старта определяется битом START_TYPE регистра TMR_CFG. Окончанием счета является событие остановки счета таймера на выводе GPIO. Тип события остановки определяется битом STOP_TYPE регистра TMR_CFG. Текущее значение таймера находится в регистрах TMR_VALH, TMR_VALM и TMR_VALL.