Lines Matching refs:channel
56 #define RMT_IS_RX_CHANNEL(channel) ((channel) >= RMT_RX_CHANNEL_ENCODING_START) argument
57 #define RMT_IS_TX_CHANNEL(channel) ((channel) <= RMT_TX_CHANNEL_ENCODING_END) argument
79 rmt_channel_t channel; member
146 esp_err_t rmt_set_clk_div(rmt_channel_t channel, uint8_t div_cnt) in rmt_set_clk_div() argument
148 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_clk_div()
150 if (RMT_IS_RX_CHANNEL(channel)) { in rmt_set_clk_div()
151 … rmt_ll_rx_set_channel_clock_div(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), div_cnt); in rmt_set_clk_div()
153 rmt_ll_tx_set_channel_clock_div(rmt_contex.hal.regs, channel, div_cnt); in rmt_set_clk_div()
159 esp_err_t rmt_get_clk_div(rmt_channel_t channel, uint8_t *div_cnt) in rmt_get_clk_div() argument
161 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_clk_div()
164 if (RMT_IS_RX_CHANNEL(channel)) { in rmt_get_clk_div()
165 …nt = (uint8_t)rmt_ll_rx_get_channel_clock_div(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_get_clk_div()
167 *div_cnt = (uint8_t)rmt_ll_tx_get_channel_clock_div(rmt_contex.hal.regs, channel); in rmt_get_clk_div()
173 esp_err_t rmt_set_rx_idle_thresh(rmt_channel_t channel, uint16_t thresh) in rmt_set_rx_idle_thresh() argument
175 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_set_rx_idle_thresh()
177 rmt_ll_rx_set_idle_thres(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), thresh); in rmt_set_rx_idle_thresh()
182 esp_err_t rmt_get_rx_idle_thresh(rmt_channel_t channel, uint16_t *thresh) in rmt_get_rx_idle_thresh() argument
184 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_get_rx_idle_thresh()
187 … *thresh = (uint16_t)rmt_ll_rx_get_idle_thres(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_get_rx_idle_thresh()
192 esp_err_t rmt_set_mem_block_num(rmt_channel_t channel, uint8_t rmt_mem_num) in rmt_set_mem_block_num() argument
194 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_mem_block_num()
195 …ESP_RETURN_ON_FALSE(rmt_mem_num <= RMT_CHANNEL_MAX - channel, ESP_ERR_INVALID_ARG, TAG, RMT_MEM_CN… in rmt_set_mem_block_num()
197 if (RMT_IS_RX_CHANNEL(channel)) { in rmt_set_mem_block_num()
198 rmt_ll_rx_set_mem_blocks(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), rmt_mem_num); in rmt_set_mem_block_num()
200 rmt_ll_tx_set_mem_blocks(rmt_contex.hal.regs, channel, rmt_mem_num); in rmt_set_mem_block_num()
206 esp_err_t rmt_get_mem_block_num(rmt_channel_t channel, uint8_t *rmt_mem_num) in rmt_get_mem_block_num() argument
208 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_mem_block_num()
211 if (RMT_IS_RX_CHANNEL(channel)) { in rmt_get_mem_block_num()
212 …t_mem_num = (uint8_t)rmt_ll_rx_get_mem_blocks(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_get_mem_block_num()
214 *rmt_mem_num = (uint8_t)rmt_ll_tx_get_mem_blocks(rmt_contex.hal.regs, channel); in rmt_get_mem_block_num()
220 esp_err_t rmt_set_tx_carrier(rmt_channel_t channel, bool carrier_en, uint16_t high_level, uint16_t … in rmt_set_tx_carrier() argument
223 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_tx_carrier()
226 rmt_ll_tx_set_carrier_high_low_ticks(rmt_contex.hal.regs, channel, high_level, low_level); in rmt_set_tx_carrier()
227 rmt_ll_tx_set_carrier_level(rmt_contex.hal.regs, channel, carrier_level); in rmt_set_tx_carrier()
228 rmt_ll_tx_enable_carrier_modulation(rmt_contex.hal.regs, channel, carrier_en); in rmt_set_tx_carrier()
233 esp_err_t rmt_set_mem_pd(rmt_channel_t channel, bool pd_en) in rmt_set_mem_pd() argument
235 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_mem_pd()
242 esp_err_t rmt_get_mem_pd(rmt_channel_t channel, bool *pd_en) in rmt_get_mem_pd() argument
244 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_mem_pd()
251 esp_err_t rmt_tx_start(rmt_channel_t channel, bool tx_idx_rst) in rmt_tx_start() argument
253 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_tx_start()
256 rmt_ll_tx_reset_pointer(rmt_contex.hal.regs, channel); in rmt_tx_start()
258 rmt_ll_clear_interrupt_status(rmt_contex.hal.regs, RMT_LL_EVENT_TX_DONE(channel)); in rmt_tx_start()
260 if (!rmt_ll_tx_is_loop_enabled(rmt_contex.hal.regs, channel)) { in rmt_tx_start()
261 rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_TX_DONE(channel), true); in rmt_tx_start()
264 rmt_ll_tx_reset_loop_count(rmt_contex.hal.regs, channel); in rmt_tx_start()
265 rmt_ll_tx_enable_loop_count(rmt_contex.hal.regs, channel, true); in rmt_tx_start()
266 rmt_ll_clear_interrupt_status(rmt_contex.hal.regs, RMT_LL_EVENT_TX_LOOP_END(channel)); in rmt_tx_start()
267 rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_TX_LOOP_END(channel), true); in rmt_tx_start()
270 rmt_ll_tx_start(rmt_contex.hal.regs, channel); in rmt_tx_start()
275 esp_err_t rmt_tx_stop(rmt_channel_t channel) in rmt_tx_stop() argument
277 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_tx_stop()
280 rmt_ll_tx_stop(rmt_contex.hal.regs, channel); in rmt_tx_stop()
283 RMTMEM.chan[channel].data32[0].val = 0; in rmt_tx_stop()
285 rmt_ll_tx_reset_pointer(rmt_contex.hal.regs, channel); in rmt_tx_stop()
291 esp_err_t rmt_set_rx_thr_intr_en(rmt_channel_t channel, bool en, uint16_t evt_thresh) in rmt_set_rx_thr_intr_en() argument
293 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_set_rx_thr_intr_en()
295 …en = rmt_ll_rx_get_mem_blocks(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)) * RMT_MEM_ITEM_… in rmt_set_rx_thr_intr_en()
298 rmt_ll_rx_set_limit(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), evt_thresh); in rmt_set_rx_thr_intr_en()
299 …enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_RX_THRES(RMT_DECODE_RX_CHANNEL(channel)), true); in rmt_set_rx_thr_intr_en()
303 …nable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_RX_THRES(RMT_DECODE_RX_CHANNEL(channel)), false); in rmt_set_rx_thr_intr_en()
310 esp_err_t rmt_rx_start(rmt_channel_t channel, bool rx_idx_rst) in rmt_rx_start() argument
312 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_rx_start()
314 rmt_ll_rx_enable(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), false); in rmt_rx_start()
316 rmt_ll_rx_reset_pointer(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_rx_start()
318 …_clear_interrupt_status(rmt_contex.hal.regs, RMT_LL_EVENT_RX_DONE(RMT_DECODE_RX_CHANNEL(channel))); in rmt_rx_start()
319 …rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_RX_DONE(RMT_DECODE_RX_CHANNEL(channel)),… in rmt_rx_start()
322 …en = rmt_ll_rx_get_mem_blocks(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)) * RMT_MEM_ITEM_… in rmt_rx_start()
323 p_rmt_obj[channel]->rx_item_start_idx = 0; in rmt_rx_start()
324 p_rmt_obj[channel]->rx_item_len = 0; in rmt_rx_start()
325 rmt_set_rx_thr_intr_en(channel, true, item_block_len / 2); in rmt_rx_start()
328 rmt_ll_rx_enable(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), true); in rmt_rx_start()
333 esp_err_t rmt_rx_stop(rmt_channel_t channel) in rmt_rx_stop() argument
335 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_rx_stop()
337 …rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_RX_DONE(RMT_DECODE_RX_CHANNEL(channel)),… in rmt_rx_stop()
338 rmt_ll_rx_enable(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), false); in rmt_rx_stop()
339 rmt_ll_rx_reset_pointer(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_rx_stop()
341 …nable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_RX_THRES(RMT_DECODE_RX_CHANNEL(channel)), false); in rmt_rx_stop()
347 esp_err_t rmt_tx_memory_reset(rmt_channel_t channel) in rmt_tx_memory_reset() argument
349 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_tx_memory_reset()
351 rmt_ll_tx_reset_pointer(rmt_contex.hal.regs, channel); in rmt_tx_memory_reset()
356 esp_err_t rmt_rx_memory_reset(rmt_channel_t channel) in rmt_rx_memory_reset() argument
358 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_rx_memory_reset()
360 rmt_ll_rx_reset_pointer(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_rx_memory_reset()
365 esp_err_t rmt_set_memory_owner(rmt_channel_t channel, rmt_mem_owner_t owner) in rmt_set_memory_owner() argument
367 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_set_memory_owner()
370 rmt_ll_rx_set_mem_owner(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), owner); in rmt_set_memory_owner()
375 esp_err_t rmt_get_memory_owner(rmt_channel_t channel, rmt_mem_owner_t *owner) in rmt_get_memory_owner() argument
377 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_get_memory_owner()
380 …er = (rmt_mem_owner_t)rmt_ll_rx_get_mem_owner(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_get_memory_owner()
385 esp_err_t rmt_set_tx_loop_mode(rmt_channel_t channel, bool loop_en) in rmt_set_tx_loop_mode() argument
387 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_tx_loop_mode()
389 rmt_ll_tx_enable_loop(rmt_contex.hal.regs, channel, loop_en); in rmt_set_tx_loop_mode()
394 esp_err_t rmt_get_tx_loop_mode(rmt_channel_t channel, bool *loop_en) in rmt_get_tx_loop_mode() argument
396 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_tx_loop_mode()
398 *loop_en = rmt_ll_tx_is_loop_enabled(rmt_contex.hal.regs, channel); in rmt_get_tx_loop_mode()
403 esp_err_t rmt_set_rx_filter(rmt_channel_t channel, bool rx_filter_en, uint8_t thresh) in rmt_set_rx_filter() argument
405 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_set_rx_filter()
407 rmt_ll_rx_enable_filter(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), rx_filter_en); in rmt_set_rx_filter()
408 rmt_ll_rx_set_filter_thres(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel), thresh); in rmt_set_rx_filter()
413 esp_err_t rmt_set_source_clk(rmt_channel_t channel, rmt_source_clk_t base_clk) in rmt_set_source_clk() argument
415 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_source_clk()
418 rmt_ll_set_group_clock_src(rmt_contex.hal.regs, channel, (rmt_clock_source_t)base_clk, 1, 0, 0); in rmt_set_source_clk()
423 esp_err_t rmt_get_source_clk(rmt_channel_t channel, rmt_source_clk_t *src_clk) in rmt_get_source_clk() argument
425 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_source_clk()
428 *src_clk = (rmt_source_clk_t)rmt_ll_get_group_clock_src(rmt_contex.hal.regs, channel); in rmt_get_source_clk()
433 esp_err_t rmt_set_idle_level(rmt_channel_t channel, bool idle_out_en, rmt_idle_level_t level) in rmt_set_idle_level() argument
435 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_idle_level()
438 rmt_ll_tx_fix_idle_level(rmt_contex.hal.regs, channel, level, idle_out_en); in rmt_set_idle_level()
443 esp_err_t rmt_get_idle_level(rmt_channel_t channel, bool *idle_out_en, rmt_idle_level_t *level) in rmt_get_idle_level() argument
445 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_idle_level()
447 *idle_out_en = rmt_ll_tx_is_idle_enabled(rmt_contex.hal.regs, channel); in rmt_get_idle_level()
448 *level = rmt_ll_tx_get_idle_level(rmt_contex.hal.regs, channel); in rmt_get_idle_level()
453 esp_err_t rmt_get_status(rmt_channel_t channel, uint32_t *status) in rmt_get_status() argument
455 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_status()
457 if (RMT_IS_RX_CHANNEL(channel)) { in rmt_get_status()
458 *status = rmt_ll_rx_get_status_word(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_get_status()
460 *status = rmt_ll_tx_get_status_word(rmt_contex.hal.regs, channel); in rmt_get_status()
466 esp_err_t rmt_set_rx_intr_en(rmt_channel_t channel, bool en) in rmt_set_rx_intr_en() argument
468 …ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel) && channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, … in rmt_set_rx_intr_en()
470 …rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_RX_DONE(RMT_DECODE_RX_CHANNEL(channel)),… in rmt_set_rx_intr_en()
475 esp_err_t rmt_set_err_intr_en(rmt_channel_t channel, bool en) in rmt_set_err_intr_en() argument
477 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_err_intr_en()
479 if (RMT_IS_RX_CHANNEL(channel)) { in rmt_set_err_intr_en()
480 …l_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_RX_ERROR(RMT_DECODE_RX_CHANNEL(channel)), en); in rmt_set_err_intr_en()
482 rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_TX_ERROR(channel), en); in rmt_set_err_intr_en()
488 esp_err_t rmt_set_tx_intr_en(rmt_channel_t channel, bool en) in rmt_set_tx_intr_en() argument
490 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_tx_intr_en()
492 rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_TX_DONE(channel), en); in rmt_set_tx_intr_en()
497 esp_err_t rmt_set_tx_thr_intr_en(rmt_channel_t channel, bool en, uint16_t evt_thresh) in rmt_set_tx_thr_intr_en() argument
499 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_tx_thr_intr_en()
501 …uint32_t item_block_len = rmt_ll_tx_get_mem_blocks(rmt_contex.hal.regs, channel) * RMT_MEM_ITEM_NU… in rmt_set_tx_thr_intr_en()
504 rmt_ll_tx_set_limit(rmt_contex.hal.regs, channel, evt_thresh); in rmt_set_tx_thr_intr_en()
505 rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_TX_THRES(channel), true); in rmt_set_tx_thr_intr_en()
509 rmt_ll_enable_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_TX_THRES(channel), false); in rmt_set_tx_thr_intr_en()
515 esp_err_t rmt_set_gpio(rmt_channel_t channel, rmt_mode_t mode, gpio_num_t gpio_num, bool invert_sig… in rmt_set_gpio() argument
517 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_gpio()
524 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_gpio()
526 …esp_rom_gpio_connect_out_signal(gpio_num, rmt_periph_signals.groups[0].channels[channel].tx_sig, i… in rmt_set_gpio()
528 … ESP_RETURN_ON_FALSE(RMT_IS_RX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_gpio()
530 …esp_rom_gpio_connect_in_signal(gpio_num, rmt_periph_signals.groups[0].channels[channel].rx_sig, in… in rmt_set_gpio()
535 static bool rmt_is_channel_number_valid(rmt_channel_t channel, uint8_t mode) in rmt_is_channel_number_valid() argument
539 return RMT_IS_RX_CHANNEL(channel) && (channel < RMT_CHANNEL_MAX); in rmt_is_channel_number_valid()
542 return (channel >= 0) && RMT_IS_TX_CHANNEL(channel); in rmt_is_channel_number_valid()
548 uint8_t channel = rmt_param->channel; in rmt_internal_config() local
556 …ESP_RETURN_ON_FALSE(rmt_is_channel_number_valid(channel, mode), ESP_ERR_INVALID_ARG, TAG, RMT_CHAN… in rmt_internal_config()
557 …ESP_RETURN_ON_FALSE(mem_cnt + channel <= SOC_RMT_CHANNELS_PER_GROUP && mem_cnt > 0, ESP_ERR_INVALI… in rmt_internal_config()
571 rmt_ll_set_group_clock_src(dev, channel, (rmt_clock_source_t)RMT_BASECLK_XTAL, 1, 0, 0); in rmt_internal_config()
575 rmt_ll_set_group_clock_src(dev, channel, (rmt_clock_source_t)RMT_BASECLK_REF, 1, 0, 0); in rmt_internal_config()
582 rmt_ll_set_group_clock_src(dev, channel, (rmt_clock_source_t)RMT_BASECLK_DEFAULT, 1, 0, 0); in rmt_internal_config()
587 s_rmt_source_clock_hz[channel] = rmt_source_clk_hz; in rmt_internal_config()
602 rmt_ll_tx_set_channel_clock_div(dev, channel, clk_div); in rmt_internal_config()
603 rmt_ll_tx_set_mem_blocks(dev, channel, mem_cnt); in rmt_internal_config()
604 rmt_ll_tx_reset_pointer(dev, channel); in rmt_internal_config()
605 rmt_ll_tx_enable_loop(dev, channel, rmt_param->tx_config.loop_en); in rmt_internal_config()
608 rmt_ll_tx_set_loop_count(dev, channel, rmt_param->tx_config.loop_count); in rmt_internal_config()
612 rmt_ll_tx_enable_wrap(dev, channel, true); in rmt_internal_config()
614 rmt_ll_tx_fix_idle_level(dev, channel, idle_level, rmt_param->tx_config.idle_output_en); in rmt_internal_config()
616 rmt_ll_tx_enable_carrier_modulation(dev, channel, carrier_en); in rmt_internal_config()
622 rmt_ll_tx_set_carrier_level(dev, channel, carrier_level); in rmt_internal_config()
623 rmt_ll_tx_set_carrier_high_low_ticks(dev, channel, duty_h, duty_l); in rmt_internal_config()
625 rmt_ll_tx_set_carrier_level(dev, channel, 0); in rmt_internal_config()
630 … channel, gpio_num, rmt_source_clk_hz, clk_div, carrier_freq_hz, carrier_duty_percent); in rmt_internal_config()
636 rmt_ll_rx_set_channel_clock_div(dev, RMT_DECODE_RX_CHANNEL(channel), clk_div); in rmt_internal_config()
637 rmt_ll_rx_set_mem_blocks(dev, RMT_DECODE_RX_CHANNEL(channel), mem_cnt); in rmt_internal_config()
638 rmt_ll_rx_reset_pointer(dev, RMT_DECODE_RX_CHANNEL(channel)); in rmt_internal_config()
639 rmt_ll_rx_set_mem_owner(dev, RMT_DECODE_RX_CHANNEL(channel), RMT_LL_MEM_OWNER_HW); in rmt_internal_config()
641 rmt_ll_rx_set_idle_thres(dev, RMT_DECODE_RX_CHANNEL(channel), threshold); in rmt_internal_config()
643 rmt_ll_rx_set_filter_thres(dev, RMT_DECODE_RX_CHANNEL(channel), filter_cnt); in rmt_internal_config()
644 … rmt_ll_rx_enable_filter(dev, RMT_DECODE_RX_CHANNEL(channel), rmt_param->rx_config.filter_en); in rmt_internal_config()
648 rmt_ll_rx_enable_wrap(dev, RMT_DECODE_RX_CHANNEL(channel), true); in rmt_internal_config()
652 …rmt_ll_rx_enable_carrier_demodulation(dev, RMT_DECODE_RX_CHANNEL(channel), rmt_param->rx_config.rm… in rmt_internal_config()
654 …urce_clk_hz / rmt_ll_rx_get_channel_clock_div(dev, RMT_DECODE_RX_CHANNEL(channel)) / rmt_param->rx… in rmt_internal_config()
657 …rmt_ll_rx_set_carrier_high_low_ticks(dev, RMT_DECODE_RX_CHANNEL(channel), duty_high * 2, (duty_tot… in rmt_internal_config()
658 …rmt_ll_rx_set_carrier_level(dev, RMT_DECODE_RX_CHANNEL(channel), rmt_param->rx_config.carrier_leve… in rmt_internal_config()
664 channel, gpio_num, rmt_source_clk_hz, clk_div, threshold, filter_cnt); in rmt_internal_config()
674 …ESP_RETURN_ON_ERROR(rmt_set_gpio(rmt_param->channel, rmt_param->rmt_mode, rmt_param->gpio_num, rmt… in rmt_config()
680 static void IRAM_ATTR rmt_fill_memory(rmt_channel_t channel, const rmt_item32_t *item, in rmt_fill_memory() argument
684 volatile uint32_t *to = (volatile uint32_t *)&RMTMEM.chan[channel].data32[0].val; in rmt_fill_memory()
691 esp_err_t rmt_fill_tx_items(rmt_channel_t channel, const rmt_item32_t *item, uint16_t item_num, uin… in rmt_fill_tx_items() argument
693 ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), (0), TAG, RMT_CHANNEL_ERROR_STR); in rmt_fill_tx_items()
697 uint8_t mem_cnt = rmt_ll_tx_get_mem_blocks(rmt_contex.hal.regs, channel); in rmt_fill_tx_items()
699 rmt_fill_memory(channel, item, item_num, mem_offset); in rmt_fill_tx_items()
720 uint8_t channel = 0; in rmt_driver_isr_default() local
727 channel = __builtin_ffs(status) - 1; in rmt_driver_isr_default()
728 status &= ~(1 << channel); in rmt_driver_isr_default()
729 rmt_obj_t *p_rmt = p_rmt_obj[channel]; in rmt_driver_isr_default()
732 rmt_ll_tx_reset_pointer(rmt_contex.hal.regs, channel); in rmt_driver_isr_default()
740 … rmt_contex.rmt_tx_end_callback.function(channel, rmt_contex.rmt_tx_end_callback.arg); in rmt_driver_isr_default()
743 rmt_ll_clear_interrupt_status(hal->regs, RMT_LL_EVENT_TX_DONE(channel)); in rmt_driver_isr_default()
749 channel = __builtin_ffs(status) - 1; in rmt_driver_isr_default()
750 status &= ~(1 << channel); in rmt_driver_isr_default()
751 rmt_obj_t *p_rmt = p_rmt_obj[channel]; in rmt_driver_isr_default()
772 rmt_idle_level_t idle_level = rmt_ll_tx_get_idle_level(hal->regs, channel); in rmt_driver_isr_default()
778 rmt_fill_memory(channel, pdata, p_rmt->tx_sub_len, p_rmt->tx_offset); in rmt_driver_isr_default()
782 rmt_fill_memory(channel, &stop_data, 1, p_rmt->tx_offset); in rmt_driver_isr_default()
784 rmt_fill_memory(channel, pdata, len_rem, p_rmt->tx_offset); in rmt_driver_isr_default()
785 rmt_fill_memory(channel, &stop_data, 1, p_rmt->tx_offset + len_rem); in rmt_driver_isr_default()
795 rmt_ll_clear_interrupt_status(hal->regs, RMT_LL_EVENT_TX_THRES(channel)); in rmt_driver_isr_default()
801 channel = __builtin_ffs(status) - 1; in rmt_driver_isr_default()
802 status &= ~(1 << channel); in rmt_driver_isr_default()
803 rmt_obj_t *p_rmt = p_rmt_obj[RMT_ENCODE_RX_CHANNEL(channel)]; in rmt_driver_isr_default()
805 rmt_ll_rx_enable(rmt_contex.hal.regs, channel, false); in rmt_driver_isr_default()
806 int item_len = rmt_ll_rx_get_memory_writer_offset(rmt_contex.hal.regs, channel); in rmt_driver_isr_default()
807 rmt_ll_rx_set_mem_owner(rmt_contex.hal.regs, channel, RMT_LL_MEM_OWNER_SW); in rmt_driver_isr_default()
809 addr = (rmt_item32_t *)RMTMEM.chan[RMT_ENCODE_RX_CHANNEL(channel)].data32; in rmt_driver_isr_default()
832 rmt_ll_rx_reset_pointer(rmt_contex.hal.regs, channel); in rmt_driver_isr_default()
833 rmt_ll_rx_set_mem_owner(rmt_contex.hal.regs, channel, RMT_LL_MEM_OWNER_HW); in rmt_driver_isr_default()
834 rmt_ll_rx_enable(rmt_contex.hal.regs, channel, true); in rmt_driver_isr_default()
836 rmt_ll_clear_interrupt_status(hal->regs, RMT_LL_EVENT_RX_DONE(channel)); in rmt_driver_isr_default()
843 channel = __builtin_ffs(status) - 1; in rmt_driver_isr_default()
844 status &= ~(1 << channel); in rmt_driver_isr_default()
845 rmt_obj_t *p_rmt = p_rmt_obj[RMT_ENCODE_RX_CHANNEL(channel)]; in rmt_driver_isr_default()
846 … int mem_item_size = rmt_ll_rx_get_mem_blocks(rmt_contex.hal.regs, channel) * RMT_MEM_ITEM_NUM; in rmt_driver_isr_default()
847 int rx_thres_lim = rmt_ll_rx_get_limit(rmt_contex.hal.regs, channel); in rmt_driver_isr_default()
850 rmt_ll_rx_set_mem_owner(rmt_contex.hal.regs, channel, RMT_LL_MEM_OWNER_SW); in rmt_driver_isr_default()
851 …em_buf + p_rmt->rx_item_len), (void *)(RMTMEM.chan[RMT_ENCODE_RX_CHANNEL(channel)].data32 + p_rmt-… in rmt_driver_isr_default()
852 rmt_ll_rx_set_mem_owner(rmt_contex.hal.regs, channel, RMT_LL_MEM_OWNER_HW); in rmt_driver_isr_default()
861 rmt_ll_clear_interrupt_status(hal->regs, RMT_LL_EVENT_RX_THRES(channel)); in rmt_driver_isr_default()
869 channel = __builtin_ffs(status) - 1; in rmt_driver_isr_default()
870 status &= ~(1 << channel); in rmt_driver_isr_default()
871 rmt_obj_t *p_rmt = p_rmt_obj[channel]; in rmt_driver_isr_default()
876 rmt_ll_tx_stop(rmt_contex.hal.regs, channel); in rmt_driver_isr_default()
877 rmt_ll_tx_reset_pointer(rmt_contex.hal.regs, channel); in rmt_driver_isr_default()
882 … rmt_contex.rmt_tx_end_callback.function(channel, rmt_contex.rmt_tx_end_callback.arg); in rmt_driver_isr_default()
885 rmt_ll_clear_interrupt_status(hal->regs, RMT_LL_EVENT_TX_LOOP_END(channel)); in rmt_driver_isr_default()
892 channel = __builtin_ffs(status) - 1; in rmt_driver_isr_default()
893 status &= ~(1 << channel); in rmt_driver_isr_default()
894 rmt_obj_t *p_rmt = p_rmt_obj[RMT_ENCODE_RX_CHANNEL(channel)]; in rmt_driver_isr_default()
897 rmt_ll_rx_reset_pointer(rmt_contex.hal.regs, channel); in rmt_driver_isr_default()
898 ESP_DRAM_LOGD(TAG, "RMT RX channel %d error", channel); in rmt_driver_isr_default()
899 … ESP_DRAM_LOGD(TAG, "status: 0x%08x", rmt_ll_rx_get_status_word(rmt_contex.hal.regs, channel)); in rmt_driver_isr_default()
901 rmt_ll_clear_interrupt_status(hal->regs, RMT_LL_EVENT_RX_ERROR(channel)); in rmt_driver_isr_default()
907 channel = __builtin_ffs(status) - 1; in rmt_driver_isr_default()
908 status &= ~(1 << channel); in rmt_driver_isr_default()
909 rmt_obj_t *p_rmt = p_rmt_obj[channel]; in rmt_driver_isr_default()
912 rmt_ll_tx_reset_pointer(rmt_contex.hal.regs, channel); in rmt_driver_isr_default()
913 ESP_DRAM_LOGD(TAG, "RMT TX channel %d error", channel); in rmt_driver_isr_default()
914 … ESP_DRAM_LOGD(TAG, "status: 0x%08x", rmt_ll_tx_get_status_word(rmt_contex.hal.regs, channel)); in rmt_driver_isr_default()
916 rmt_ll_clear_interrupt_status(hal->regs, RMT_LL_EVENT_TX_ERROR(channel)); in rmt_driver_isr_default()
924 esp_err_t rmt_driver_uninstall(rmt_channel_t channel) in rmt_driver_uninstall() argument
927 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_driver_uninstall()
929 if (p_rmt_obj[channel] == NULL) { in rmt_driver_uninstall()
933 if (p_rmt_obj[channel]->wait_done) { in rmt_driver_uninstall()
934 xSemaphoreTake(p_rmt_obj[channel]->tx_sem, portMAX_DELAY); in rmt_driver_uninstall()
939 if (p_rmt_obj[channel]->rx_buf) { in rmt_driver_uninstall()
940 …, RMT_LL_EVENT_RX_MASK(RMT_DECODE_RX_CHANNEL(channel)) | RMT_LL_EVENT_RX_ERROR(RMT_DECODE_RX_CHANN… in rmt_driver_uninstall()
942 …ble_interrupt(rmt_contex.hal.regs, RMT_LL_EVENT_TX_MASK(channel) | RMT_LL_EVENT_TX_ERROR(channel),… in rmt_driver_uninstall()
947 rmt_contex.rmt_driver_channels &= ~BIT(channel); in rmt_driver_uninstall()
956 if (p_rmt_obj[channel]->tx_sem) { in rmt_driver_uninstall()
957 vSemaphoreDelete(p_rmt_obj[channel]->tx_sem); in rmt_driver_uninstall()
958 p_rmt_obj[channel]->tx_sem = NULL; in rmt_driver_uninstall()
960 if (p_rmt_obj[channel]->rx_buf) { in rmt_driver_uninstall()
961 vRingbufferDelete(p_rmt_obj[channel]->rx_buf); in rmt_driver_uninstall()
962 p_rmt_obj[channel]->rx_buf = NULL; in rmt_driver_uninstall()
964 if (p_rmt_obj[channel]->tx_buf) { in rmt_driver_uninstall()
965 free(p_rmt_obj[channel]->tx_buf); in rmt_driver_uninstall()
966 p_rmt_obj[channel]->tx_buf = NULL; in rmt_driver_uninstall()
968 if (p_rmt_obj[channel]->sample_to_rmt) { in rmt_driver_uninstall()
969 p_rmt_obj[channel]->sample_to_rmt = NULL; in rmt_driver_uninstall()
972 if (p_rmt_obj[channel]->rx_item_buf) { in rmt_driver_uninstall()
973 free(p_rmt_obj[channel]->rx_item_buf); in rmt_driver_uninstall()
974 p_rmt_obj[channel]->rx_item_buf = NULL; in rmt_driver_uninstall()
975 p_rmt_obj[channel]->rx_item_buf_size = 0; in rmt_driver_uninstall()
979 free(p_rmt_obj[channel]); in rmt_driver_uninstall()
980 p_rmt_obj[channel] = NULL; in rmt_driver_uninstall()
984 esp_err_t rmt_driver_install(rmt_channel_t channel, size_t rx_buf_size, int intr_alloc_flags) in rmt_driver_install() argument
986 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_driver_install()
990 if (p_rmt_obj[channel]) { in rmt_driver_install()
1003 p_rmt_obj[channel] = calloc(1, sizeof(rmt_obj_t)); in rmt_driver_install()
1006 p_rmt_obj[channel] = calloc(1, sizeof(rmt_obj_t)); in rmt_driver_install()
1008 …p_rmt_obj[channel] = heap_caps_calloc(1, sizeof(rmt_obj_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT); in rmt_driver_install()
1012 if (p_rmt_obj[channel] == NULL) { in rmt_driver_install()
1017 p_rmt_obj[channel]->tx_len_rem = 0; in rmt_driver_install()
1018 p_rmt_obj[channel]->tx_data = NULL; in rmt_driver_install()
1019 p_rmt_obj[channel]->channel = channel; in rmt_driver_install()
1020 p_rmt_obj[channel]->tx_offset = 0; in rmt_driver_install()
1021 p_rmt_obj[channel]->tx_sub_len = 0; in rmt_driver_install()
1022 p_rmt_obj[channel]->wait_done = false; in rmt_driver_install()
1023 p_rmt_obj[channel]->loop_autostop = false; in rmt_driver_install()
1024 p_rmt_obj[channel]->translator = false; in rmt_driver_install()
1025 p_rmt_obj[channel]->sample_to_rmt = NULL; in rmt_driver_install()
1026 if (p_rmt_obj[channel]->tx_sem == NULL) { in rmt_driver_install()
1028 p_rmt_obj[channel]->tx_sem = xSemaphoreCreateBinary(); in rmt_driver_install()
1030 p_rmt_obj[channel]->intr_alloc_flags = intr_alloc_flags; in rmt_driver_install()
1032 p_rmt_obj[channel]->tx_sem = xSemaphoreCreateBinary(); in rmt_driver_install()
1034 … p_rmt_obj[channel]->tx_sem = xSemaphoreCreateBinaryStatic(&p_rmt_obj[channel]->tx_sem_buffer); in rmt_driver_install()
1037 xSemaphoreGive(p_rmt_obj[channel]->tx_sem); in rmt_driver_install()
1039 if (p_rmt_obj[channel]->rx_buf == NULL && rx_buf_size > 0) { in rmt_driver_install()
1040 p_rmt_obj[channel]->rx_buf = xRingbufferCreate(rx_buf_size, RINGBUF_TYPE_NOSPLIT); in rmt_driver_install()
1044 if (p_rmt_obj[channel]->rx_item_buf == NULL && rx_buf_size > 0) { in rmt_driver_install()
1046 p_rmt_obj[channel]->rx_item_buf = calloc(1, rx_buf_size); in rmt_driver_install()
1048 if (!(p_rmt_obj[channel]->intr_alloc_flags & ESP_INTR_FLAG_IRAM)) { in rmt_driver_install()
1049 p_rmt_obj[channel]->rx_item_buf = calloc(1, rx_buf_size); in rmt_driver_install()
1051 …p_rmt_obj[channel]->rx_item_buf = heap_caps_calloc(1, rx_buf_size, MALLOC_CAP_INTERNAL | MALLOC_CA… in rmt_driver_install()
1054 if (p_rmt_obj[channel]->rx_item_buf == NULL) { in rmt_driver_install()
1058 p_rmt_obj[channel]->rx_item_buf_size = rx_buf_size; in rmt_driver_install()
1069 rmt_contex.rmt_driver_channels |= BIT(channel); in rmt_driver_install()
1075 if (RMT_IS_RX_CHANNEL(channel)) { in rmt_driver_install()
1076 rmt_hal_rx_channel_reset(&rmt_contex.hal, RMT_DECODE_RX_CHANNEL(channel)); in rmt_driver_install()
1078 rmt_hal_tx_channel_reset(&rmt_contex.hal, channel); in rmt_driver_install()
1084 esp_err_t rmt_write_items(rmt_channel_t channel, const rmt_item32_t *rmt_item, int item_num, bool w… in rmt_write_items() argument
1086 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_write_items()
1087 ESP_RETURN_ON_FALSE(p_rmt_obj[channel], ESP_FAIL, TAG, RMT_DRIVER_ERROR_STR); in rmt_write_items()
1090 uint32_t mem_blocks = rmt_ll_tx_get_mem_blocks(rmt_contex.hal.regs, channel); in rmt_write_items()
1091 …ESP_RETURN_ON_FALSE(mem_blocks + channel <= SOC_RMT_CHANNELS_PER_GROUP, ESP_ERR_INVALID_STATE, TAG… in rmt_write_items()
1093 if (p_rmt_obj[channel]->intr_alloc_flags & ESP_INTR_FLAG_IRAM) { in rmt_write_items()
1100 rmt_obj_t *p_rmt = p_rmt_obj[channel]; in rmt_write_items()
1107 rmt_fill_memory(channel, rmt_item, item_block_len, 0); in rmt_write_items()
1109 rmt_set_tx_loop_mode(channel, false); in rmt_write_items()
1110 rmt_set_tx_thr_intr_en(channel, 1, item_sub_len); in rmt_write_items()
1116 rmt_fill_memory(channel, rmt_item, len_rem, 0); in rmt_write_items()
1117 rmt_idle_level_t idle_level = rmt_ll_tx_get_idle_level(rmt_contex.hal.regs, channel); in rmt_write_items()
1122 rmt_fill_memory(channel, &stop_data, 1, len_rem); in rmt_write_items()
1125 rmt_tx_start(channel, true); in rmt_write_items()
1129 if (rmt_ll_tx_is_loop_enabled(rmt_contex.hal.regs, channel)) { in rmt_write_items()
1143 esp_err_t rmt_wait_tx_done(rmt_channel_t channel, TickType_t wait_time) in rmt_wait_tx_done() argument
1145 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_wait_tx_done()
1146 ESP_RETURN_ON_FALSE(p_rmt_obj[channel], ESP_FAIL, TAG, RMT_DRIVER_ERROR_STR); in rmt_wait_tx_done()
1147 if (xSemaphoreTake(p_rmt_obj[channel]->tx_sem, wait_time) == pdTRUE) { in rmt_wait_tx_done()
1148 p_rmt_obj[channel]->wait_done = false; in rmt_wait_tx_done()
1149 xSemaphoreGive(p_rmt_obj[channel]->tx_sem); in rmt_wait_tx_done()
1160 esp_err_t rmt_get_ringbuf_handle(rmt_channel_t channel, RingbufHandle_t *buf_handle) in rmt_get_ringbuf_handle() argument
1162 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_ringbuf_handle()
1163 ESP_RETURN_ON_FALSE(p_rmt_obj[channel], ESP_FAIL, TAG, RMT_DRIVER_ERROR_STR); in rmt_get_ringbuf_handle()
1165 *buf_handle = p_rmt_obj[channel]->rx_buf; in rmt_get_ringbuf_handle()
1177 esp_err_t rmt_translator_init(rmt_channel_t channel, sample_to_rmt_t fn) in rmt_translator_init() argument
1180 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_translator_init()
1181 ESP_RETURN_ON_FALSE(p_rmt_obj[channel], ESP_FAIL, TAG, RMT_DRIVER_ERROR_STR); in rmt_translator_init()
1182 uint32_t mem_blocks = rmt_ll_tx_get_mem_blocks(rmt_contex.hal.regs, channel); in rmt_translator_init()
1183 …ESP_RETURN_ON_FALSE(mem_blocks + channel <= SOC_RMT_CHANNELS_PER_GROUP, ESP_ERR_INVALID_STATE, TAG… in rmt_translator_init()
1185 if (p_rmt_obj[channel]->tx_buf == NULL) { in rmt_translator_init()
1187 p_rmt_obj[channel]->tx_buf = (rmt_item32_t *)calloc(1, block_size); in rmt_translator_init()
1189 if (p_rmt_obj[channel]->intr_alloc_flags & ESP_INTR_FLAG_IRAM) { in rmt_translator_init()
1190 …p_rmt_obj[channel]->tx_buf = (rmt_item32_t *)heap_caps_calloc(1, block_size, MALLOC_CAP_INTERNAL |… in rmt_translator_init()
1192 p_rmt_obj[channel]->tx_buf = (rmt_item32_t *)calloc(1, block_size); in rmt_translator_init()
1195 if (p_rmt_obj[channel]->tx_buf == NULL) { in rmt_translator_init()
1200 p_rmt_obj[channel]->sample_to_rmt = fn; in rmt_translator_init()
1201 p_rmt_obj[channel]->tx_context = NULL; in rmt_translator_init()
1202 p_rmt_obj[channel]->sample_size_remain = 0; in rmt_translator_init()
1203 p_rmt_obj[channel]->sample_cur = NULL; in rmt_translator_init()
1208 esp_err_t rmt_translator_set_context(rmt_channel_t channel, void *context) in rmt_translator_set_context() argument
1210 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_translator_set_context()
1211 ESP_RETURN_ON_FALSE(p_rmt_obj[channel], ESP_FAIL, TAG, RMT_DRIVER_ERROR_STR); in rmt_translator_set_context()
1213 p_rmt_obj[channel]->tx_context = context; in rmt_translator_set_context()
1229 esp_err_t rmt_write_sample(rmt_channel_t channel, const uint8_t *src, size_t src_size, bool wait_tx… in rmt_write_sample() argument
1231 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_write_sample()
1232 ESP_RETURN_ON_FALSE(p_rmt_obj[channel], ESP_FAIL, TAG, RMT_DRIVER_ERROR_STR); in rmt_write_sample()
1233 … ESP_RETURN_ON_FALSE(p_rmt_obj[channel]->sample_to_rmt, ESP_FAIL, TAG, RMT_TRANSLATOR_UNINIT_STR); in rmt_write_sample()
1234 uint32_t mem_blocks = rmt_ll_tx_get_mem_blocks(rmt_contex.hal.regs, channel); in rmt_write_sample()
1235 …ESP_RETURN_ON_FALSE(mem_blocks + channel <= SOC_RMT_CHANNELS_PER_GROUP, ESP_ERR_INVALID_STATE, TAG… in rmt_write_sample()
1237 if (p_rmt_obj[channel]->intr_alloc_flags & ESP_INTR_FLAG_IRAM) { in rmt_write_sample()
1245 rmt_obj_t *p_rmt = p_rmt_obj[channel]; in rmt_write_sample()
1252 rmt_fill_memory(channel, p_rmt->tx_buf, p_rmt->tx_len_rem, 0); in rmt_write_sample()
1254 rmt_set_tx_thr_intr_en(channel, 1, item_sub_len); in rmt_write_sample()
1260 rmt_idle_level_t idle_level = rmt_ll_tx_get_idle_level(rmt_contex.hal.regs, channel); in rmt_write_sample()
1265 rmt_fill_memory(channel, &stop_data, 1, p_rmt->tx_len_rem); in rmt_write_sample()
1270 rmt_tx_start(channel, true); in rmt_write_sample()
1298 esp_err_t rmt_get_counter_clock(rmt_channel_t channel, uint32_t *clock_hz) in rmt_get_counter_clock() argument
1300 ESP_RETURN_ON_FALSE(channel < RMT_CHANNEL_MAX, ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_get_counter_clock()
1305 rmt_source_clk_hz = s_rmt_source_clock_hz[channel]; in rmt_get_counter_clock()
1309 if (RMT_IS_RX_CHANNEL(channel)) { in rmt_get_counter_clock()
1310 …urce_clk_hz / rmt_ll_rx_get_channel_clock_div(rmt_contex.hal.regs, RMT_DECODE_RX_CHANNEL(channel)); in rmt_get_counter_clock()
1312 … *clock_hz = rmt_source_clk_hz / rmt_ll_tx_get_channel_clock_div(rmt_contex.hal.regs, channel); in rmt_get_counter_clock()
1319 esp_err_t rmt_add_channel_to_group(rmt_channel_t channel) in rmt_add_channel_to_group() argument
1321 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_add_channel_to_group()
1324 rmt_contex.synchro_channel_mask |= (1 << channel); in rmt_add_channel_to_group()
1325 rmt_ll_tx_sync_group_add_channels(rmt_contex.hal.regs, 1 << channel); in rmt_add_channel_to_group()
1331 esp_err_t rmt_remove_channel_from_group(rmt_channel_t channel) in rmt_remove_channel_from_group() argument
1333 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_remove_channel_from_group()
1335 rmt_contex.synchro_channel_mask &= ~(1 << channel); in rmt_remove_channel_from_group()
1336 rmt_ll_tx_sync_group_remove_channels(rmt_contex.hal.regs, 1 << channel); in rmt_remove_channel_from_group()
1346 esp_err_t rmt_set_tx_loop_count(rmt_channel_t channel, uint32_t count) in rmt_set_tx_loop_count() argument
1348 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_set_tx_loop_count()
1351 rmt_ll_tx_set_loop_count(rmt_contex.hal.regs, channel, count); in rmt_set_tx_loop_count()
1356 esp_err_t rmt_enable_tx_loop_autostop(rmt_channel_t channel, bool en) in rmt_enable_tx_loop_autostop() argument
1358 … ESP_RETURN_ON_FALSE(RMT_IS_TX_CHANNEL(channel), ESP_ERR_INVALID_ARG, TAG, RMT_CHANNEL_ERROR_STR); in rmt_enable_tx_loop_autostop()
1359 p_rmt_obj[channel]->loop_autostop = en; in rmt_enable_tx_loop_autostop()
1362 rmt_ll_tx_enable_loop_autostop(rmt_contex.hal.regs, channel, en); in rmt_enable_tx_loop_autostop()