Skip to content

Commit 77a98e6

Browse files
authored
Merge pull request #7355 from pypewpew/esp32-camera-xclk
esp32-camera: make the master_clock_pin really optional
2 parents 37a3059 + 90c805d commit 77a98e6

File tree

3 files changed

+14
-11
lines changed

3 files changed

+14
-11
lines changed

ports/espressif/bindings/esp32_camera/Camera.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@
5050
//| vsync_pin: microcontroller.Pin,
5151
//| href_pin: microcontroller.Pin,
5252
//| i2c: busio.I2C,
53-
//| external_clock_pin: microcontroller.Pin,
54-
//| external_clock_frequency: int,
53+
//| external_clock_pin: Optional[microcontroller.Pin] = None,
54+
//| external_clock_frequency: int = 20_000_000,
5555
//| powerdown_pin: Optional[microcontroller.Pin] = None,
5656
//| reset_pin: Optional[microcontroller.Pin] = None,
5757
//| pixel_format: PixelFormat = PixelFormat.RGB565,
@@ -101,8 +101,8 @@ STATIC mp_obj_t esp32_camera_camera_make_new(const mp_obj_type_t *type, size_t n
101101
{ MP_QSTR_vsync_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY | MP_ARG_REQUIRED },
102102
{ MP_QSTR_href_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY | MP_ARG_REQUIRED },
103103
{ MP_QSTR_i2c, MP_ARG_OBJ | MP_ARG_KW_ONLY | MP_ARG_REQUIRED },
104-
{ MP_QSTR_external_clock_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY },
105-
{ MP_QSTR_external_clock_frequency, MP_ARG_INT | MP_ARG_REQUIRED },
104+
{ MP_QSTR_external_clock_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = MP_ROM_NONE } },
105+
{ MP_QSTR_external_clock_frequency, MP_ARG_INT | MP_ARG_KW_ONLY, { .u_int = 20000000L } },
106106
{ MP_QSTR_powerdown_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = MP_ROM_NONE } },
107107
{ MP_QSTR_reset_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = MP_ROM_NONE } },
108108
{ MP_QSTR_pixel_format, MP_ARG_OBJ | MP_ARG_KW_ONLY, { .u_obj = MP_ROM_PTR((void *)&pixel_format_RGB565_obj) } },
@@ -125,7 +125,7 @@ STATIC mp_obj_t esp32_camera_camera_make_new(const mp_obj_type_t *type, size_t n
125125
const mcu_pin_obj_t *vsync_pin = validate_obj_is_free_pin(args[ARG_vsync_pin].u_obj);
126126
const mcu_pin_obj_t *href_pin = validate_obj_is_free_pin(args[ARG_href_pin].u_obj);
127127
busio_i2c_obj_t *i2c = MP_OBJ_TO_PTR(mp_arg_validate_type(args[ARG_i2c].u_obj, &busio_i2c_type, MP_QSTR_i2c));
128-
const mcu_pin_obj_t *external_clock_pin = validate_obj_is_free_pin(args[ARG_external_clock_pin].u_obj);
128+
const mcu_pin_obj_t *external_clock_pin = validate_obj_is_free_pin_or_none(args[ARG_external_clock_pin].u_obj);
129129
const mcu_pin_obj_t *powerdown_pin = validate_obj_is_free_pin_or_none(args[ARG_powerdown_pin].u_obj);
130130
const mcu_pin_obj_t *reset_pin = validate_obj_is_free_pin_or_none(args[ARG_reset_pin].u_obj);
131131
const mp_int_t external_clock_frequency = mp_arg_validate_int_range(args[ARG_external_clock_frequency].u_int, 0, 40000000, MP_QSTR_clock_frequency);

ports/espressif/common-hal/esp32_camera/Camera.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,20 @@ void common_hal_esp32_camera_camera_construct(
8585
for (int i = 0; i < 8; i++) {
8686
claim_pin_number(data_pins[i]);
8787
}
88-
claim_pin(external_clock_pin);
88+
maybe_claim_pin(external_clock_pin);
8989
claim_pin(pixel_clock_pin);
9090
claim_pin(vsync_pin);
9191
claim_pin(href_pin);
9292
maybe_claim_pin(powerdown_pin);
9393
maybe_claim_pin(reset_pin);
9494

95-
common_hal_pwmio_pwmout_construct(&self->pwm, external_clock_pin, 1, external_clock_frequency, true);
95+
if (external_clock_pin) {
96+
common_hal_pwmio_pwmout_construct(&self->pwm, external_clock_pin, 1, external_clock_frequency, true);
97+
self->camera_config.ledc_timer = self->pwm.tim_handle.timer_num;
98+
self->camera_config.ledc_channel = self->pwm.chan_handle.channel;
99+
} else {
100+
self->camera_config.ledc_channel = 0xff; // NO_CAMERA_LEDC_CHANNEL
101+
}
96102

97103
self->i2c = i2c;
98104

@@ -119,9 +125,6 @@ void common_hal_esp32_camera_camera_construct(
119125

120126
self->camera_config.xclk_freq_hz = external_clock_frequency;
121127

122-
self->camera_config.ledc_timer = self->pwm.tim_handle.timer_num;
123-
self->camera_config.ledc_channel = self->pwm.chan_handle.channel;
124-
125128
self->camera_config.pixel_format = pixel_format;
126129
self->camera_config.frame_size = frame_size;
127130
self->camera_config.jpeg_quality = jpeg_quality;

0 commit comments

Comments
 (0)