ZHDZ012G December 2020 – June 2026 DRA829J , DRA829J-Q1 , DRA829V , DRA829V-Q1 , TDA4VM , TDA4VM-Q1
VTM:来自片上温度传感器的软件读取可能会损坏
可以在软件中读取 WKUP_VTM_TMPSENS_STAT_j[9-0] DATA_OUT 寄存器,以确定 SoC 上“j”个片上温度传感器各自的最近采样温度。如果读取刚好在温度样本更新的相同周期内发生,则读取数据有可能会由于时钟域之间的重新同步不正确而损坏。
软件应从 WKUP_VTM_TMPSENS_STAT_j[9-0] DATA_OUT 寄存器执行三次读取。然后,软件应根据彼此最接近两个样本的平均值计算要使用的温度。
软件伪代码如下:
#define abs(x) (((x)<0)?-(x):(x))
unsigned int get_best_value(unsigned int s0, unsigned int s1, unsigned int s2)
{
int d01 = abs(s0 - s1);
int d02 = abs(s0 - s2);
int d12 = abs(s1 - s2);
// if delta 01 is least, take 0 and 1
if ((d01 <= d02) && (d01 <=d12)) {
return (s0+s1)/2;
}
// if delta 02 is least, take 0 and 2
if ((d02 <= d01) && (d02 <=d12)) {
return (s0+s2)/2;
}
/* in all other cases, take 1 and 2 */
return (s1+s2)/2;
}
unsigned int get_temp()
{
unsigned int s0,s1,s2;
s0 = Read WKUP_VTM_TMPSENS_STAT_j[9-0] DATA_OUT;
s1 = Read WKUP_VTM_TMPSENS_STAT_j[9-0] DATA_OUT;
s2 = Read WKUP_VTM_TMPSENS_STAT_j[9-0] DATA_OUT;
return get_best_value(s0,s1,s2);
}