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"
	


Вот так-то! Ставьте радиатор!