You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

193 lines
3.9 KiB

4 months ago
/**
******************************************************************************
* @copyright Copyright (C), 2016-2022, ConvenientPower. Co., Ltd.
* @file comp_primary_side.h
* @version 1.0
* @author qing.cheng
* @date 2023-10-07
* @brief Header file of COMP_PRIMARY_SIDE_H module.
******************************************************************************
*/
#ifndef _COMP_PRIMARY_SIDE_H_
#define _COMP_PRIMARY_SIDE_H_
#include "core_comm.h"
#include "drv_comm.h"
#include "rom_inc.h"
#include "config.h"
#if ADC_TRIM_ENABLE
#define VD_RD_2P4K VD_RVDS_TRIM_VALUE
#else
#define VD_RD_2P4K 2400
#endif
#define VD_RP_VALUE 46400
//N * 128
#define N_RATIO 800
#define VD_PEAK_LIMIT 400
typedef struct
{
uint32_t ac_freq; //hz
uint32_t ac_vol;
uint8_t vd_peak_cnt;
uint8_t ac_high;
uint8_t ac_cnt;
uint8_t ac_sample_flag;
uint16_t high_width;
uint16_t low_width;
} edge_info_s;
extern edge_info_s g_edge_param;
#define AC_H_VOL_VPP 254
#define AC_L_VOL_VPP 150//226000
#if VD_PEAK_DETECT
#define VD_PEAK_TIMEOUT 5
#endif
#if VD_FREQ_DETECT
#define FREQ_CALC_TIME (0x64)
#define FREQ_CALC_START (1 << 9)
#endif
#define VD_SCALE_EN (0 << 5)
#define VD_ANALOG_CONFIG (0x01 | VD_SCALE_EN)
#define SAMPLE_ON_EN 1
#define BLANK_TIME (0x04) //83.3/lsb
#define SAMPLE_TIME (0x01 << 16)
#define VD_FILTER_0NS 0
#define VD_FILTER_666NS 1
#define VD_FILTER_249NS 2
#define VD_FILTER_498NS 3
#define REG_EXTINT_VD_FREQ_CALC_INT_BASE\
(0x40013018)
#define REG_FILTER_VD_100MV_COMP_BASE\
(0x40014020)
#define REG_MSIC_VD_FREQ_CALC_BASE\
(0x4000f820)
#define REG_MISC_VD_LS_COMP_BASE\
(0x4000F824)
#define DRV_FILTER_VD_100MV_COMP_MASK_SET(x)\
do{\
*((uint32_t *)(REG_FILTER_VD_100MV_COMP_BASE)) |= ((x & 0x03) << 20);\
}while(0)
#define DRV_EXTINT_VD_LS_CHG_MASK_SET(x)\
do{\
*((uint32_t *)(REG_EXTINT_VD_LS_COMP_CHG_INT_BASE)) |= x;\
}while(0)
#define DRV_EXTINT_VD_LS_CHG_GET_READ()\
(*((uint32_t *)(REG_EXTINT_VD_LS_COMP_CHG_INT_BASE)))
#define DRV_EXTINT_VD_FREQ_CALC_MASK_SET(x)\
do{\
*((uint32_t *)(REG_EXTINT_VD_FREQ_CALC_INT_BASE)) |= x;\
}while(0)
#define DRV_MISC_VD_LS_COMP_MASK_SET(x)\
do{\
*((uint32_t *)(REG_MISC_VD_LS_COMP_BASE)) |= x;\
}while(0)
#define COMP_VD_RD_2P4K_SET()\
do{\
REG_ANALOG_ANA_CTRL->word |= 0x01;\
}while(0)
#define COMP_VD_RD_2P4K_RESET()\
do{\
REG_ANALOG_ANA_CTRL->word &= ~(0x01);\
}while(0)
#define HAL_GET_VD_FREQ()\
((((*((uint32_t *)REG_MSIC_VD_FREQ_CALC_BASE) >> 16) & 0xffff) * 1000) / FREQ_CALC_TIME)
#define HAL_VD_AC_SAMPLE_DISABLE()\
do{\
g_edge_param.ac_sample_flag = false;\
}while(0)
/*
* @brief comp_primary_side_init
* @param NULL
* @note
* @retval NULL
*/
void comp_primary_side_init(void);
/*
* @brief comp_vd_peak_timer_config
* @param edge_param
* @note add timeout, when adc detect vd signal of not rising
* that adc interrupt not trigger.
* @retval NULL
*/
void comp_vd_peak_timer_config(edge_info_s *edge_param);
/*
* @brief comp_vd_peak_detect_timeout
* @param edge_param
* @note vd adc channel timeout check.
* @retval NULL
*/
void comp_vd_peak_detect_timeout(edge_info_s *edge_param);
/*
* @brief comp_vd_detect_ac_vol
* @param edge_param
* Vac = (V_vd / R_vds * (R_vd + R_vds) - Vo) * n / 1.414213
* Vo:output vol.
* n:ratio.
* R_vds:2.4k.
* R_vd:pull-up resistor.
* @note get ac_input vol
* @retval NULL
*/
void comp_vd_detect_ac_vol(edge_info_s *edge_param);
/*
* @brief comp_primary_freq_get
* @param NULL
* @note NULL
* @retval NULL
*/
void comp_primary_freq_get(void);
#endif /*HAL_PRIMARY_SIDE_H*/