#include "lks32mc09x_tmp.h"
#include "lks32mc09x_trim.h"

static int16_t tmp_k = 0;
static int16_t tmp_b = 0;
/**
 * @brief 初始化温度传感器
 */
void TMP_Init(void)
{
    tmp_k = TRIM_Read(NVR_ADDR_TMP_K);
    tmp_b = TRIM_Read(NVR_ADDR_TMP_B);
    TMP_Enable();
}

/**
 * @brief 使能温度传感器
 */
void TMP_Enable(void)
{
    SYS_WR_PROTECT = 0x7a83;
    SYS_AFE_REG5 |= BIT3;
    SYS_WR_PROTECT = 0;
}

/**
 * @brief 禁用温度传感器
 */
void TMP_Disable(void)
{
    SYS_WR_PROTECT = 0x7a83;
    SYS_AFE_REG5 &= ~BIT3;
    SYS_WR_PROTECT = 0;
}

/**
 * @brief 复位温度传感器
 */
void TMP_Reset(void)
{
    TMP_Disable();
}

/**
 * @brief 获取当前温度
 * @param ADC_value ADC采样值
 * @return 当前温度值，单位为摄氏度
 */
s16 TMP_GetCurrentTemperature(s16 ADC_value)
{
    s16 t_Temperture;
    if (ADC1->CFG & BIT10)
    {
        t_Temperture = (tmp_b - ((s32)tmp_k * ADC_value) / 1000);
    }
    else
    {
        t_Temperture = (tmp_b - ((s32)tmp_k * (ADC_value >> 4)) / 1000);
    }

    return t_Temperture;
}
