@@ -62,7 +62,7 @@ static void IRAM_ATTR zero_cross_handle_interrupt(void *user_data, const mcpwm_c
6262 gpio_status = gpio_ll_get_level (& GPIO , zero_cross_dev -> capture_pin );
6363 }
6464#if defined(SOC_MCPWM_SUPPORTED )
65- bool edge_status = (gpio_status && zero_cross_dev -> zero_driver_type == GPIO_TYPE ) || (edata -> cap_edge == MCPWM_CAP_EDGE_POS && zero_cross_dev -> zero_driver_type == MCPWM_TYPE );
65+ bool edge_status = (gpio_status && zero_cross_dev -> zero_driver_type == GPIO_TYPE ) || (( zero_signal_edge_t ) edata -> cap_edge == CAP_EDGE_POS && zero_cross_dev -> zero_driver_type == MCPWM_TYPE );
6666#else
6767 bool edge_status = gpio_status && zero_cross_dev -> zero_driver_type == GPIO_TYPE ;
6868#endif
@@ -92,7 +92,11 @@ static void IRAM_ATTR zero_cross_handle_interrupt(void *user_data, const mcpwm_c
9292 zero_detect_cb_param_t param = {0 };
9393 param .signal_valid_event_data .valid_count = zero_cross_dev -> valid_count ;
9494 param .signal_valid_event_data .full_cycle_us = zero_cross_dev -> full_cycle_us ;
95- param .signal_valid_event_data .cap_edge = MCPWM_CAP_EDGE_POS ;
95+ param .signal_valid_event_data .cap_edge = CAP_EDGE_POS ;
96+ //Add judgments to prevent data overflow
97+ if (zero_cross_dev -> valid_count >= UINT16_MAX - 1 ) {
98+ zero_cross_dev -> valid_count = zero_cross_dev -> valid_times ;
99+ }
96100 zero_cross_dev -> event_callback (SIGNAL_VALID , & param , zero_cross_dev -> user_data );
97101 }
98102 }
@@ -120,7 +124,10 @@ static void IRAM_ATTR zero_cross_handle_interrupt(void *user_data, const mcpwm_c
120124 zero_detect_cb_param_t param = {0 };
121125 param .signal_valid_event_data .valid_count = zero_cross_dev -> valid_count ;
122126 param .signal_valid_event_data .full_cycle_us = zero_cross_dev -> full_cycle_us ;
123- param .signal_valid_event_data .cap_edge = MCPWM_CAP_EDGE_NEG ;
127+ param .signal_valid_event_data .cap_edge = CAP_EDGE_NEG ;
128+ if (zero_cross_dev -> valid_count >= UINT16_MAX - 1 ) {
129+ zero_cross_dev -> valid_count = zero_cross_dev -> valid_times ;
130+ }
124131 zero_cross_dev -> event_callback (SIGNAL_VALID , & param , zero_cross_dev -> user_data );
125132 }
126133 }
@@ -146,19 +153,19 @@ static void IRAM_ATTR zero_cross_handle_interrupt(void *user_data, const mcpwm_c
146153 param .signal_invalid_event_data .invalid_count = zero_cross_dev -> invalid_count ;
147154 param .signal_invalid_event_data .full_cycle_us = zero_cross_dev -> full_cycle_us ;
148155 if (edge_status ) {
149- param .signal_invalid_event_data .cap_edge = MCPWM_CAP_EDGE_POS ;
156+ param .signal_invalid_event_data .cap_edge = CAP_EDGE_POS ;
150157 } else {
151- param .signal_invalid_event_data .cap_edge = MCPWM_CAP_EDGE_NEG ;
158+ param .signal_invalid_event_data .cap_edge = CAP_EDGE_NEG ;
152159 }
153160 zero_cross_dev -> event_callback (SIGNAL_INVALID , & param , zero_cross_dev -> user_data );
154161 }
155162 }
156163 if (zero_cross_dev -> event_callback && (zero_cross_dev -> cap_val_end_of_sample != 0 ) && (zero_cross_dev -> cap_val_begin_of_sample != 0 )) {
157164 zero_detect_cb_param_t param = {0 };
158165 if (edge_status ) {
159- param .signal_freq_event_data .cap_edge = MCPWM_CAP_EDGE_POS ;
166+ param .signal_freq_event_data .cap_edge = CAP_EDGE_POS ;
160167 } else {
161- param .signal_freq_event_data .cap_edge = MCPWM_CAP_EDGE_NEG ;
168+ param .signal_freq_event_data .cap_edge = CAP_EDGE_NEG ;
162169 }
163170 param .signal_freq_event_data .full_cycle_us = zero_cross_dev -> full_cycle_us ;
164171 zero_cross_dev -> event_callback (SIGNAL_FREQ_OUT_OF_RANGE , & param , zero_cross_dev -> user_data );
0 commit comments