内部温度传感器描述
其中基地址为
测试代码
float ToolsGetMPUTemp()
{
//hi3516dv300芯片内部集成温度传感器(T-Sensor),温度的检测范围为-40~125℃
//单次测量模式
#define MAP_SIZE 4096
#define MAP_MASK (MAP_SIZE - 1)
#define MISC_CTRL45 0x120300b4//采集模式寄存器地址
#define V_MISC_CTRL45 0x80000000//设置采集模式寄存器地址的值
#define MISC_CTRL47 0x120300bc//温度记录码寄存器地址 MISC_CTRL47的bit0~bit9有效
int dev_fd;
void* p_MISC_CTRL45 = NULL;
void* p_MISC_CTRL47 = NULL;
unsigned int tmp = 0;
double temprature=0;
dev_fd = open("/dev/mem", O_RDWR | O_NDELAY);
if (dev_fd < 0)
{
printf("open /dev/mem error:%s\n", strerror(errno));
return 0;
}
unsigned int *map_base=(unsigned int *)mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, MISC_CTRL45 & ~MAP_MASK );
if (NULL == map_base)
{
printf("mmap error\n");
return 0;
}
//printf("map_base=0x%08x\n",map_base);
p_MISC_CTRL45 = map_base+0x00b4/4;
p_MISC_CTRL47 = map_base+0x00bc/4;
//printf("p_MISC_CTRL45=0x%08x\n",p_MISC_CTRL45);
//printf("p_MISC_CTRL47=0x%08x\n",p_MISC_CTRL47);
*(unsigned int*)p_MISC_CTRL45 = V_MISC_CTRL45;
*(unsigned int*)p_MISC_CTRL45 = 0x0;
tmp = *(unsigned int*)p_MISC_CTRL47 & 0x000003ff;
temprature = 1.0*(tmp-136)/793*165-40;
printf("CPU temprature:%0.2f\n",temprature);
munmap(map_base, MAP_SIZE);
return temprature;
}