rmt: restructure rmt_signal_conn_t

This commit is contained in:
morris 2021-04-20 14:36:34 +08:00
parent a1494809b2
commit 8e483e34a8
7 changed files with 133 additions and 115 deletions

View File

@ -125,8 +125,8 @@ static void rmt_module_enable(void)
{ {
RMT_ENTER_CRITICAL(); RMT_ENTER_CRITICAL();
if (rmt_contex.rmt_module_enabled == false) { if (rmt_contex.rmt_module_enabled == false) {
periph_module_reset(rmt_periph_signals.module); periph_module_reset(rmt_periph_signals.groups[0].module);
periph_module_enable(rmt_periph_signals.module); periph_module_enable(rmt_periph_signals.groups[0].module);
rmt_contex.rmt_module_enabled = true; rmt_contex.rmt_module_enabled = true;
} }
RMT_EXIT_CRITICAL(); RMT_EXIT_CRITICAL();
@ -137,7 +137,7 @@ static void rmt_module_disable(void)
{ {
RMT_ENTER_CRITICAL(); RMT_ENTER_CRITICAL();
if (rmt_contex.rmt_module_enabled == true) { if (rmt_contex.rmt_module_enabled == true) {
periph_module_disable(rmt_periph_signals.module); periph_module_disable(rmt_periph_signals.groups[0].module);
rmt_contex.rmt_module_enabled = false; rmt_contex.rmt_module_enabled = false;
} }
RMT_EXIT_CRITICAL(); RMT_EXIT_CRITICAL();
@ -533,11 +533,11 @@ esp_err_t rmt_set_gpio(rmt_channel_t channel, rmt_mode_t mode, gpio_num_t gpio_n
if (mode == RMT_MODE_TX) { if (mode == RMT_MODE_TX) {
RMT_CHECK(RMT_IS_TX_CHANNEL(channel), RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG); RMT_CHECK(RMT_IS_TX_CHANNEL(channel), RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG);
gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT); gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT);
esp_rom_gpio_connect_out_signal(gpio_num, rmt_periph_signals.channels[channel].tx_sig, invert_signal, 0); esp_rom_gpio_connect_out_signal(gpio_num, rmt_periph_signals.groups[0].channels[channel].tx_sig, invert_signal, 0);
} else { } else {
RMT_CHECK(RMT_IS_RX_CHANNEL(channel), RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG); RMT_CHECK(RMT_IS_RX_CHANNEL(channel), RMT_CHANNEL_ERROR_STR, ESP_ERR_INVALID_ARG);
gpio_set_direction(gpio_num, GPIO_MODE_INPUT); gpio_set_direction(gpio_num, GPIO_MODE_INPUT);
esp_rom_gpio_connect_in_signal(gpio_num, rmt_periph_signals.channels[channel].rx_sig, invert_signal); esp_rom_gpio_connect_in_signal(gpio_num, rmt_periph_signals.groups[0].channels[channel].rx_sig, invert_signal);
} }
return ESP_OK; return ESP_OK;
} }
@ -722,7 +722,7 @@ esp_err_t rmt_isr_register(void (*fn)(void *), void *arg, int intr_alloc_flags,
RMT_CHECK((fn != NULL), RMT_ADDR_ERROR_STR, ESP_ERR_INVALID_ARG); RMT_CHECK((fn != NULL), RMT_ADDR_ERROR_STR, ESP_ERR_INVALID_ARG);
RMT_CHECK(rmt_contex.rmt_driver_channels == 0, "RMT driver installed, can not install generic ISR handler", ESP_FAIL); RMT_CHECK(rmt_contex.rmt_driver_channels == 0, "RMT driver installed, can not install generic ISR handler", ESP_FAIL);
return esp_intr_alloc(rmt_periph_signals.irq, intr_alloc_flags, fn, arg, handle); return esp_intr_alloc(rmt_periph_signals.groups[0].irq, intr_alloc_flags, fn, arg, handle);
} }
esp_err_t rmt_isr_deregister(rmt_isr_handle_t handle) esp_err_t rmt_isr_deregister(rmt_isr_handle_t handle)

View File

@ -14,12 +14,12 @@
#pragma once #pragma once
#include "soc/soc_caps.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include "soc/soc_caps.h"
/** /**
* @brief RMT channel ID * @brief RMT channel ID
* *

View File

@ -17,40 +17,44 @@
#include "soc/soc.h" #include "soc/soc.h"
const rmt_signal_conn_t rmt_periph_signals = { const rmt_signal_conn_t rmt_periph_signals = {
.module = PERIPH_RMT_MODULE, .groups = {
.irq = ETS_RMT_INTR_SOURCE,
.channels = {
[0] = { [0] = {
.tx_sig = RMT_SIG_OUT0_IDX, .module = PERIPH_RMT_MODULE,
.rx_sig = RMT_SIG_IN0_IDX .irq = ETS_RMT_INTR_SOURCE,
}, .channels = {
[1] = { [0] = {
.tx_sig = RMT_SIG_OUT1_IDX, .tx_sig = RMT_SIG_OUT0_IDX,
.rx_sig = RMT_SIG_IN1_IDX .rx_sig = RMT_SIG_IN0_IDX
}, },
[2] = { [1] = {
.tx_sig = RMT_SIG_OUT2_IDX, .tx_sig = RMT_SIG_OUT1_IDX,
.rx_sig = RMT_SIG_IN2_IDX .rx_sig = RMT_SIG_IN1_IDX
}, },
[3] = { [2] = {
.tx_sig = RMT_SIG_OUT3_IDX, .tx_sig = RMT_SIG_OUT2_IDX,
.rx_sig = RMT_SIG_IN3_IDX .rx_sig = RMT_SIG_IN2_IDX
}, },
[4] = { [3] = {
.tx_sig = RMT_SIG_OUT4_IDX, .tx_sig = RMT_SIG_OUT3_IDX,
.rx_sig = RMT_SIG_IN4_IDX .rx_sig = RMT_SIG_IN3_IDX
}, },
[5] = { [4] = {
.tx_sig = RMT_SIG_OUT5_IDX, .tx_sig = RMT_SIG_OUT4_IDX,
.rx_sig = RMT_SIG_IN5_IDX .rx_sig = RMT_SIG_IN4_IDX
}, },
[6] = { [5] = {
.tx_sig = RMT_SIG_OUT6_IDX, .tx_sig = RMT_SIG_OUT5_IDX,
.rx_sig = RMT_SIG_IN6_IDX .rx_sig = RMT_SIG_IN5_IDX
}, },
[7] = { [6] = {
.tx_sig = RMT_SIG_OUT7_IDX, .tx_sig = RMT_SIG_OUT6_IDX,
.rx_sig = RMT_SIG_IN7_IDX .rx_sig = RMT_SIG_IN6_IDX
},
[7] = {
.tx_sig = RMT_SIG_OUT7_IDX,
.rx_sig = RMT_SIG_IN7_IDX
}
}
} }
} }
}; };

View File

@ -16,24 +16,28 @@
#include "soc/gpio_sig_map.h" #include "soc/gpio_sig_map.h"
const rmt_signal_conn_t rmt_periph_signals = { const rmt_signal_conn_t rmt_periph_signals = {
.module = PERIPH_RMT_MODULE, .groups = {
.irq = ETS_RMT_INTR_SOURCE,
.channels = {
[0] = { [0] = {
.tx_sig = RMT_SIG_OUT0_IDX, .module = PERIPH_RMT_MODULE,
.rx_sig = -1 .irq = ETS_RMT_INTR_SOURCE,
}, .channels = {
[1] = { [0] = {
.tx_sig = RMT_SIG_OUT1_IDX, .tx_sig = RMT_SIG_OUT0_IDX,
.rx_sig = -1 .rx_sig = -1
}, },
[2] = { [1] = {
.tx_sig = -1, .tx_sig = RMT_SIG_OUT1_IDX,
.rx_sig = RMT_SIG_IN0_IDX .rx_sig = -1
}, },
[3] = { [2] = {
.tx_sig = -1, .tx_sig = -1,
.rx_sig = RMT_SIG_IN1_IDX .rx_sig = RMT_SIG_IN0_IDX
}, },
[3] = {
.tx_sig = -1,
.rx_sig = RMT_SIG_IN1_IDX
},
}
}
} }
}; };

View File

@ -16,24 +16,28 @@
#include "soc/gpio_sig_map.h" #include "soc/gpio_sig_map.h"
const rmt_signal_conn_t rmt_periph_signals = { const rmt_signal_conn_t rmt_periph_signals = {
.module = PERIPH_RMT_MODULE, .groups = {
.irq = ETS_RMT_INTR_SOURCE,
.channels = {
[0] = { [0] = {
.tx_sig = RMT_SIG_OUT0_IDX, .module = PERIPH_RMT_MODULE,
.rx_sig = RMT_SIG_IN0_IDX .irq = ETS_RMT_INTR_SOURCE,
}, .channels = {
[1] = { [0] = {
.tx_sig = RMT_SIG_OUT1_IDX, .tx_sig = RMT_SIG_OUT0_IDX,
.rx_sig = RMT_SIG_IN1_IDX .rx_sig = RMT_SIG_IN0_IDX
}, },
[2] = { [1] = {
.tx_sig = RMT_SIG_OUT2_IDX, .tx_sig = RMT_SIG_OUT1_IDX,
.rx_sig = RMT_SIG_IN2_IDX .rx_sig = RMT_SIG_IN1_IDX
}, },
[3] = { [2] = {
.tx_sig = RMT_SIG_OUT3_IDX, .tx_sig = RMT_SIG_OUT2_IDX,
.rx_sig = RMT_SIG_IN3_IDX .rx_sig = RMT_SIG_IN2_IDX
},
[3] = {
.tx_sig = RMT_SIG_OUT3_IDX,
.rx_sig = RMT_SIG_IN3_IDX
}
}
} }
} }
}; };

View File

@ -16,40 +16,44 @@
#include "soc/gpio_sig_map.h" #include "soc/gpio_sig_map.h"
const rmt_signal_conn_t rmt_periph_signals = { const rmt_signal_conn_t rmt_periph_signals = {
.module = PERIPH_RMT_MODULE, .groups = {
.irq = ETS_RMT_INTR_SOURCE,
.channels = {
[0] = { [0] = {
.tx_sig = RMT_SIG_OUT0_IDX, .module = PERIPH_RMT_MODULE,
.rx_sig = -1 .irq = ETS_RMT_INTR_SOURCE,
}, .channels = {
[1] = { [0] = {
.tx_sig = RMT_SIG_OUT1_IDX, .tx_sig = RMT_SIG_OUT0_IDX,
.rx_sig = -1 .rx_sig = -1
}, },
[2] = { [1] = {
.tx_sig = RMT_SIG_OUT2_IDX, .tx_sig = RMT_SIG_OUT1_IDX,
.rx_sig = -1 .rx_sig = -1
}, },
[3] = { [2] = {
.tx_sig = RMT_SIG_OUT3_IDX, .tx_sig = RMT_SIG_OUT2_IDX,
.rx_sig = -1 .rx_sig = -1
}, },
[4] = { [3] = {
.tx_sig = -1, .tx_sig = RMT_SIG_OUT3_IDX,
.rx_sig = RMT_SIG_IN0_IDX .rx_sig = -1
}, },
[5] = { [4] = {
.tx_sig = -1, .tx_sig = -1,
.rx_sig = RMT_SIG_IN1_IDX .rx_sig = RMT_SIG_IN0_IDX
}, },
[6] = { [5] = {
.tx_sig = -1, .tx_sig = -1,
.rx_sig = RMT_SIG_IN2_IDX .rx_sig = RMT_SIG_IN1_IDX
}, },
[7] = { [6] = {
.tx_sig = -1, .tx_sig = -1,
.rx_sig = RMT_SIG_IN3_IDX .rx_sig = RMT_SIG_IN2_IDX
},
[7] = {
.tx_sig = -1,
.rx_sig = RMT_SIG_IN3_IDX
}
}
} }
} }
}; };

View File

@ -23,13 +23,15 @@ extern "C" {
typedef struct { typedef struct {
struct { struct {
const int irq;
const periph_module_t module;
struct { struct {
const int tx_sig; struct {
const int rx_sig; const int tx_sig;
}; const int rx_sig;
} channels[SOC_RMT_CHANNELS_PER_GROUP]; };
const int irq; } channels[SOC_RMT_CHANNELS_PER_GROUP];
const periph_module_t module; } groups[SOC_RMT_GROUPS];
} rmt_signal_conn_t; } rmt_signal_conn_t;
extern const rmt_signal_conn_t rmt_periph_signals; extern const rmt_signal_conn_t rmt_periph_signals;