Как получить длинный фрейм данных с помощью кольцевого буфера esp32 rmt - PullRequest
0 голосов
/ 14 мая 2019

Я новичок и играю с ESP32 и ИК-приемником для захвата сигнала с пульта дистанционного управления.В настоящее время я ссылаюсь на пример кода для захвата ИК-сигнала следующим образом:

static void nec_rx_init()
{
    rmt_config_t rmt_rx;
    rmt_rx.channel = RMT_RX_CHANNEL;
    rmt_rx.gpio_num = RMT_RX_GPIO_NUM;
    rmt_rx.clk_div = RMT_CLK_DIV;
    rmt_rx.mem_block_num = 1;
    rmt_rx.rmt_mode = RMT_MODE_RX;
    rmt_rx.rx_config.filter_en = true;
    rmt_rx.rx_config.filter_ticks_thresh = 100;
    rmt_rx.rx_config.idle_threshold = rmt_item32_tIMEOUT_US / 10 * (RMT_TICK_10_US);
    rmt_config(&rmt_rx);
    rmt_driver_install(rmt_rx.channel, 3000, 0);
}
//get RMT RX ringbuffer
RingbufHandle_t rb = NULL;
rmt_get_ringbuf_handle(RMT_RX_CHANNEL, &rb);

// rmt_rx_start(channel, rx_idx_rst) - Set true to reset memory index for receiver
rmt_rx_start(RMT_RX_CHANNEL, 1);

while(rb) {
    uint32_t rx_size = 0;
    //try to receive data from ringbuffer.
    //RMT driver will push all the data it receives to its ringbuffer.
    //We just need to parse the value and return the spaces of ringbuffer.
    rmt_item32_t* item = (rmt_item32_t*) xRingbufferReceive(rb, &rx_size, 1000);
...
}

Хотя ИК-сигнал, излучаемый с пульта дистанционного управления, составляет около 100 элементов, но я всегда вижу, что значение rx_size составляет всего 256 (64 шт).Так что это проблема, как я могу захватить суммарные сигналы от ИК пульта дистанционного управления ?.Обратите внимание, что я установил размер буфера от 3000 до 10000.

Я ценю любые предложения для решения этой проблемы.

...