384 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			384 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /****************************************************************************
 | ||
|  | 
 | ||
|  | Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. | ||
|  | 
 | ||
|  | This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT | ||
|  | be copied by any method or incorporated into another program without | ||
|  | the express written consent of Aerospace C.Power. This Information or any portion | ||
|  | thereof remains the property of Aerospace C.Power. The Information contained herein | ||
|  | is believed to be accurate and Aerospace C.Power assumes no responsibility or | ||
|  | liability for its use in any way and conveys no license or title under | ||
|  | any patent or copyright and makes no representation or warranty that this | ||
|  | Information is free from patent or copyright infringement. | ||
|  | 
 | ||
|  | ****************************************************************************/ | ||
|  | #ifndef _HW_ZC_CMN_H_
 | ||
|  | #define _HW_ZC_CMN_H_
 | ||
|  | 
 | ||
|  | #include "os_types.h"
 | ||
|  | #include "gpio_mtx.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* indicate choose witch zc block in chip to use */ | ||
|  | #define MAC_ZC_HW_LOGIC_KL2                 0
 | ||
|  | #define MAC_ZC_HW_LOGIC_KL1                 1
 | ||
|  | 
 | ||
|  | /* mac zc hw detect id module define */ | ||
|  | #define MAC_ZC_HW_DETECT0                   0
 | ||
|  | #define MAC_ZC_HW_DETECT1                   1
 | ||
|  | #define MAC_ZC_HW_DETECT2                   2
 | ||
|  | #define MAC_ZC_HW_DETECT_CNT                3
 | ||
|  | 
 | ||
|  | /* mac zc hw capturer id module define */ | ||
|  | #define MAC_ZC_HW_CAP0                      0
 | ||
|  | #define MAC_ZC_HW_CAP1                      1
 | ||
|  | #define MAC_ZC_HW_CAP2                      2
 | ||
|  | #define MAC_ZC_HW_CAP_ALL                   3
 | ||
|  | #define MAC_ZC_HW_CAP_CNT                   3
 | ||
|  | #define MAC_ZC_HW_BITMAP_CAP0               (1 << MAC_ZC_HW_CAP0)
 | ||
|  | #define MAC_ZC_HW_BITMAP_CAP1               (1 << MAC_ZC_HW_CAP1)
 | ||
|  | #define MAC_ZC_HW_BITMAP_CAP2               (1 << MAC_ZC_HW_CAP2)
 | ||
|  | #define MAC_ZC_HW_BITMAP_CAP_ALL            ((1 << MAC_ZC_HW_CAP_CNT) - 1)
 | ||
|  | 
 | ||
|  | /* define mac zc hw gen module input source signal.
 | ||
|  |  * 1 - internal: the zc gen module input signals is the chip internal ac track's | ||
|  |  *      output signal. | ||
|  |  * 0 - the zc gen module input signal is the cap0's output signal. | ||
|  |  */ | ||
|  | #define MAC_ZC_HW_GEN_SELIN_CAP0            0
 | ||
|  | #define MAC_ZC_HW_GEN_SELIN_INTERNAL        1
 | ||
|  | 
 | ||
|  | /* the threshold number of zc points before INT generation */ | ||
|  | #define MAC_ZC_HW_INT_NUM_MAX               7
 | ||
|  | 
 | ||
|  | /* the 22 bit of debug reg is collect edge */ | ||
|  | #define MAC_DBG_REG_CAP_EDGE_BIT            22 //set dbg reg = 0x400
 | ||
|  | 
 | ||
|  | /* mtx gpio/signal module signal input source select */ | ||
|  | /* select mtx input is zc gpio */ | ||
|  | #define MTX_HW_SIG_SEL_INPUT_ZC             0
 | ||
|  | /* select mtx input is low level voltage */ | ||
|  | #define MTX_HW_SIG_SEL_INPUT_LOW            1
 | ||
|  | /* select mtx input is high level voltage */ | ||
|  | #define MTX_HW_SIG_SEL_INPUT_HIGH           2
 | ||
|  | 
 | ||
|  | /* mac zc hw set capture edge */ | ||
|  | #define MAC_ZC_HW_CAP_EDGE_RISE             0
 | ||
|  | #define MAC_ZC_HW_CAP_EDGE_FALL             1
 | ||
|  | 
 | ||
|  | /* mac zc hw ZC_GEN_OFFSET reg offset value */ | ||
|  | #define MAC_ZC_HW_GEN_OFFSET_RIGHT          0
 | ||
|  | #define MAC_ZC_HW_GEN_OFFSET_LEFT           1
 | ||
|  | 
 | ||
|  | /* the zc gen hw bound square wave dur, unit ntb */ | ||
|  | #define MAC_ZC_HW_GEN_BOUND_DUR_NTB         150000
 | ||
|  | 
 | ||
|  | /* the value cfg for HW produce right square wave, should between 1 and
 | ||
|  |  *  1/2 period, unit ntb | ||
|  |  */ | ||
|  | #define MAC_ZC_HW_VIBRATE_PROTECT_NTB       300000
 | ||
|  | 
 | ||
|  | /* the interval between two zc big than this, treat as diff period collect,
 | ||
|  |  * unit ntb | ||
|  |  */ | ||
|  | #define MAC_ZC_HW_DEBOUNCE_NTB              100000
 | ||
|  | 
 | ||
|  | /* the cap hw update zc to register protection time(then generate the cap's
 | ||
|  |  * interrupt). so sw must be delay to r/w the cap's register.unit ntb */ | ||
|  | #define MAC_ZC_HW_CAP_INT_PROTECT_NTB       25000
 | ||
|  | 
 | ||
|  | /* how long time ahead to switch gpio before real zc(5ms). unit ntb */ | ||
|  | #define MAC_ZC_SW_GPIO_AHEAD_NTB            125000
 | ||
|  | 
 | ||
|  | /* when finish the training, delay cnt for calculating average period */ | ||
|  | #define MAC_ZC_TRAIN_SYSTIC_CNT             32
 | ||
|  | 
 | ||
|  | /* 1/2 training count */ | ||
|  | #define MAC_ZC_TRAIN_SYSTIC_MARGIN_CNT      (MAC_ZC_TRAIN_SYSTIC_CNT >> 1)
 | ||
|  | 
 | ||
|  | /* when training for zc low/upper bound int, any phase collect this value
 | ||
|  |  * consecutive valid data, means this phase is valid. | ||
|  |  */ | ||
|  | #define MAC_ZC_TRAIN_BOUND_CONS_CNT         32
 | ||
|  | 
 | ||
|  | /* 1/4 tranining count */ | ||
|  | #define MAC_ZC_TRAIN_BOUND_MARGIN_CNT       (MAC_ZC_TRAIN_BOUND_CONS_CNT >> 2)
 | ||
|  | 
 | ||
|  | /* train timer timeout define start { */ | ||
|  | /* train for hw zc init ac track ready.  unit 1ms */ | ||
|  | #define MAC_ZC_TRAIN_AC_TRACK_TIME_MS       8
 | ||
|  | 
 | ||
|  | /* train for hw zc generator to select sw mtx ready, unit 1ms */ | ||
|  | #define MAC_ZC_TRAIN_GEN_SW_MTX_TIME_MS     320
 | ||
|  | 
 | ||
|  | /* train for hw zc generator to select hw mtx ready, unit 1ms */ | ||
|  | #define MAC_ZC_TRAIN_GEN_HW_MTX_TIME_MS     100
 | ||
|  | /* train for hw zc generator to select zc_capx input,
 | ||
|  |  * wait upper/low bound interrupt time | ||
|  |  */ | ||
|  | #define MAC_ZC_TRAIN_BOUND_INT_WAIT_MS      100
 | ||
|  | 
 | ||
|  | /* train for generator interrupt timeout  */ | ||
|  | #define MAC_ZC_TRAIN_GEN_INTR_TIME_MS       960
 | ||
|  | 
 | ||
|  | /* train for use the timer to force tigger timeout */ | ||
|  | #define MAC_ZC_TRAIN_FORCE_TIME_MS          5
 | ||
|  | 
 | ||
|  | /* total zc train timeout, unit 1ms */ | ||
|  | #define MAC_ZC_TRAIN_TIMEOUT_MS             25000
 | ||
|  | 
 | ||
|  | /* system daemon period, unit 1ms */ | ||
|  | #define MAC_ZC_SYS_DAEMON_PERIOD_MS         (60 * 1000)
 | ||
|  | 
 | ||
|  | /* system daemon error timeout, unit 1ms */ | ||
|  | #define MAC_ZC_SYS_DAEMON_TIMEOUT_MS        (420 * 1000)
 | ||
|  | 
 | ||
|  | /* mac zc system connect relationship */ | ||
|  | typedef struct _mac_zc_hw_map_info { | ||
|  |     /* default chip gpio */ | ||
|  |     uint8_t     gpio; | ||
|  |     /* extend chip gpio */ | ||
|  |     uint8_t     gpio_ext; | ||
|  |     /* mutx signal */ | ||
|  |     uint8_t     signal; | ||
|  |     /* mac zc cap id: 0/1/2 */ | ||
|  |     uint8_t     cap_id; | ||
|  |     /* mac zc phase id */ | ||
|  |     uint8_t     phase_id; | ||
|  | } mac_zc_hw_map_info_t; | ||
|  | 
 | ||
|  | /* get ntb middle value */ | ||
|  | #define mac_zc_get_ntb_mid(earlier, later) \
 | ||
|  |     ((uint32_t)(later - earlier)/2 + earlier) | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set hw capture period | ||
|  |  * | ||
|  |  * @param is_half_period:  is half period capture zc | ||
|  |  *                  0 : set zc hw full period capture | ||
|  |  *                  others: set zc hw half period capture | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_cap_set_period(uint8_t is_half_period); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set hw capture timestamp interval | ||
|  |  * | ||
|  |  * @param cap_interval_cnt:  capture inverval period count | ||
|  |  *                  (cap_interval_cnt + 1) time zc capture once timestamp | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_cap_set_interval(uint16_t cap_interval_cnt); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set generate zc hw capture interrupt interval | ||
|  |  * | ||
|  |  * @param cap_interval_cnt:  generate interrupt inverval count. | ||
|  |  *                  (int_num + 1) time zc capture timestamp generate once | ||
|  |  *                  zc_cap_int interrupt | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_cap_set_watermark(uint8_t depth); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           get generate zc hw capture interrupt interval config | ||
|  |  * | ||
|  |  * @retval:         generate interrupt inverval count. | ||
|  |  *                  (int_num + 1) time zc capture timestamp generate once | ||
|  |  *                  zc_cap_int interrupt | ||
|  |  */ | ||
|  | uint32_t mac_zc_hw_cap_get_watermark(void); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set hw capture edge | ||
|  |  * | ||
|  |  * @param is_fall_edge:  set is the fall edge capture | ||
|  |  *                  0 : set zc hw fall edge  capture | ||
|  |  *                  others: set zc hw rising edge capture | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_cap_set_edge(uint8_t is_fall_edge); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           get hw capture edge config | ||
|  |  * | ||
|  |  * @retval:         is the fall edge capture. | ||
|  |  *                  0 : zc hw fall edge  capture | ||
|  |  *                  others: zc hw rising edge capture | ||
|  |  */ | ||
|  | uint8_t mac_zc_hw_cap_get_edge(void); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           enable/disable zc hw captures | ||
|  |  * | ||
|  |  * @param cap_bitmap: | ||
|  |  *                  set capture id bitmap, bit0 - cap0, bit1 - cap1, bit2 - cap2 | ||
|  |  * @param enable:   0 : disable this capture hw | ||
|  |  *                  others: enable this capture hw | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_capx_enable(uint8_t cap_bitmap, uint8_t enable); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           trigger hw capture zc timestamp | ||
|  |  * | ||
|  |  * @param cap_id:   set capture id bitmap, bit0 - cap0, bit1 - cap1 ... | ||
|  |  *                  see MAC_ZC_HW_CAPx | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_capx_trig(uint8_t cap_bitmap); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           WAR: sw trigger gen cap for reset | ||
|  |  * | ||
|  |  * @param signal_id:    target gen connected signal | ||
|  |  * @param cap_edge:     current capx caption edge, see MAC_ZC_HW_CAP_EDGE_XXX | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_capx_reset_trig(uint8_t signal_id, uint8_t cap_edge); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set zc generator block input source detect | ||
|  |  * | ||
|  |  * @param zc_gen_phase_sel:   detect id | ||
|  |  *                  see MAC_ZC_HW_DETECTx | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_gen_set_phase_sel_mtx(uint8_t zc_gen_phase_sel); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           get zc generator block input source detect | ||
|  |  * | ||
|  |  * @retval:         detect id | ||
|  |  *                  see MAC_ZC_HW_DETECTx | ||
|  |  */ | ||
|  | uint32_t mac_zc_hw_gen_get_phase_sel_mtx(void); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set zc generator block input source from hw_cap0 or sw | ||
|  |  * | ||
|  |  * @param zc_gen_sel:  see MAC_ZC_HW_CFG_GEN_SEL_XX | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_gen_set_gen_sel_mtx(uint8_t zc_gen_sel); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set zc generator block produce square wave period | ||
|  |  * | ||
|  |  * @param is_half_period:   is half zc period produce square wave | ||
|  |  *                  0: half zc period produce square wave | ||
|  |  *                  others: full period produce square wave | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_gen_set_ctrl_period(uint8_t is_half_period); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set zc hw gen block produce square wave duration ntb | ||
|  |  * | ||
|  |  * @param dur_ntb:  duration ntb | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_gen_set_ctrl_dur(uint32_t dur_ntb); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set zc generator block produce square wave offset | ||
|  |  * | ||
|  |  * @param offset_ntb:   produce square wave offset zc | ||
|  |  * @param offset_lr:    left or right offset | ||
|  |  *                  see MAC_ZC_HW_GEN_OFFSET_XXX | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_gen_set_offset(uint32_t offset_ntb, uint8_t offset_lr); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           set zc lct track block produce square wave offset | ||
|  |  * | ||
|  |  * @param dur_ntb:  vibrate protect duration ntb | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_set_vibrate_protect_dur(uint32_t dur_ntb); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           ac track block trigger | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_ac_track_trig(void); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           get hw current capture edge from debug bus | ||
|  |  * | ||
|  |  * @retval:         capture edge, see MAC_ZC_HW_CAP_EDGE_XXX | ||
|  |  */ | ||
|  | uint8_t mac_zc_hw_get_curr_cap_edge(void); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           get hw capture's zc timestamp buffer base address | ||
|  |  * | ||
|  |  * @param cap_id:   capture id, see MAC_ZC_HW_CAPx | ||
|  |  * | ||
|  |  * @retval:         timestamp buffer base address | ||
|  |  */ | ||
|  | uint32_t* mac_zc_hw_get_ts_base_addr(uint8_t cap_id); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           get hw capture's period | ||
|  |  * | ||
|  |  * @param cap_id:   capture id, see MAC_ZC_HW_CAPx | ||
|  |  * | ||
|  |  * @retval:         capture's period ntb | ||
|  |  */ | ||
|  | uint32_t mac_zc_hw_get_zc_period(uint8_t cap_id); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           fix gpio to signal connect map | ||
|  |  * | ||
|  |  * @param gpio:     chip gpio id | ||
|  |  * @param signal:   chip signal id | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_fix_map_gpio2sig(uint8_t gpio, uint8_t signal); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           get target cap's last collect zc ts | ||
|  |  * | ||
|  |  * @param cap_id:   capture id, see MAC_ZC_HW_CAPx | ||
|  |  * | ||
|  |  * @retval:         get zc ts | ||
|  |  */ | ||
|  | uint32_t mac_zc_hw_get_last_zc_ts(uint8_t cap_id); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief           load default hw phase map info | ||
|  |  * @param phase_map:phase map ctxt | ||
|  |  * @param phase_id: mac zc phase id, see MAC_ZC_PHASE_XXX | ||
|  |  * | ||
|  |  * @retval:         none | ||
|  |  */ | ||
|  | void mac_zc_hw_load_phase_map_def(mac_zc_hw_map_info_t *phase_map, | ||
|  |     uint8_t phase_id); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif //_MAC_ZC_HW_H_
 | ||
|  | 
 |