@@ -115,6 +115,17 @@ static size_t i2s_bytes_per_sample(i2s_sampling_mode_t mode)
115
115
}
116
116
}
117
117
118
+ static void vsync_intr_disable ()
119
+ {
120
+ gpio_set_intr_type (s_state -> config .pin_vsync , GPIO_INTR_DISABLE );
121
+ }
122
+
123
+ static void vsync_intr_enable ()
124
+ {
125
+ gpio_set_intr_type (s_state -> config .pin_vsync , GPIO_INTR_NEGEDGE );
126
+ }
127
+
128
+
118
129
esp_err_t camera_probe (const camera_config_t * config , camera_model_t * out_camera_model )
119
130
{
120
131
if (s_state != NULL ) {
@@ -321,13 +332,10 @@ esp_err_t camera_init(const camera_config_t* config)
321
332
}
322
333
323
334
ESP_LOGD (TAG , "Initializing GPIO interrupts" );
324
- gpio_set_intr_type (s_state -> config .pin_vsync , GPIO_INTR_NEGEDGE );
325
- gpio_intr_enable (s_state -> config .pin_vsync );
326
- err = gpio_isr_register (& gpio_isr , (void * ) TAG ,
327
- ESP_INTR_FLAG_INTRDISABLED | ESP_INTR_FLAG_IRAM ,
328
- & s_state -> vsync_intr_handle );
335
+ vsync_intr_disable ();
336
+ err = gpio_isr_handler_add (s_state -> config .pin_vsync , & gpio_isr , NULL );
329
337
if (err != ESP_OK ) {
330
- ESP_LOGE (TAG , "gpio_isr_register failed (%x)" , err );
338
+ ESP_LOGE (TAG , "gpio_isr_handler_add failed (%x)" , err );
331
339
goto fail ;
332
340
}
333
341
@@ -364,10 +372,7 @@ esp_err_t camera_deinit()
364
372
if (s_state -> frame_ready ) {
365
373
vSemaphoreDelete (s_state -> frame_ready );
366
374
}
367
- if (s_state -> vsync_intr_handle ) {
368
- esp_intr_disable (s_state -> vsync_intr_handle );
369
- esp_intr_free (s_state -> vsync_intr_handle );
370
- }
375
+ gpio_isr_handler_remove (s_state -> config .pin_vsync );
371
376
if (s_state -> i2s_intr_handle ) {
372
377
esp_intr_disable (s_state -> i2s_intr_handle );
373
378
esp_intr_free (s_state -> i2s_intr_handle );
@@ -605,7 +610,7 @@ static void i2s_init()
605
610
static void i2s_stop ()
606
611
{
607
612
esp_intr_disable (s_state -> i2s_intr_handle );
608
- esp_intr_disable ( s_state -> vsync_intr_handle );
613
+ vsync_intr_disable ( );
609
614
i2s_conf_reset ();
610
615
I2S0 .conf .rx_start = 0 ;
611
616
size_t val = SIZE_MAX ;
@@ -649,7 +654,7 @@ static void i2s_run()
649
654
I2S0 .int_ena .in_done = 1 ;
650
655
esp_intr_enable (s_state -> i2s_intr_handle );
651
656
if (s_state -> config .pixel_format == CAMERA_PF_JPEG ) {
652
- esp_intr_enable ( s_state -> vsync_intr_handle );
657
+ vsync_intr_enable ( );
653
658
}
654
659
I2S0 .conf .rx_start = 1 ;
655
660
@@ -684,8 +689,6 @@ static void IRAM_ATTR i2s_isr(void* arg)
684
689
685
690
static void IRAM_ATTR gpio_isr (void * arg )
686
691
{
687
- GPIO .status1_w1tc .val = GPIO .status1 .val ;
688
- GPIO .status_w1tc = GPIO .status ;
689
692
bool need_yield = false;
690
693
ESP_EARLY_LOGV (TAG , "gpio isr, cnt=%d" , s_state -> dma_received_count );
691
694
if (gpio_get_level (s_state -> config .pin_vsync ) == 0 &&
0 commit comments