Skip to content

Commit 76cec45

Browse files
committed
Merge branch 'fix/twai_fix_clock_sel_and_c5_errata' into 'master'
fix(driver_twai): fixed clock sel and c5 listen only mode errata Closes IDF-13144 and IDF-13059 See merge request espressif/esp-idf!40057
2 parents 9f5c9c7 + af6f1dc commit 76cec45

File tree

17 files changed

+211
-193
lines changed

17 files changed

+211
-193
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: 41 additions & 20 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);
@@ -321,6 +320,8 @@ static esp_err_t _node_delete(twai_node_handle_t node)
321320
_node_release_io(twai_ctx);
322321
twai_hal_deinit(twai_ctx->hal);
323322
_twai_rcc_clock_ctrl(twai_ctx->ctrlr_id, false);
323+
// curr_clk_src must not NULL as we already set to Default in twai_new_node_onchip
324+
ESP_RETURN_ON_ERROR(esp_clk_tree_enable_src(twai_ctx->curr_clk_src, false), TAG, "disable clock source failed");
324325
_node_destroy(twai_ctx);
325326
return ESP_OK;
326327
}
@@ -353,6 +354,30 @@ static esp_err_t _node_check_timing_valid(twai_onchip_ctx_t *twai_ctx, const twa
353354
return ESP_OK;
354355
}
355356

357+
static esp_err_t _node_set_clock_source(twai_node_handle_t node, twai_clock_source_t clock_src)
358+
{
359+
twai_onchip_ctx_t *twai_ctx = __containerof(node, twai_onchip_ctx_t, api_base);
360+
if (clock_src != twai_ctx->curr_clk_src) {
361+
// Order of operations is important here.
362+
// First enable and switch to the new clock source, then disable the old one.
363+
// To ensure the clock to controller is continuous.
364+
ESP_RETURN_ON_ERROR(esp_clk_tree_enable_src(clock_src, true), TAG, "enable clock source failed");
365+
_twai_rcc_clock_sel(twai_ctx->ctrlr_id, clock_src);
366+
if (twai_ctx->curr_clk_src) {
367+
// Disable previous clock source
368+
esp_err_t err = esp_clk_tree_enable_src(twai_ctx->curr_clk_src, false);
369+
if (err != ESP_OK) {
370+
ESP_LOGE(TAG, "disable previous clock source failed, err: %d", err);
371+
esp_clk_tree_enable_src(clock_src, false);
372+
return err;
373+
}
374+
}
375+
twai_ctx->curr_clk_src = clock_src;
376+
ESP_LOGD(TAG, "set clock source to %d", clock_src);
377+
}
378+
return ESP_OK;
379+
}
380+
356381
static esp_err_t _node_set_bit_timing(twai_node_handle_t node, const twai_timing_advanced_config_t *timing, const twai_timing_advanced_config_t *timing_fd)
357382
{
358383
twai_onchip_ctx_t *twai_ctx = __containerof(node, twai_onchip_ctx_t, api_base);
@@ -384,13 +409,7 @@ static esp_err_t _node_set_bit_timing(twai_node_handle_t node, const twai_timing
384409
}
385410
#endif
386411

387-
if (new_clock_src != twai_ctx->curr_clk_src) {
388-
// TODO: IDF-13144
389-
ESP_ERROR_CHECK(esp_clk_tree_enable_src((soc_module_clk_t)(new_clock_src), true));
390-
twai_ctx->curr_clk_src = new_clock_src;
391-
_twai_rcc_clock_sel(twai_ctx->ctrlr_id, new_clock_src);
392-
}
393-
return ESP_OK;
412+
return _node_set_clock_source(node, new_clock_src);
394413
}
395414

396415
static esp_err_t _node_calc_set_bit_timing(twai_node_handle_t node, twai_clock_source_t clk_src, const twai_timing_basic_config_t *timing, const twai_timing_basic_config_t *timing_fd)
@@ -615,9 +634,11 @@ esp_err_t twai_new_node_onchip(const twai_onchip_node_config_t *node_config, twa
615634
ESP_GOTO_ON_FALSE(node->tx_mount_queue, ESP_ERR_NO_MEM, err, TAG, "no_mem");
616635
uint32_t intr_flags = TWAI_INTR_ALLOC_FLAGS;
617636
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),
637+
ESP_GOTO_ON_ERROR(esp_intr_alloc(twai_periph_signals[ctrlr_id].irq_id, intr_flags, _node_isr_main, (void *)node, &node->intr_hdl),
619638
err, TAG, "Alloc interrupt failed");
620639

640+
// Set default clock source first
641+
ESP_RETURN_ON_ERROR(_node_set_clock_source(&node->api_base, TWAI_CLK_SRC_DEFAULT), TAG, "enable default clock source failed");
621642
// Enable bus clock and reset controller
622643
_twai_rcc_clock_ctrl(ctrlr_id, true);
623644
// Initialize HAL and configure register defaults.
@@ -638,10 +659,10 @@ esp_err_t twai_new_node_onchip(const twai_onchip_node_config_t *node_config, twa
638659
#if CONFIG_PM_ENABLE
639660
#if SOC_TWAI_CLK_SUPPORT_APB
640661
// 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");
662+
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");
642663
#else // XTAL
643664
// 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");
665+
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");
645666
#endif //SOC_TWAI_CLK_SUPPORT_APB
646667
#endif //CONFIG_PM_ENABLE
647668

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "esp_attr.h"
1313
#include "esp_log.h"
1414
#include "esp_heap_caps.h"
15+
#include "esp_clk_tree.h"
1516
#include "freertos/FreeRTOS.h"
1617
#include "esp_twai.h"
1718
#include "esp_twai_onchip.h"
@@ -26,7 +27,7 @@
2627

2728
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)
2829
{
29-
twai_frame_t rx_frame;
30+
twai_frame_t rx_frame = {0};
3031
if (ESP_OK == twai_node_receive_from_isr(handle, &rx_frame)) {
3132
ESP_EARLY_LOGI("Recv ", "id 0x%lx rtr %d", rx_frame.header.id, rx_frame.header.rtr);
3233
}
@@ -89,7 +90,7 @@ TEST_CASE("twai install uninstall (loopback)", "[twai]")
8990
TEST_ESP_OK(twai_node_enable(node_hdl[SOC_TWAI_CONTROLLER_NUM]));
9091
tx_frame.header.id = 0x100;
9192
TEST_ESP_OK(twai_node_transmit(node_hdl[SOC_TWAI_CONTROLLER_NUM], &tx_frame, 0));
92-
twai_frame_t rx_frame;
93+
twai_frame_t rx_frame = {0};
9394
printf("Test receive from task\n");
9495
TEST_ESP_ERR(ESP_ERR_INVALID_STATE, twai_node_receive_from_isr(node_hdl[SOC_TWAI_CONTROLLER_NUM], &rx_frame));
9596

@@ -115,6 +116,7 @@ static void test_twai_baudrate_correctness(twai_clock_source_t clk_src, uint32_t
115116
};
116117
TEST_ESP_OK(twai_new_node_onchip(&node_config, &twai_node));
117118
TEST_ESP_OK(twai_node_enable(twai_node));
119+
printf("TWAI driver installed @ %ld Hz\n", test_bitrate);
118120

119121
// We use the UART baudrate detection submodule to measure the TWAI baudrate
120122
uart_bitrate_detect_config_t detect_config = {
@@ -148,8 +150,13 @@ static void test_twai_baudrate_correctness(twai_clock_source_t clk_src, uint32_t
148150
TEST_CASE("twai baudrate measurement", "[twai]")
149151
{
150152
twai_clock_source_t twai_available_clk_srcs[] = SOC_TWAI_CLKS;
153+
uint32_t source_freq = 0;
151154
for (size_t i = 0; i < sizeof(twai_available_clk_srcs) / sizeof(twai_available_clk_srcs[0]); i++) {
155+
TEST_ESP_OK(esp_clk_tree_src_get_freq_hz(twai_available_clk_srcs[i], ESP_CLK_TREE_SRC_FREQ_PRECISION_APPROX, &source_freq));
156+
printf("Test clock source %d frequency: %ld Hz\n", twai_available_clk_srcs[i], source_freq);
152157
test_twai_baudrate_correctness(twai_available_clk_srcs[i], 200000);
158+
159+
test_twai_baudrate_correctness(twai_available_clk_srcs[i], 1000000);
153160
}
154161
}
155162

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
};

0 commit comments

Comments
 (0)