Skip to content

Commit e6fcaf4

Browse files
committed
fix(driver_twai): fixed c5 listenonly mode errata, add rx buffer check
1 parent 7f325d4 commit e6fcaf4

File tree

17 files changed

+175
-186
lines changed

17 files changed

+175
-186
lines changed

components/driver/twai/twai.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,24 +308,24 @@ static void twai_configure_gpio(twai_obj_t *p_obj)
308308
//Set RX pin
309309
gpio_func_sel(p_obj->rx_io, PIN_FUNC_GPIO);
310310
gpio_input_enable(p_obj->rx_io);
311-
esp_rom_gpio_connect_in_signal(p_obj->rx_io, twai_controller_periph_signals.controllers[controller_id].rx_sig, false);
311+
esp_rom_gpio_connect_in_signal(p_obj->rx_io, twai_periph_signals[controller_id].rx_sig, false);
312312

313313
//Set TX pin
314314
gpio_func_sel(p_obj->tx_io, PIN_FUNC_GPIO);
315-
esp_rom_gpio_connect_out_signal(p_obj->tx_io, twai_controller_periph_signals.controllers[controller_id].tx_sig, false, false);
315+
esp_rom_gpio_connect_out_signal(p_obj->tx_io, twai_periph_signals[controller_id].tx_sig, false, false);
316316

317317
//Configure output clock pin (Optional)
318318
if (GPIO_IS_VALID_OUTPUT_GPIO(p_obj->clkout_io)) {
319319
gpio_mask |= BIT64(p_obj->clkout_io);
320320
gpio_func_sel(p_obj->clkout_io, PIN_FUNC_GPIO);
321-
esp_rom_gpio_connect_out_signal(p_obj->clkout_io, twai_controller_periph_signals.controllers[controller_id].clk_out_sig, false, false);
321+
esp_rom_gpio_connect_out_signal(p_obj->clkout_io, twai_periph_signals[controller_id].clk_out_sig, false, false);
322322
}
323323

324324
//Configure bus status pin (Optional)
325325
if (GPIO_IS_VALID_OUTPUT_GPIO(p_obj->bus_off_io)) {
326326
gpio_mask |= BIT64(p_obj->bus_off_io);
327327
gpio_func_sel(p_obj->bus_off_io, PIN_FUNC_GPIO);
328-
esp_rom_gpio_connect_out_signal(p_obj->bus_off_io, twai_controller_periph_signals.controllers[controller_id].bus_off_sig, false, false);
328+
esp_rom_gpio_connect_out_signal(p_obj->bus_off_io, twai_periph_signals[controller_id].bus_off_sig, false, false);
329329
}
330330

331331
uint64_t busy_mask = esp_gpio_reserve(gpio_mask);
@@ -343,7 +343,7 @@ static void twai_release_gpio(twai_obj_t *p_obj)
343343
assert(GPIO_IS_VALID_OUTPUT_GPIO(p_obj->tx_io)); //coverity check
344344
uint64_t gpio_mask = BIT64(p_obj->tx_io);
345345

346-
esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ONE_INPUT, twai_controller_periph_signals.controllers[p_obj->controller_id].rx_sig, false);
346+
esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ONE_INPUT, twai_periph_signals[p_obj->controller_id].rx_sig, false);
347347
gpio_output_disable(p_obj->tx_io);
348348
if (GPIO_IS_VALID_OUTPUT_GPIO(p_obj->clkout_io)) {
349349
gpio_mask |= BIT64(p_obj->clkout_io);
@@ -413,7 +413,7 @@ static esp_err_t twai_alloc_driver_obj(const twai_general_config_t *g_config, tw
413413
goto err;
414414
}
415415
//Allocate interrupt
416-
ret = esp_intr_alloc(twai_controller_periph_signals.controllers[controller_id].irq_id,
416+
ret = esp_intr_alloc(twai_periph_signals[controller_id].irq_id,
417417
g_config->intr_flags | ESP_INTR_FLAG_INTRDISABLED,
418418
twai_intr_handler_main,
419419
p_obj,

components/esp_driver_twai/esp_twai.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ esp_err_t twai_node_transmit(twai_node_handle_t node, const twai_frame_t *frame,
145145
esp_err_t twai_node_receive_from_isr(twai_node_handle_t node, twai_frame_t *rx_frame)
146146
{
147147
ESP_RETURN_ON_FALSE_ISR(node && rx_frame, ESP_ERR_INVALID_ARG, TAG, "invalid argument: null");
148+
ESP_RETURN_ON_FALSE_ISR((rx_frame->buffer_len == 0) || esp_ptr_in_dram(rx_frame->buffer) || esp_ptr_external_ram(rx_frame->buffer), ESP_ERR_INVALID_ARG, TAG, "invalid 'rx_frame->buffer' pointer or buffer_len");
148149
ESP_RETURN_ON_FALSE_ISR(node->receive_isr, ESP_ERR_NOT_SUPPORTED, TAG, "receive func null");
149150

150151
return node->receive_isr(node, rx_frame);

components/esp_driver_twai/esp_twai_onchip.c

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#include "esp_twai.h"
88
#include "esp_twai_onchip.h"
9+
#include "soc/gpio_sig_map.h"
910
#include "esp_private/twai_interface.h"
1011
#include "esp_private/twai_utils.h"
1112
#include "twai_private.h"
@@ -127,27 +128,25 @@ static esp_err_t _node_config_io(twai_onchip_ctx_t *node, const twai_onchip_node
127128
uint64_t reserve_mask = BIT64(node_config->io_cfg.tx);
128129

129130
// Set RX pin
130-
gpio_input_enable(node_config->io_cfg.rx);
131131
gpio_set_pull_mode(node_config->io_cfg.rx, GPIO_PULLUP_ONLY); // pullup to avoid noise if no connection to transceiver
132-
gpio_func_sel(node_config->io_cfg.rx, PIN_FUNC_GPIO);
133-
esp_rom_gpio_connect_in_signal(node_config->io_cfg.rx, twai_controller_periph_signals.controllers[node->ctrlr_id].rx_sig, false);
132+
gpio_matrix_input(node_config->io_cfg.rx, twai_periph_signals[node->ctrlr_id].rx_sig, false);
134133

135134
// Set TX pin
136-
gpio_func_sel(node_config->io_cfg.tx, PIN_FUNC_GPIO);
137-
esp_rom_gpio_connect_out_signal(node_config->io_cfg.tx, twai_controller_periph_signals.controllers[node->ctrlr_id].tx_sig, false, false);
135+
// If enable_listen_only, disconnect twai signal, and output high to avoid any influence to bus
136+
gpio_set_level(node_config->io_cfg.tx, 1);
137+
int tx_sig = (node_config->flags.enable_listen_only) ? SIG_GPIO_OUT_IDX : twai_periph_signals[node->ctrlr_id].tx_sig;
138+
gpio_matrix_output(node_config->io_cfg.tx, tx_sig, false, false);
138139

139140
//Configure output clock pin (Optional)
140141
if (GPIO_IS_VALID_OUTPUT_GPIO(node_config->io_cfg.quanta_clk_out)) {
141142
reserve_mask |= BIT64(node_config->io_cfg.quanta_clk_out);
142-
gpio_func_sel(node_config->io_cfg.quanta_clk_out, PIN_FUNC_GPIO);
143-
esp_rom_gpio_connect_out_signal(node_config->io_cfg.quanta_clk_out, twai_controller_periph_signals.controllers[node->ctrlr_id].clk_out_sig, false, false);
143+
gpio_matrix_output(node_config->io_cfg.quanta_clk_out, twai_periph_signals[node->ctrlr_id].clk_out_sig, false, false);
144144
}
145145

146146
//Configure bus status pin (Optional)
147147
if (GPIO_IS_VALID_OUTPUT_GPIO(node_config->io_cfg.bus_off_indicator)) {
148148
reserve_mask |= BIT64(node_config->io_cfg.bus_off_indicator);
149-
gpio_func_sel(node_config->io_cfg.bus_off_indicator, PIN_FUNC_GPIO);
150-
esp_rom_gpio_connect_out_signal(node_config->io_cfg.bus_off_indicator, twai_controller_periph_signals.controllers[node->ctrlr_id].bus_off_sig, false, false);
149+
gpio_matrix_output(node_config->io_cfg.bus_off_indicator, twai_periph_signals[node->ctrlr_id].bus_off_sig, false, false);
151150
}
152151

153152
node->gpio_reserved = reserve_mask;
@@ -163,7 +162,7 @@ static esp_err_t _node_config_io(twai_onchip_ctx_t *node, const twai_onchip_node
163162

164163
static void _node_release_io(twai_onchip_ctx_t *node)
165164
{
166-
esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ONE_INPUT, twai_controller_periph_signals.controllers[node->ctrlr_id].rx_sig, false);
165+
esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ONE_INPUT, twai_periph_signals[node->ctrlr_id].rx_sig, false);
167166
esp_gpio_revoke(node->gpio_reserved);
168167
for (; node->gpio_reserved > 0;) {
169168
uint8_t pos = __builtin_ctzll(node->gpio_reserved);
@@ -615,7 +614,7 @@ esp_err_t twai_new_node_onchip(const twai_onchip_node_config_t *node_config, twa
615614
ESP_GOTO_ON_FALSE(node->tx_mount_queue, ESP_ERR_NO_MEM, err, TAG, "no_mem");
616615
uint32_t intr_flags = TWAI_INTR_ALLOC_FLAGS;
617616
intr_flags |= (node_config->intr_priority > 0) ? BIT(node_config->intr_priority) : ESP_INTR_FLAG_LOWMED;
618-
ESP_GOTO_ON_ERROR(esp_intr_alloc(twai_controller_periph_signals.controllers[ctrlr_id].irq_id, intr_flags, _node_isr_main, (void *)node, &node->intr_hdl),
617+
ESP_GOTO_ON_ERROR(esp_intr_alloc(twai_periph_signals[ctrlr_id].irq_id, intr_flags, _node_isr_main, (void *)node, &node->intr_hdl),
619618
err, TAG, "Alloc interrupt failed");
620619

621620
// Enable bus clock and reset controller
@@ -638,10 +637,10 @@ esp_err_t twai_new_node_onchip(const twai_onchip_node_config_t *node_config, twa
638637
#if CONFIG_PM_ENABLE
639638
#if SOC_TWAI_CLK_SUPPORT_APB
640639
// DFS can change APB frequency. So add lock to prevent sleep and APB freq from changing
641-
ESP_GOTO_ON_ERROR(esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, twai_controller_periph_signals.controllers[ctrlr_id].module_name, &node->pm_lock), err, TAG, "init power manager failed");
640+
ESP_GOTO_ON_ERROR(esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, twai_periph_signals[ctrlr_id].module_name, &node->pm_lock), err, TAG, "init power manager failed");
642641
#else // XTAL
643642
// XTAL freq can be closed in light sleep, so we need to create a lock to prevent light sleep
644-
ESP_GOTO_ON_ERROR(esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, twai_controller_periph_signals.controllers[ctrlr_id].module_name, &node->pm_lock), err, TAG, "init power manager failed");
643+
ESP_GOTO_ON_ERROR(esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, twai_periph_signals[ctrlr_id].module_name, &node->pm_lock), err, TAG, "init power manager failed");
645644
#endif //SOC_TWAI_CLK_SUPPORT_APB
646645
#endif //CONFIG_PM_ENABLE
647646

components/esp_driver_twai/test_apps/test_twai/main/test_twai_common.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
static IRAM_ATTR bool test_driver_install_rx_cb(twai_node_handle_t handle, const twai_rx_done_event_data_t *edata, void *user_ctx)
2828
{
29-
twai_frame_t rx_frame;
29+
twai_frame_t rx_frame = {0};
3030
if (ESP_OK == twai_node_receive_from_isr(handle, &rx_frame)) {
3131
ESP_EARLY_LOGI("Recv ", "id 0x%lx rtr %d", rx_frame.header.id, rx_frame.header.rtr);
3232
}
@@ -89,7 +89,7 @@ TEST_CASE("twai install uninstall (loopback)", "[twai]")
8989
TEST_ESP_OK(twai_node_enable(node_hdl[SOC_TWAI_CONTROLLER_NUM]));
9090
tx_frame.header.id = 0x100;
9191
TEST_ESP_OK(twai_node_transmit(node_hdl[SOC_TWAI_CONTROLLER_NUM], &tx_frame, 0));
92-
twai_frame_t rx_frame;
92+
twai_frame_t rx_frame = {0};
9393
printf("Test receive from task\n");
9494
TEST_ESP_ERR(ESP_ERR_INVALID_STATE, twai_node_receive_from_isr(node_hdl[SOC_TWAI_CONTROLLER_NUM], &rx_frame));
9595

components/hal/esp32c5/include/hal/twaifd_ll.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ static inline void twaifd_ll_set_mode(twaifd_dev_t *hw, bool listen_only, bool s
165165

166166
twaifd_mode_settings_reg_t opmode = {.val = hw->mode_settings.val};
167167
opmode.stm = self_test;
168-
opmode.bmm = listen_only;
168+
(void)listen_only; // listen only is not available in this chip, see "CTU FD 2v5 errata 0v2 issue 5"
169169
opmode.ilbp = loopback;
170170

171171
hw->mode_settings.val = opmode.val;

components/hal/twai_hal_ctufd.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7+
#include <sys/param.h>
78
#include "hal/twai_hal.h"
89
#include "hal/twaifd_ll.h"
910

@@ -118,17 +119,24 @@ void twai_hal_format_frame(const twai_hal_trans_desc_t *trans_desc, twai_hal_fra
118119
{
119120
const twai_frame_header_t *header = trans_desc->frame.header;
120121
int final_dlc = (header->dlc) ? header->dlc : twaifd_len2dlc(trans_desc->frame.buffer_len);
121-
int data_len = (header->dlc) ? twaifd_dlc2len(header->dlc) : trans_desc->frame.buffer_len;
122122
twaifd_ll_format_frame_header(header, final_dlc, frame);
123-
twaifd_ll_format_frame_data(trans_desc->frame.buffer, data_len, frame);
123+
if (!header->rtr) {
124+
int data_len = (header->dlc) ? twaifd_dlc2len(header->dlc) : trans_desc->frame.buffer_len;
125+
data_len = (header->fdf) ? MIN(data_len, TWAIFD_FRAME_MAX_LEN) : MIN(data_len, TWAI_FRAME_MAX_LEN);
126+
twaifd_ll_format_frame_data(trans_desc->frame.buffer, data_len, frame);
127+
}
124128
}
125129

126130
void twai_hal_parse_frame(const twai_hal_frame_t *frame, twai_frame_header_t *header, uint8_t *buffer, uint8_t buffer_len)
127131
{
128132
twaifd_ll_parse_frame_header(frame, header);
129-
int frame_data_len = twaifd_dlc2len(header->dlc);
130-
uint8_t final_len = (frame_data_len < buffer_len) ? frame_data_len : buffer_len;
131-
twaifd_ll_parse_frame_data(frame, buffer, final_len);
133+
if (!header->rtr) {
134+
int frame_data_len = twaifd_dlc2len(header->dlc);
135+
// limit data_len for twai classic non-iso mode.
136+
frame_data_len = (header->fdf) ? MIN(frame_data_len, TWAIFD_FRAME_MAX_LEN) : MIN(frame_data_len, TWAI_FRAME_MAX_LEN);
137+
uint8_t final_len = MIN(frame_data_len, buffer_len);
138+
twaifd_ll_parse_frame_data(frame, buffer, final_len);
139+
}
132140
}
133141

134142
void twai_hal_set_tx_buffer_and_transmit(twai_hal_context_t *hal_ctx, twai_hal_frame_t *tx_frame, uint8_t buffer_idx)

components/soc/esp32/twai_periph.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -8,16 +8,14 @@
88
#include "soc/twai_periph.h"
99
#include "soc/gpio_sig_map.h"
1010

11-
const twai_controller_signal_conn_t twai_controller_periph_signals = {
12-
.controllers = {
13-
[0] = {
14-
.module = PERIPH_TWAI_MODULE,
15-
.irq_id = ETS_TWAI_INTR_SOURCE,
16-
.tx_sig = TWAI_TX_IDX,
17-
.rx_sig = TWAI_RX_IDX,
18-
.bus_off_sig = TWAI_BUS_OFF_ON_IDX,
19-
.clk_out_sig = TWAI_CLKOUT_IDX,
20-
.stand_by_sig = -1,
21-
},
22-
}
11+
const twai_signal_conn_t twai_periph_signals[SOC_TWAI_CONTROLLER_NUM] = {
12+
[0] = {
13+
.module_name = "TWAI0",
14+
.irq_id = ETS_TWAI_INTR_SOURCE,
15+
.tx_sig = TWAI_TX_IDX,
16+
.rx_sig = TWAI_RX_IDX,
17+
.bus_off_sig = TWAI_BUS_OFF_ON_IDX,
18+
.clk_out_sig = TWAI_CLKOUT_IDX,
19+
.stand_by_sig = -1,
20+
},
2321
};
Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

77
#include "soc/twai_periph.h"
88
#include "soc/gpio_sig_map.h"
99

10-
const twai_controller_signal_conn_t twai_controller_periph_signals = {
11-
.controllers = {
12-
[0] = {
13-
.module = PERIPH_TWAI_MODULE,
14-
.irq_id = ETS_TWAI_INTR_SOURCE,
15-
.tx_sig = TWAI_TX_IDX,
16-
.rx_sig = TWAI_RX_IDX,
17-
.bus_off_sig = TWAI_BUS_OFF_ON_IDX,
18-
.clk_out_sig = TWAI_CLKOUT_IDX,
19-
.stand_by_sig = -1,
20-
},
21-
}
10+
const twai_signal_conn_t twai_periph_signals[SOC_TWAI_CONTROLLER_NUM] = {
11+
[0] = {
12+
.module_name = "TWAI0",
13+
.irq_id = ETS_TWAI_INTR_SOURCE,
14+
.tx_sig = TWAI_TX_IDX,
15+
.rx_sig = TWAI_RX_IDX,
16+
.bus_off_sig = TWAI_BUS_OFF_ON_IDX,
17+
.clk_out_sig = TWAI_CLKOUT_IDX,
18+
.stand_by_sig = -1,
19+
},
2220
};
Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,31 @@
11
/*
2-
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

77
#include "soc/twai_periph.h"
88
#include "soc/gpio_sig_map.h"
99

10-
const twai_controller_signal_conn_t twai_controller_periph_signals = {
11-
.controllers = {
12-
[0] = {
13-
.module_name = "TWAI0",
14-
.irq_id = ETS_TWAI0_INTR_SOURCE,
15-
.timer_irq_id = ETS_TWAI0_TIMER_INTR_SOURCE,
16-
.tx_sig = TWAI0_TX_IDX,
17-
.rx_sig = TWAI0_RX_IDX,
18-
.bus_off_sig = TWAI0_BUS_OFF_ON_IDX,
19-
.clk_out_sig = TWAI0_CLKOUT_IDX,
20-
.stand_by_sig = TWAI0_STANDBY_IDX,
21-
},
22-
[1] = {
23-
.module_name = "TWAI1",
24-
.irq_id = ETS_TWAI1_INTR_SOURCE,
25-
.timer_irq_id = ETS_TWAI1_TIMER_INTR_SOURCE,
26-
.tx_sig = TWAI1_TX_IDX,
27-
.rx_sig = TWAI1_RX_IDX,
28-
.bus_off_sig = TWAI1_BUS_OFF_ON_IDX,
29-
.clk_out_sig = TWAI1_CLKOUT_IDX,
30-
.stand_by_sig = TWAI1_STANDBY_IDX,
31-
},
32-
}
10+
const twai_signal_conn_t twai_periph_signals[SOC_TWAI_CONTROLLER_NUM] = {
11+
[0] = {
12+
.module_name = "TWAI0",
13+
.irq_id = ETS_TWAI0_INTR_SOURCE,
14+
.timer_irq_id = ETS_TWAI0_TIMER_INTR_SOURCE,
15+
.tx_sig = TWAI0_TX_IDX,
16+
.rx_sig = TWAI0_RX_IDX,
17+
.bus_off_sig = TWAI0_BUS_OFF_ON_IDX,
18+
.clk_out_sig = TWAI0_CLKOUT_IDX,
19+
.stand_by_sig = TWAI0_STANDBY_IDX,
20+
},
21+
[1] = {
22+
.module_name = "TWAI1",
23+
.irq_id = ETS_TWAI1_INTR_SOURCE,
24+
.timer_irq_id = ETS_TWAI1_TIMER_INTR_SOURCE,
25+
.tx_sig = TWAI1_TX_IDX,
26+
.rx_sig = TWAI1_RX_IDX,
27+
.bus_off_sig = TWAI1_BUS_OFF_ON_IDX,
28+
.clk_out_sig = TWAI1_CLKOUT_IDX,
29+
.stand_by_sig = TWAI1_STANDBY_IDX,
30+
},
3331
};

components/soc/esp32c6/twai_periph.c

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -8,26 +8,24 @@
88
#include "soc/twai_reg.h"
99
#include "soc/gpio_sig_map.h"
1010

11-
const twai_controller_signal_conn_t twai_controller_periph_signals = {
12-
.controllers = {
13-
[0] = {
14-
.module = PERIPH_TWAI0_MODULE,
15-
.irq_id = ETS_TWAI0_INTR_SOURCE,
16-
.tx_sig = TWAI0_TX_IDX,
17-
.rx_sig = TWAI0_RX_IDX,
18-
.bus_off_sig = TWAI0_BUS_OFF_ON_IDX,
19-
.clk_out_sig = TWAI0_CLKOUT_IDX,
20-
.stand_by_sig = TWAI0_STANDBY_IDX,
21-
},
22-
[1] = {
23-
.module = PERIPH_TWAI1_MODULE,
24-
.irq_id = ETS_TWAI1_INTR_SOURCE,
25-
.tx_sig = TWAI1_TX_IDX,
26-
.rx_sig = TWAI1_RX_IDX,
27-
.bus_off_sig = TWAI1_BUS_OFF_ON_IDX,
28-
.clk_out_sig = TWAI1_CLKOUT_IDX,
29-
.stand_by_sig = TWAI1_STANDBY_IDX,
30-
}
11+
const twai_signal_conn_t twai_periph_signals[SOC_TWAI_CONTROLLER_NUM] = {
12+
[0] = {
13+
.module_name = "TWAI0",
14+
.irq_id = ETS_TWAI0_INTR_SOURCE,
15+
.tx_sig = TWAI0_TX_IDX,
16+
.rx_sig = TWAI0_RX_IDX,
17+
.bus_off_sig = TWAI0_BUS_OFF_ON_IDX,
18+
.clk_out_sig = TWAI0_CLKOUT_IDX,
19+
.stand_by_sig = TWAI0_STANDBY_IDX,
20+
},
21+
[1] = {
22+
.module_name = "TWAI1",
23+
.irq_id = ETS_TWAI1_INTR_SOURCE,
24+
.tx_sig = TWAI1_TX_IDX,
25+
.rx_sig = TWAI1_RX_IDX,
26+
.bus_off_sig = TWAI1_BUS_OFF_ON_IDX,
27+
.clk_out_sig = TWAI1_CLKOUT_IDX,
28+
.stand_by_sig = TWAI1_STANDBY_IDX,
3129
}
3230
};
3331

0 commit comments

Comments
 (0)