#include "ntc.h" #include "comp_adc.h" #include "drv_analog.h" #include "comp_gp_mux_pucur.h" #include #include #include "comp_protection.h" #include "comp_powerout.h" #include "comp_pd_manager.h" #include "comm_event.h" #include "comp_protocol_manager.h" #include "app_porta.h" #include "dpdm_run.h" #if NTC_ENABLE void ntc_init(void) { drv_clkctrl_pin_mul_cfg(RT1, 0); rt1_pucur_cfg(RT_20UA); } // 当前是 1ms 进一次 void ntc_run(void) { uint16_t ntc_val = 0; static uint8_t ntc_derat_cnt = 0, ntc_recove_cnt = 0; ntc_val = COMP_ADC_GET_RT1_VOL(); // 消抖时间的话, 是还需要/5, 比如给200ms, 实际是40ms if(trigger_check(ntc_val, NTC_100, true, &ntc_derat_cnt, DELAY_100MS) ) { user_app.ntc_triggered_dera = true; } if(trigger_check(ntc_val, NTC_50, false, &ntc_recove_cnt, DELAY_100MS) ) { user_app.ntc_triggered_dera = false; } if(user_app.last_ntc_triggered_dera == user_app.ntc_triggered_dera) { return; } user_app.last_ntc_triggered_dera = user_app.ntc_triggered_dera; // 触发NTC时, 双口都要回到5V, 并且DPDN要短接起来 if(user_app.ntc_triggered_dera) { dpdm_reset(); drv_dpdn_short_set(true); drv_dpdn1_short_set(true); // 走PD时让 设备自己降。 走其他协议时, 主动降。 // 如果没走PD,还需要考虑纯typeC状态,要把CC设到 1.5A 的电流广播值 if(dpdm_power_get_next_protocol() == PROTOCOL_PD_FIX || dpdm_power_get_next_protocol() == PROTOCOL_PD_PPS) { // 复位协议,屏蔽PD协议, DPDN恢复短接, 电压要降回5V pd_restart_send_src_cap(&g_pd_port, SRC_CAP_7W); } else { comp_powerout_prl_set_viout(VOLTAGE_5V, CURRENT_3A); } } else { // 温度恢复后, 重启下, 不然手机不会重新走协议 NVIC_SystemReset(); } } #endif