NXP i.MX7D
градусник ядра TEMPMON
Термодатчик представляет собой 9-битное значение температуры ядра
в десятых долях градуса. Это значит, что максимальная температура,
которую можно зафиксировать = 51.1 град. Но с этим надо бы разораться..
На сегодня осталась только одна нерешённая проблема - градусник
всегда показывает ~~ 23 .. 27 град.
И не поднимается выше, даже если каменюка стоит изрядно горячий..
Что это за показания, неизвестно. Может что-то не так делаю..
Но раз они есть, значит надо. Давайте чтоль настроим.
@ Термодатчик затактирован постоянно
@ Затактировавывать его не нужно
MOV32 R0, TEMPMON_BASE
@ Настроить частоту замеров
MOV32 R1, (65535/4) << MEASURE_FREQ @ 2 раза в секунду
BIS R1, 1 << MEASURE_TEMP @ Измерять постоянно
STR R1, [R0, TEMPSENSE1]
@ Дождаться завершения первого замера
@ На это уйдёт ~~ одна миллисекунда
1:
LDR R1, [R0, TEMPSENSE1]
TST R1, 1 << FINISHED
BEQ 1b
Всё готово. Датчик инициализирован.
Можно брать температуру и куда-нибудь выводить..
MOV32 R0, TEMPMON_BASE
LDR R1, [R0, TEMPSENSE1]
BFC R1, 9, 23 @ Выделить младшие 9 бит температуры
MOV R2, 10 @ Разделить на 10
UDIV R3, R1, R2 @ R3 содержит целую часть в градусах
MUL R4, R2, R3 @ Вычислить остаток от деления
SUB R2, R1, R4 @ R2 содержит десятичную часть после точки
printf "TS1 = %R3D.%R2D°\n"
Вот так-то! Ставьте радиатор!