
#include "../include/hal_lksmcu_reg.h"
#include "../include/hal_lksmcu_tmp.h"
#include "../include/hal_lksmcu_trim.h"
#include "hal_lks32mc09x.h"
static int32_t tmp_coef_a = 0;
static int32_t tmp_coef_b = 0;
/**
 * @brief 模块复位
 * @param TMP_x 模块编号
 */
void HAL_TMP_Reset(HAL_TMP_x TMP_x)
{
    HAL_TMP_Disable(TMP_x);
}

/**
 * @brief 模块打开
 * @param TMP_x 模块编号
 */
void HAL_TMP_Enable(HAL_TMP_x TMP_x)
{
    HAL_REG_SYS_UNLOCK();
    HAL_REG_SET(SYS_AFE_REG0, BIT12);
    HAL_REG_SYS_LOCK();
    tmp_coef_a = -HAL_TRIM_Read(0x000001C8);
    tmp_coef_b = HAL_TRIM_Read(0x000001CC);
}

/**
 * @brief 模块关闭
 * @param TMP_x 模块编号
 */
void HAL_TMP_Disable(HAL_TMP_x TMP_x)
{
    HAL_REG_SYS_UNLOCK();
    HAL_REG_RESET(SYS_AFE_REG0, BIT12);
    HAL_REG_SYS_LOCK();
}

/**
 * @brief 获取当前芯片内部温度传感器测到的温度，单位摄氏度
 * @param TMP_x 模块编号
 * @param adc ADC编号
 * @param sequence ADC采样序列
 * @return 当前温度，单位摄氏度
 */
int32_t HAL_TMP_GetTemperature(HAL_TMP_x TMP_x_x, HAL_ADC_x adc, HAL_ADC_SAMP_SEQUENCE_x sequence)
{
    // 实现获取温度的代码，单位摄氏度
    int32_t tmp;
    tmp = (int32_t)tmp_coef_a * (HAL_ADC_GetSamplingValues(adc, sequence) >> 4) / 1000 + (int32_t)tmp_coef_b;

    return tmp / 10; // 返回温度值
}

/**
 * @brief 获取当前芯片内部温度传感器测到的温度，单位0.1摄氏度
 * @param TMP_x 模块编号
 * @param adc ADC编号
 * @param sequence ADC采样序列
 * @return 当前温度，单位0.1摄氏度
 */
int32_t HAL_TMP_GetTemperature01(HAL_TMP_x TMP_x, HAL_ADC_x adc, HAL_ADC_SAMP_SEQUENCE_x sequence)
{
    // 实现获取温度的代码，单位0.1摄氏度
    int32_t tmp;
    tmp = (int32_t)tmp_coef_a * (HAL_ADC_GetSamplingValues(adc, sequence) >> 4) / 1000 + (int32_t)tmp_coef_b;
    return tmp; // 返回温度值
}
