NXP i.MX7D
установка частоты ядер
После сброса процессора или подачи питания, загрузчик устанавливает частоту всех ядер A7 в 792 МГц.
Вы можете перестроить её на любую, в диапазоне 648 - 1296 МГц.
Запасайтесь временем. На эту процедуру уйдут кошмарные 50 микросекунд:
MOV32 R0, CCM_ANALOG_BASE
@ Что бы перестроить PLL
@ Сначала затактируем ядро в обход PLL
MOV R1, 1 << BYPASS @ Во время обновления настроек PLL
STR R1, [R0, PLL_ARM_SET] @ Ядро будет тактироваться частотой кварца 24 МГц
@ Нам нужен гигагерц
Умножитель_частоты_ядра = 83 @ 24*83/2 = 996 МГц
@ Обновить настройки PLL
MOV R1, 0b01111111 @ Битовая маска для сброса
STR R1, [R0, PLL_ARM_CLR] @ Сбросить старое значение PLL
MOV R1, Умножитель_частоты_ядра
STR R1, [R0, PLL_ARM_SET] @ Установить новое
@ Дождаться завершения процесса
@ Перестройки PLL
1:
LDR R1, [R0, PLL_ARM]
TST R1, 1 << PLL_ARM_LOCK
BEQ 1b
@ Затактировать ядро непосредственно от PLL
MOV R1, 1 << BYPASS
STR R1, [R0, PLL_ARM_CLR]
@ Прямо здесь и сейчас: гигагерц!
Рекомендуемые частоты приводятся в документации на камень.
В нашем случае, это гигагерц. А более высокие частоты можно устанавливать в режиме 50/50.
То есть, давать ядру остыть. 10 мс поработал, 10 мс остывает.
Иначе возникнет локальный перегрев и пойдут разрушительные процессы на кристалле.
Целевая частота рассчитывается по формуле:
Частота ядра = 24 * умножитель / 2
"Умножитель" может принимать значение от 54 до 108.