p26001-store-acs-soc-fw-app/hardware/hisilicon/TemperatureSensor.cpp
2026-09-28 21:33:04 +08:00

51 lines
1.2 KiB
C++

/*
*******************************************************************************
* INCLUDE
*******************************************************************************
*/
#include "TemperatureSensor.h"
#include "memmap.h"
namespace Hardware
{
namespace Hisilicon
{
/*
*******************************************************************************
* CLASS DEFINE
*******************************************************************************
*/
#define TSENSOR_CTRL_REG_BASE 0x1102A000
TemperatureSensor::TemperatureSensor(): Sensor(Sensor::Type::TEMPERATURE)
{
_pRegisters = getRegisters();
_pRegisters->ctrl0 |= (1 << 31) | (1 << 30);
_pRegisters->ctrl1 |= (3 << 2);
}
TemperatureSensor::~TemperatureSensor()
{
_pRegisters->ctrl0 = 0;
releaseRegisters(_pRegisters);
}
void TemperatureSensor::read(float& value)
{
uint32_t rval = _pRegisters->ctrl2 & 0x3ff;
value = (float)(rval - 117) / 784 * 165 - 40;
}
TemperatureSensor::Registers* TemperatureSensor::getRegisters()
{
return (Registers*)memmap(TSENSOR_CTRL_REG_BASE, sizeof(Registers));
}
void TemperatureSensor::releaseRegisters(Registers* pRegisters)
{
memunmap(pRegisters);
}
}
}