mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-25 17:52:36 +00:00
feat(twai): support multiple twai controllers
Closes https://github.com/espressif/esp-idf/issues/11383
This commit is contained in:
@@ -3,12 +3,6 @@ Two-Wire Automotive Interface (TWAI)
|
||||
|
||||
.. -------------------------------- Overview -----------------------------------
|
||||
|
||||
.. only:: esp32c6
|
||||
|
||||
.. warning::
|
||||
|
||||
{IDF_TARGET_NAME} has {IDF_TARGET_SOC_TWAI_CONTROLLER_NUM} TWAI controllers, but at the moment, the driver can only support ``TWAI0`` due to the limitation of the driver structure.
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
@@ -86,6 +80,13 @@ The TWAI controller's interface consists of 4 signal lines known as **TX, RX, BU
|
||||
|
||||
.. ------------------------------ Configuration --------------------------------
|
||||
|
||||
API Naming Conventions
|
||||
----------------------
|
||||
|
||||
.. note::
|
||||
|
||||
The TWAI driver provides two sets of API. One is handle-free and is widely used in IDF versions earlier than v5.2, but it can only support one TWAI hardware controller. The other set is with handles, and the function name is usually suffixed with "v2", which can support any number of TWAI controllers. These two sets of API can be used at the same time, but it is recommended to use the "v2" version in your new projects.
|
||||
|
||||
Driver Configuration
|
||||
--------------------
|
||||
|
||||
@@ -397,6 +398,64 @@ The following code snippet demonstrates how to configure, install, and start the
|
||||
|
||||
The usage of macro initializers is not mandatory and each of the configuration structures can be manually.
|
||||
|
||||
Install Multiple TWAI Instances
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The following code snippet demonstrates how to install multiple TWAI instances via the use of the :cpp:func:`twai_driver_install_v2` function.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/twai.h"
|
||||
|
||||
void app_main()
|
||||
{
|
||||
twai_handle_t twai_bus_0;
|
||||
twai_handle_t twai_bus_1;
|
||||
//Initialize configuration structures using macro initializers
|
||||
twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT(GPIO_NUM_0, GPIO_NUM_1, TWAI_MODE_NORMAL);
|
||||
twai_timing_config_t t_config = TWAI_TIMING_CONFIG_500KBITS();
|
||||
twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL();
|
||||
|
||||
//Install driver for TWAI bus 0
|
||||
g_config.controller_id = 0;
|
||||
if (twai_driver_install_v2(&g_config, &t_config, &f_config, &twai_bus_0) == ESP_OK) {
|
||||
printf("Driver installed\n");
|
||||
} else {
|
||||
printf("Failed to install driver\n");
|
||||
return;
|
||||
}
|
||||
//Start TWAI driver
|
||||
if (twai_start_v2(twai_bus_0) == ESP_OK) {
|
||||
printf("Driver started\n");
|
||||
} else {
|
||||
printf("Failed to start driver\n");
|
||||
return;
|
||||
}
|
||||
|
||||
//Install driver for TWAI bus 1
|
||||
g_config.controller_id = 1;
|
||||
g_config.tx_io = GPIO_NUM_2;
|
||||
g_config.rx_io = GPIO_NUM_3;
|
||||
if (twai_driver_install_v2(&g_config, &t_config, &f_config, &twai_bus_1) == ESP_OK) {
|
||||
printf("Driver installed\n");
|
||||
} else {
|
||||
printf("Failed to install driver\n");
|
||||
return;
|
||||
}
|
||||
//Start TWAI driver
|
||||
if (twai_start_v2(twai_bus_1) == ESP_OK) {
|
||||
printf("Driver started\n");
|
||||
} else {
|
||||
printf("Failed to start driver\n");
|
||||
return;
|
||||
}
|
||||
|
||||
//Other Driver operations must use version 2 API as well
|
||||
...
|
||||
|
||||
}
|
||||
|
||||
Message Transmission
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
Reference in New Issue
Block a user