|
|
@@ -344,6 +344,11 @@ esp_err_t rmt_receive(rmt_channel_handle_t channel, void *buffer, size_t buffer_
|
|
|
rmt_hal_context_t *hal = &group->hal;
|
|
|
int channel_id = channel->channel_id;
|
|
|
|
|
|
+ uint32_t filter_reg_value = ((uint64_t)group->resolution_hz * config->signal_range_min_ns) / 1000000000UL;
|
|
|
+ uint32_t idle_reg_value = ((uint64_t)channel->resolution_hz * config->signal_range_max_ns) / 1000000000UL;
|
|
|
+ ESP_RETURN_ON_FALSE(filter_reg_value <= RMT_LL_MAX_FILTER_VALUE, ESP_ERR_INVALID_ARG, TAG, "signal_range_min_ns too big");
|
|
|
+ ESP_RETURN_ON_FALSE(idle_reg_value <= RMT_LL_MAX_IDLE_VALUE, ESP_ERR_INVALID_ARG, TAG, "signal_range_max_ns too big");
|
|
|
+
|
|
|
// fill in the transaction descriptor
|
|
|
rmt_rx_trans_desc_t *t = &rx_chan->trans_desc;
|
|
|
t->buffer = buffer;
|
|
|
@@ -365,9 +370,9 @@ esp_err_t rmt_receive(rmt_channel_handle_t channel, void *buffer, size_t buffer_
|
|
|
rmt_ll_rx_reset_pointer(hal->regs, channel_id);
|
|
|
rmt_ll_rx_set_mem_owner(hal->regs, channel_id, RMT_LL_MEM_OWNER_HW);
|
|
|
// set sampling parameters of incoming signals
|
|
|
- rmt_ll_rx_set_filter_thres(hal->regs, channel_id, ((uint64_t)group->resolution_hz * config->signal_range_min_ns) / 1000000000UL);
|
|
|
+ rmt_ll_rx_set_filter_thres(hal->regs, channel_id, filter_reg_value);
|
|
|
rmt_ll_rx_enable_filter(hal->regs, channel_id, config->signal_range_min_ns != 0);
|
|
|
- rmt_ll_rx_set_idle_thres(hal->regs, channel_id, ((uint64_t)channel->resolution_hz * config->signal_range_max_ns) / 1000000000UL);
|
|
|
+ rmt_ll_rx_set_idle_thres(hal->regs, channel_id, idle_reg_value);
|
|
|
// turn on RMT RX machine
|
|
|
rmt_ll_rx_enable(hal->regs, channel_id, true);
|
|
|
portEXIT_CRITICAL(&channel->spinlock);
|