51 lines
1.2 KiB
C++
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);
|
|
}
|
|
}
|
|
}
|