@@ -80,9 +80,8 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t *self, const mcu
8080 }
8181 // We add one to the maxlen version to ensure that two symbols at lease are
8282 // captured because we may skip the first portion of a symbol.
83- self -> raw_symbols_size = (maxlen / 2 + 1 ) * sizeof (rmt_symbol_word_t );
84- // RMT DMA mode cannot access PSRAM -> ensure raw_symbols is in internal ram
85- self -> raw_symbols = (rmt_symbol_word_t * )heap_caps_malloc (self -> raw_symbols_size , MALLOC_CAP_INTERNAL );
83+ self -> raw_symbols_size = MIN (64 , maxlen / 2 + 1 ) * sizeof (rmt_symbol_word_t );
84+ self -> raw_symbols = (rmt_symbol_word_t * )m_malloc_without_collect (self -> raw_symbols_size );
8685 if (self -> raw_symbols == NULL ) {
8786 m_free (self -> buffer );
8887 m_malloc_fail (self -> raw_symbols_size );
@@ -110,26 +109,17 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t *self, const mcu
110109 .clk_src = RMT_CLK_SRC_DEFAULT ,
111110 // 2 us resolution so we can capture 65ms pulses. The RMT period is only 15 bits.
112111 .resolution_hz = 1000000 / 2 ,
113- .mem_block_symbols = self -> raw_symbols_size ,
114- .flags .with_dma = 1
112+ .mem_block_symbols = SOC_RMT_MEM_WORDS_PER_CHANNEL ,
115113 };
116- // If we fail here, the self->buffer will be garbage collected.
117- esp_err_t result = rmt_new_rx_channel (& config , & self -> channel );
118- if (result != ESP_OK ){
119- heap_caps_free (self -> raw_symbols );
120- raise_esp_error (result );
121- }
114+ // If we fail here, the buffers allocated above will be garbage collected.
115+ CHECK_ESP_RESULT (rmt_new_rx_channel (& config , & self -> channel ));
122116
123117 rmt_rx_event_callbacks_t rx_callback = {
124118 .on_recv_done = _done_callback
125119 };
126120 rmt_rx_register_event_callbacks (self -> channel , & rx_callback , self );
127121 rmt_enable (self -> channel );
128- result = rmt_receive (self -> channel , self -> raw_symbols , self -> raw_symbols_size , & rx_config );
129- if (result != ESP_OK ){
130- heap_caps_free (self -> raw_symbols );
131- raise_esp_error (result );
132- }
122+ rmt_receive (self -> channel , self -> raw_symbols , self -> raw_symbols_size , & rx_config );
133123}
134124
135125bool common_hal_pulseio_pulsein_deinited (pulseio_pulsein_obj_t * self ) {
0 commit comments