esp32/esp32_rmt: Call rmt_driver_install directly if running on core 1.
Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
357078504d
commit
648656dbbd
|
@ -60,16 +60,18 @@ typedef struct _esp32_rmt_obj_t {
|
||||||
bool loop_en;
|
bool loop_en;
|
||||||
} esp32_rmt_obj_t;
|
} esp32_rmt_obj_t;
|
||||||
|
|
||||||
|
// Current channel used for machine.bitstream, in the machine_bitstream_high_low_rmt
|
||||||
|
// implementation. A value of -1 means do not use RMT.
|
||||||
|
int8_t esp32_rmt_bitstream_channel_id = RMT_CHANNEL_MAX - 1;
|
||||||
|
|
||||||
|
#if MP_TASK_COREID == 0
|
||||||
|
|
||||||
typedef struct _rmt_install_state_t {
|
typedef struct _rmt_install_state_t {
|
||||||
SemaphoreHandle_t handle;
|
SemaphoreHandle_t handle;
|
||||||
uint8_t channel_id;
|
uint8_t channel_id;
|
||||||
esp_err_t ret;
|
esp_err_t ret;
|
||||||
} rmt_install_state_t;
|
} rmt_install_state_t;
|
||||||
|
|
||||||
// Current channel used for machine.bitstream, in the machine_bitstream_high_low_rmt
|
|
||||||
// implementation. A value of -1 means do not use RMT.
|
|
||||||
int8_t esp32_rmt_bitstream_channel_id = RMT_CHANNEL_MAX - 1;
|
|
||||||
|
|
||||||
STATIC void rmt_install_task(void *pvParameter) {
|
STATIC void rmt_install_task(void *pvParameter) {
|
||||||
rmt_install_state_t *state = pvParameter;
|
rmt_install_state_t *state = pvParameter;
|
||||||
state->ret = rmt_driver_install(state->channel_id, 0, 0);
|
state->ret = rmt_driver_install(state->channel_id, 0, 0);
|
||||||
|
@ -92,6 +94,16 @@ esp_err_t rmt_driver_install_core1(uint8_t channel_id) {
|
||||||
return state.ret;
|
return state.ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// MicroPython runs on core 1, so we can call the RMT installer directly and its
|
||||||
|
// interrupt handler will also run on core 1.
|
||||||
|
esp_err_t rmt_driver_install_core1(uint8_t channel_id) {
|
||||||
|
return rmt_driver_install(channel_id, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
STATIC mp_obj_t esp32_rmt_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
|
STATIC mp_obj_t esp32_rmt_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
|
||||||
static const mp_arg_t allowed_args[] = {
|
static const mp_arg_t allowed_args[] = {
|
||||||
{ MP_QSTR_id, MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
|
{ MP_QSTR_id, MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
|
||||||
|
|
Loading…
Reference in New Issue