Commit e30904b6 authored by devsaurus's avatar devsaurus
Browse files

force common intr alloc flags for all platform components that use rmt

remove ESP_INTR_FLAG_IRAM to fix #2564
parent 5faf76b7
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
* ****************************************************************************/ * ****************************************************************************/
#include "platform.h" #include "platform.h"
#include "platform_rmt.h"
#include "driver/rmt.h" #include "driver/rmt.h"
#include "driver/gpio.h" #include "driver/gpio.h"
...@@ -91,7 +92,7 @@ static int dht_init( uint8_t gpio_num ) ...@@ -91,7 +92,7 @@ static int dht_init( uint8_t gpio_num )
rmt_rx.rx_config.filter_ticks_thresh = 30; rmt_rx.rx_config.filter_ticks_thresh = 30;
rmt_rx.rx_config.idle_threshold = DHT_DURATION_RX_IDLE; rmt_rx.rx_config.idle_threshold = DHT_DURATION_RX_IDLE;
if (rmt_config( &rmt_rx ) == ESP_OK) { if (rmt_config( &rmt_rx ) == ESP_OK) {
if (rmt_driver_install( rmt_rx.channel, 512, ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_SHARED ) == ESP_OK) { if (rmt_driver_install( rmt_rx.channel, 512, PLATFORM_RMT_INTR_FLAGS ) == ESP_OK) {
rmt_get_ringbuf_handle( dht_rmt.channel, &dht_rmt.rb ); rmt_get_ringbuf_handle( dht_rmt.channel, &dht_rmt.rb );
......
...@@ -179,30 +179,6 @@ int platform_i2c_send_byte( unsigned id, uint8_t data, int ack_check_en ); ...@@ -179,30 +179,6 @@ int platform_i2c_send_byte( unsigned id, uint8_t data, int ack_check_en );
int platform_i2c_recv_byte( unsigned id, int ack_val ); int platform_i2c_recv_byte( unsigned id, int ack_val );
// *****************************************************************************
// RMT platform interface
/**
* @brief Allocate an RMT channel.
*
* @param num_mem Number of memory blocks.
*
* @return
* - Channel number when successful
* - -1 if no channel available
*
*/
int platform_rmt_allocate( uint8_t num_mem );
/**
* @brief Release a previously allocated RMT channel.
*
* @param channel Channel number.
*
*/
void platform_rmt_release( uint8_t channel );
// ***************************************************************************** // *****************************************************************************
// Onewire platform interface // Onewire platform interface
......
#ifndef _PLATFORM_RMT_H_
#define _PLATFORM_RMT_H_
#include "driver/rmt.h"
// define a common set of esp interrupt allocation flags for common use
#define PLATFORM_RMT_INTR_FLAGS (ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_SHARED)
// *****************************************************************************
// RMT platform interface
/**
* @brief Allocate an RMT channel.
*
* @param num_mem Number of memory blocks.
*
* @return
* - Channel number when successful
* - -1 if no channel available
*
*/
int platform_rmt_allocate( uint8_t num_mem );
/**
* @brief Release a previously allocated RMT channel.
*
* @param channel Channel number.
*
*/
void platform_rmt_release( uint8_t channel );
#endif
...@@ -59,6 +59,7 @@ sample code bearing this copyright. ...@@ -59,6 +59,7 @@ sample code bearing this copyright.
*/ */
#include "platform.h" #include "platform.h"
#include "platform_rmt.h"
#include "driver/rmt.h" #include "driver/rmt.h"
#include "driver/gpio.h" #include "driver/gpio.h"
...@@ -127,7 +128,7 @@ static int onewire_rmt_init( uint8_t gpio_num ) ...@@ -127,7 +128,7 @@ static int onewire_rmt_init( uint8_t gpio_num )
rmt_tx.tx_config.idle_output_en = true; rmt_tx.tx_config.idle_output_en = true;
rmt_tx.rmt_mode = RMT_MODE_TX; rmt_tx.rmt_mode = RMT_MODE_TX;
if (rmt_config( &rmt_tx ) == ESP_OK) { if (rmt_config( &rmt_tx ) == ESP_OK) {
if (rmt_driver_install( rmt_tx.channel, 0, ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_SHARED ) == ESP_OK) { if (rmt_driver_install( rmt_tx.channel, 0, PLATFORM_RMT_INTR_FLAGS ) == ESP_OK) {
rmt_config_t rmt_rx; rmt_config_t rmt_rx;
rmt_rx.channel = ow_rmt.rx; rmt_rx.channel = ow_rmt.rx;
...@@ -139,7 +140,7 @@ static int onewire_rmt_init( uint8_t gpio_num ) ...@@ -139,7 +140,7 @@ static int onewire_rmt_init( uint8_t gpio_num )
rmt_rx.rx_config.filter_ticks_thresh = 30; rmt_rx.rx_config.filter_ticks_thresh = 30;
rmt_rx.rx_config.idle_threshold = OW_DURATION_RX_IDLE; rmt_rx.rx_config.idle_threshold = OW_DURATION_RX_IDLE;
if (rmt_config( &rmt_rx ) == ESP_OK) { if (rmt_config( &rmt_rx ) == ESP_OK) {
if (rmt_driver_install( rmt_rx.channel, 512, ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_SHARED ) == ESP_OK) { if (rmt_driver_install( rmt_rx.channel, 512, PLATFORM_RMT_INTR_FLAGS ) == ESP_OK) {
rmt_get_ringbuf_handle( ow_rmt.rx, &ow_rmt.rb ); rmt_get_ringbuf_handle( ow_rmt.rx, &ow_rmt.rb );
......
#include "platform.h"
#include <string.h> #include <string.h>
#include "platform_rmt.h"
#include "driver/rmt.h" #include "driver/rmt.h"
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
* ****************************************************************************/ * ****************************************************************************/
#include "platform.h" #include "platform.h"
#include "platform_rmt.h"
#include "driver/rmt.h" #include "driver/rmt.h"
#include "driver/gpio.h" #include "driver/gpio.h"
...@@ -79,7 +80,7 @@ static ws2812_chain_t ws2812_chains[RMT_CHANNEL_MAX]; ...@@ -79,7 +80,7 @@ static ws2812_chain_t ws2812_chains[RMT_CHANNEL_MAX];
static intr_handle_t ws2812_intr_handle; static intr_handle_t ws2812_intr_handle;
static void IRAM_ATTR ws2812_fill_memory_encoded( rmt_channel_t channel, const uint8_t *data, size_t len, size_t tx_offset ) static void ws2812_fill_memory_encoded( rmt_channel_t channel, const uint8_t *data, size_t len, size_t tx_offset )
{ {
for (size_t idx = 0; idx < len; idx++) { for (size_t idx = 0; idx < len; idx++) {
uint8_t byte = data[idx]; uint8_t byte = data[idx];
...@@ -93,7 +94,7 @@ static void IRAM_ATTR ws2812_fill_memory_encoded( rmt_channel_t channel, const u ...@@ -93,7 +94,7 @@ static void IRAM_ATTR ws2812_fill_memory_encoded( rmt_channel_t channel, const u
} }
static void IRAM_ATTR ws2812_isr(void *arg) static void ws2812_isr(void *arg)
{ {
uint32_t intr_st = RMT.int_st.val; uint32_t intr_st = RMT.int_st.val;
...@@ -195,7 +196,7 @@ int platform_ws2812_send( void ) ...@@ -195,7 +196,7 @@ int platform_ws2812_send( void )
res = PLATFORM_ERR; res = PLATFORM_ERR;
break; break;
} }
if (rmt_driver_install( channel, 0, ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_SHARED ) != ESP_OK) { if (rmt_driver_install( channel, 0, PLATFORM_RMT_INTR_FLAGS ) != ESP_OK) {
res = PLATFORM_ERR; res = PLATFORM_ERR;
break; break;
} }
...@@ -204,7 +205,7 @@ int platform_ws2812_send( void ) ...@@ -204,7 +205,7 @@ int platform_ws2812_send( void )
// hook-in our shared ISR // hook-in our shared ISR
esp_intr_alloc( ETS_RMT_INTR_SOURCE, ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_SHARED, ws2812_isr, NULL, &ws2812_intr_handle ); esp_intr_alloc( ETS_RMT_INTR_SOURCE, PLATFORM_RMT_INTR_FLAGS, ws2812_isr, NULL, &ws2812_intr_handle );
// start selected channels one by one // start selected channels one by one
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment