NXP i.MX7D
таймер общего назначения
Простейший код начальной настройки модуля GPT.
@ Определить источник тактирования
MOV32 R0, CCM_BASE + TARGET_ROOT114 @ GPT1_CLK_ROOT
MOV32 R1, 1 << ROOT_ENABLE + 2 << MUX + (1-1) << PRE_PODF + (1-1) << POST_PODF
STR R1, [R0] @ Источник: SYS_PLL_PFD0, частота ~~392МГц
@ Затактировать модуль
MOV32 R0, CCM_BASE + CCGR124 @ GPT1 clock gate
MOV R1, 0x00003333
STR R1, [R0]
MOV32 R0, GPT1_BASE
@ Сбросить таймер
MOV R1, 1 << SWR
STR R1, [R0, GPT_CR]
@ Дождаться завершения сброса
1:
LDR R1, [R0, GPT_CR]
TST R1, 1 << SWR
BNE 1b
@ Настроить делитель входящей частоты
MOV R1, 1 - 1 @ Делитель на 1
STR R1, [R0, GPT_PR]
@ Установить режимы
MOV32 R1, 1 << CLKSRC + 1 << FRR
STR R1, [R0, GPT_CR]
BIS R1, 1 << GPT_CR_EN @ И включить таймер
STR R1, [R0, GPT_CR] @ Уже работает!
@ Прочитать и напечатать значение счётчика
LDR R3, [R0, GPT_CNT]
printf "GPT = %R3H\n"