Таймер
В системе присутствует 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 – количество тактов системной частоты.
Статусы и прерывания
Статусы содержаться в регистре 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.