38#define FDCANDEV_STM32_CHAN_NUMOF 3 
   40#define FDCANDEV_STM32_CHAN_NUMOF 2 
   41#elif defined(FDCAN1) || DOXYGEN 
   42#define FDCANDEV_STM32_CHAN_NUMOF 1 
   44#error "FDCAN STM32: CPU not supported" 
   51#define ISR_FDCAN1_IT0  isr_fdcan1_it0   
   52#define ISR_FDCAN1_IT1  isr_fdcan1_it1   
   59#define FDCAN_STM32_NB_STD_FILTER   28U  
   60#define FDCAN_STM32_NB_EXT_FILTER   8U   
   61#define FDCAN_STM32_NB_FILTER \ 
   62        (FDCAN_STM32_NB_STD_FILTER + FDCAN_STM32_NB_EXT_FILTER)  
 
   69#ifndef FDCANDEV_STM32_DEFAULT_BITRATE 
   70#define FDCANDEV_STM32_DEFAULT_BITRATE 500000U 
   73#ifndef FDCANDEV_STM32_DEFAULT_FD_DATA_BITRATE 
   74#define FDCANDEV_STM32_DEFAULT_FD_DATA_BITRATE 1000000U 
   79#ifndef FDCANDEV_STM32_DEFAULT_SPT 
   81#define FDCANDEV_STM32_DEFAULT_SPT     875 
   86    FDCAN_GlobalTypeDef *
can;   
 
  104#define HAVE_CAN_CONF_T 
  110#define FDCAN_STM32_TX_MAILBOXES 3 
  112#define FDCAN_STM32_RX_MAILBOXES (FDCANDEV_STM32_CHAN_NUMOF * 6) 
  122#define FDCAN_SRAM_MESSAGE_RAM_SIZE     0x350    
  128#define FDCAN_SRAM_FLESA                0x1CU    
  129#define FDCAN_SRAM_F0SA                 0x2CU    
  130#define FDCAN_SRAM_F1SA                 0x62U    
  131#define FDCAN_SRAM_EFSA                 0x98U    
  132#define FDCAN_SRAM_TBSA                 0x9EU    
  139#define FDCAN_SRAM_FLS_SFID1_Pos        (16U) 
  141#define FDCAN_SRAM_FLS_SFID1_Msk        (0x7FFU << FDCAN_SRAM_FLS_SFID1_Pos) 
  143#define FDCAN_SRAM_FLS_SFID1            FDCAN_SRAM_FLS_SFID1_Msk 
  145#define FDCAN_SRAM_FLS_SFID2_Msk        (0x7FFU) 
  147#define FDCAN_SRAM_FLS_SFID2            FDCAN_SRAM_FLS_SFID2_Msk 
  149#define FDCAN_SRAM_FLS_SFT_Pos          (30U) 
  151#define FDCAN_SRAM_FLS_SFT_Msk          (0x3U << FDCAN_SRAM_FLS_SFT_Pos) 
  153#define FDCAN_SRAM_FLS_SFT              FDCAN_SRAM_FLS_SFT_Msk 
  155#define FDCAN_SRAM_FLS_SFEC_Pos         (27U) 
  157#define FDCAN_SRAM_FLS_SFEC_Msk         (0x7U << FDCAN_SRAM_FLS_SFEC_Pos) 
  159#define FDCAN_SRAM_FLS_SFEC             FDCAN_SRAM_FLS_SFEC_Msk 
  167#define FDCAN_SRAM_FLS_FILTER_SIZE      1U 
  169#define FDCAN_SRAM_FLS_SFT_DISABLED     (0x3U << FDCAN_SRAM_FLS_SFT_Pos) 
  171#define FDCAN_SRAM_FLS_SFT_CLASSIC      (0x2U << FDCAN_SRAM_FLS_SFT_Pos) 
  173#define FDCAN_SRAM_FLS_SFEC_DISABLED    (0x0U << FDCAN_SRAM_FLS_SFEC_Pos) 
  175#define FDCAN_SRAM_FLS_SFEC_FIFO0       (0x1U << FDCAN_SRAM_FLS_SFEC_Pos) 
  177#define FDCAN_SRAM_FLS_SFEC_FIFO1       (0x2U << FDCAN_SRAM_FLS_SFEC_Pos) 
  185#define FDCAN_SRAM_FLE_F0_EFID1_Msk     0x1FFFFFFFU 
  187#define FDCAN_SRAM_FLE_F0_EFID1         FDCAN_SRAM_FLE_F0_EFID1_Msk 
  189#define FDCAN_SRAM_FLE_F1_EFID2_Msk     0x1FFFFFFFU 
  191#define FDCAN_SRAM_FLE_F1_EFID2         FDCAN_SRAM_FLE_F1_EFID2_Msk 
  193#define FDCAN_SRAM_FLE_F1_EFT_Pos       30U 
  195#define FDCAN_SRAM_FLE_F1_EFT_Msk       (0x3U << FDCAN_SRAM_FLE_F1_EFT_Pos) 
  197#define FDCAN_SRAM_FLE_F1_EFT           FDCAN_SRAM_FLE_F1_EFT_Msk 
  199#define FDCAN_SRAM_FLE_F0_EFEC_Pos      29U 
  201#define FDCAN_SRAM_FLE_F0_EFEC_Msk      (0x7U << FDCAN_SRAM_FLE_F0_EFEC_Pos) 
  203#define FDCAN_SRAM_FLE_F0_EFEC          FDCAN_SRAM_FLE_F0_EFEC_Msk 
  211#define FDCAN_SRAM_FLE_FILTER_SIZE      2U 
  213#define FDCAN_SRAM_FLE_F1_EFT_CLASSIC   (0x2U << FDCAN_SRAM_FLE_F1_EFT_Pos) 
  215#define FDCAN_SRAM_FLE_F0_EFEC_DISABLED (0x0U) 
  217#define FDCAN_SRAM_FLE_F0_EFEC_FIFO0    (0x1U << FDCAN_SRAM_FLE_F0_EFEC_Pos) 
  219#define FDCAN_SRAM_FLE_F0_EFEC_FIFO1    (0x2U << FDCAN_SRAM_FLE_F0_EFEC_Pos) 
  227#define FDCAN_SRAM_TXBUFFER_T0_ESI_Pos  31U 
  229#define FDCAN_SRAM_TXBUFFER_T0_ESI_Msk  (0x1U << FDCAN_SRAM_TXBUFFER_T0_ESI_Pos) 
  231#define FDCAN_SRAM_TXBUFFER_T0_ESI      FDCAN_SRAM_TXBUFFER_T0_ESI_Msk 
  233#define FDCAN_SRAM_TXBUFFER_T0_XTD_Pos  30U 
  235#define FDCAN_SRAM_TXBUFFER_T0_XTD_Msk  (0x1U << FDCAN_SRAM_TXBUFFER_T0_XTD_Pos) 
  237#define FDCAN_SRAM_TXBUFFER_T0_XTD      FDCAN_SRAM_TXBUFFER_T0_XTD_Msk 
  239#define FDCAN_SRAM_TXBUFFER_T0_RTR_Pos  29U 
  241#define FDCAN_SRAM_TXBUFFER_T0_RTR_Msk  (0x1U << FDCAN_SRAM_TXBUFFER_T0_RTR_Pos) 
  243#define FDCAN_SRAM_TXBUFFER_T0_RTR      FDCAN_SRAM_TXBUFFER_T0_RTR_Msk 
  245#define FDCAN_SRAM_TXBUFFER_T0_ID_Pos   18U 
  247#define FDCAN_SRAM_TXBUFFER_T1_EFC_Pos  23U 
  249#define FDCAN_SRAM_TXBUFFER_T1_EFC_Msk  (0x1U << FDCAN_SRAM_TXBUFFER_T1_EFC_Pos) 
  251#define FDCAN_SRAM_TXBUFFER_T1_EFC      FDCAN_SRAM_TXBUFFER_T1_EFC_Msk 
  253#define FDCAN_SRAM_TXBUFFER_T1_FDF_Pos  21U 
  255#define FDCAN_SRAM_TXBUFFER_T1_FDF_Msk  (0x1U << FDCAN_SRAM_TXBUFFER_T1_FDF_Pos) 
  257#define FDCAN_SRAM_TXBUFFER_T1_FDF      FDCAN_SRAM_TXBUFFER_T1_FDF_Msk 
  259#define FDCAN_SRAM_TXBUFFER_T1_BRS_Pos  20U 
  261#define FDCAN_SRAM_TXBUFFER_T1_BRS_Msk  (0x1U << FDCAN_SRAM_TXBUFFER_T1_BRS_Pos) 
  263#define FDCAN_SRAM_TXBUFFER_T1_BRS      FDCAN_SRAM_TXBUFFER_T1_BRS_Msk 
  265#define FDCAN_SRAM_TXBUFFER_T1_DLC_Pos  16U 
  267#define FDCAN_SRAM_TXBUFFER_T1_DLC_Msk  (0xFU << FDCAN_SRAM_TXBUFFER_T1_DLC_Pos) 
  269#define FDCAN_SRAM_TXBUFFER_T1_DLC      FDCAN_SRAM_TXBUFFER_T1_DLC_Msk 
  277#define FDCAN_SRAM_TXBUFFER_SIZE                18U 
  279#define FDCAN_SRAM_TXBUFFER_T0_ESI_PASSIVE_FLAG (0x0U << FDCAN_SRAM_TXBUFFER_T0_ESI_Pos) 
  281#define FDCAN_SRAM_TXBUFFER_T0_ESI_RECESSIVE    (0x1U << FDCAN_SRAM_TXBUFFER_T0_ESI_Pos) 
  283#define FDCAN_SRAM_TXBUFFER_T1_EFC_DISABLE      (0x0U << FDCAN_SRAM_TXBUFFER_T1_EFC_Pos) 
  285#define FDCAN_SRAM_TXBUFFER_T1_EFC_STORE_EVENTS (0x1U << FDCAN_SRAM_TXBUFFER_T1_EFC_Pos) 
  287#define FDCAN_SRAM_TXBUFFER_T1_FDF_CLASSIC      (0x0U << FDCAN_SRAM_TXBUFFER_T1_FDF_Pos) 
  289#define FDCAN_SRAM_TXBUFFER_T1_FDF_FD           (0x1U << FDCAN_SRAM_TXBUFFER_T1_FDF_Pos) 
  291#define FDCAN_SRAM_TXBUFFER_T1_BRS_OFF          (0x0U << FDCAN_SRAM_TXBUFFER_T1_BRS_Pos) 
  293#define FDCAN_SRAM_TXBUFFER_T1_BRS_ON           (0x1U << FDCAN_SRAM_TXBUFFER_T1_BRS_Pos) 
  301#define FDCAN_SRAM_RXFIFO_R0_ESI_Pos    31U 
  303#define FDCAN_SRAM_RXFIFO_R0_ESI_Msk    (0x1U << FDCAN_SRAM_RXFIFO_R0_ESI_Pos) 
  305#define FDCAN_SRAM_RXFIFO_R0_ESI        FDCAN_SRAM_RXFIFO_R0_ESI_Msk 
  307#define FDCAN_SRAM_RXFIFO_R0_XTD_Pos    30U 
  309#define FDCAN_SRAM_RXFIFO_R0_XTD_Msk    (0x1U << FDCAN_SRAM_RXFIFO_R0_XTD_Pos) 
  311#define FDCAN_SRAM_RXFIFO_R0_XTD        FDCAN_SRAM_RXFIFO_R0_XTD_Msk 
  313#define FDCAN_SRAM_RXFIFO_R0_RTR_Pos    29U 
  315#define FDCAN_SRAM_RXFIFO_R0_RTR_Msk    (0x1U << FDCAN_SRAM_RXFIFO_R0_RTR_Pos) 
  317#define FDCAN_SRAM_RXFIFO_R0_RTR        FDCAN_SRAM_RXFIFO_R0_RTR_Msk 
  319#define FDCAN_SRAM_RXFIFO_R0_ID_Pos     18U 
  321#define FDCAN_SRAM_RXFIFO_R0_ID_Msk     0x1FFFFFFFU 
  323#define FDCAN_SRAM_RXFIFO_R0_ID         FDCAN_SRAM_RXFIFO_R0_ID_Msk 
  325#define FDCAN_SRAM_RXFIFO_R1_EFC_Pos    23U 
  327#define FDCAN_SRAM_RXFIFO_R1_EFC_Msk    (0x1U << FDCAN_SRAM_RXFIFO_R1_EFC_Pos) 
  329#define FDCAN_SRAM_RXFIFO_R1_EFC        FDCAN_SRAM_RXFIFO_R1_EFC_Msk 
  331#define FDCAN_SRAM_RXFIFO_R1_FDF_Pos    21U 
  333#define FDCAN_SRAM_RXFIFO_R1_FDF_Msk    (0x1U << FDCAN_SRAM_RXFIFO_R1_FDF_Pos) 
  335#define FDCAN_SRAM_RXFIFO_R1_FDF        FDCAN_SRAM_RXFIFO_R1_FDF_Msk 
  337#define FDCAN_SRAM_RXFIFO_R1_BRS_Pos    20U 
  339#define FDCAN_SRAM_RXFIFO_R1_BRS_Msk    (0x1U << FDCAN_SRAM_RXFIFO_R1_BRS_Pos) 
  341#define FDCAN_SRAM_RXFIFO_R1_BRS        FDCAN_SRAM_RXFIFO_R1_BRS_Msk 
  343#define FDCAN_SRAM_RXFIFO_R1_DLC_Pos    16U 
  345#define FDCAN_SRAM_RXFIFO_R1_DLC_Msk    (0xFU << FDCAN_SRAM_RXFIFO_R1_DLC_Pos) 
  347#define FDCAN_SRAM_RXFIFO_R1_DLC        FDCAN_SRAM_RXFIFO_R1_DLC_Msk 
  355#define FDCAN_SRAM_RXFIFO_SIZE          54U 
  357#define FDCAN_SRAM_RXFIFO_ELEMENT_SIZE  18U 
  359#define FDCAN_SRAM_RXFIFO_R0_ESI_PASSIVE_FLAG   (0x0U << FDCAN_SRAM_RXFIFO_R0_ESI_Pos) 
  361#define FDCAN_SRAM_RXFIFO_R0_ESI_RECESSIVE      (0x1U << FDCAN_SRAM_RXFIFO_R0_ESI_Pos) 
  363#define FDCAN_SRAM_RXFIFO_R1_EFC_DISABLE        (0x0U << FDCAN_SRAM_RXFIFO_R1_EFC_Pos) 
  365#define FDCAN_SRAM_RXFIFO_R1_EFC_STORE_EVENTS   (0x1U << FDCAN_SRAM_RXFIFO_R1_EFC_Pos) 
  367#define FDCAN_SRAM_RXFIFO_R1_FDF_CLASSIC        (0x0U << FDCAN_SRAM_RXFIFO_R1_FDF_Pos) 
  369#define FDCAN_SRAM_RXFIFO_R1_FDF_FD             (0x1U << FDCAN_SRAM_RXFIFO_R1_FDF_Pos) 
  371#define FDCAN_SRAM_RXFIFO_R1_BRS_OFF            (0x0U << FDCAN_SRAM_RXFIFO_R1_BRS_Pos) 
  373#define FDCAN_SRAM_RXFIFO_R1_BRS_ON             (0x1U << FDCAN_SRAM_RXFIFO_R1_BRS_Pos) 
Definitions for low-level CAN driver interface.
 
struct candev_stm32_isr candev_stm32_isr_t
Internal interrupt flags.
 
#define FDCAN_STM32_RX_MAILBOXES
Maximum number of frame the driver can receive simultaneously.
 
struct candev_stm32_rx_mailbox candev_stm32_rx_mailbox_t
This structure holds anything related to the receive part.
 
#define FDCAN_STM32_TX_MAILBOXES
Number of frame the driver can transmit simultaneously.
 
void candev_stm32_set_pins(can_t *dev, gpio_t tx_pin, gpio_t rx_pin, gpio_af_t af)
Set the pins of an stm32 CAN device.
 
struct candev_stm32_isr candev_stm32_isr_t
Internal interrupt flags.
 
gpio_af_t
Override alternative GPIO mode options.
 
struct can can_t
Low level device structure for ESP32 CAN (extension of candev_t)
 
struct candev_conf can_conf_t
Linux candev configuration.
 
struct candev candev_t
Forward declaration for candev struct.
 
struct can_frame can_frame_t
CAN frame.
 
ESP CAN device configuration.
 
CAN_TypeDef * can
CAN device.
 
uint8_t nart
No automatic retransmission.
 
uint8_t it1_irqn
Interrupt line 1 IRQ channel.
 
gpio_t tx_pin
CAN transceiver TX pin.
 
uint8_t txfp
Transmit FIFO priority.
 
uint32_t rcc_mask
RCC mask to enable clock.
 
uint8_t abom
Automatic bus-off management.
 
gpio_t rx_pin
CAN transceiver RX pin.
 
uint8_t awum
Automatic wakeup mode.
 
uint8_t it0_irqn
Interrupt line 0 IRQ channel.
 
gpio_af_t af
Alternate pin function to use.
 
bool en_deep_sleep_wake_up
Enable deep-sleep wake-up interrupt.
 
uint8_t rflm
Receive FIFO locked mode.
 
uint8_t ttcm
Time triggered communication mode.
 
uint8_t lbkm
Loopback mode.
 
Low level device structure for ESP32 CAN (extension of candev_t)
 
const struct can_frame * tx_mailbox[CAN_STM32_TX_MAILBOXES]
Tx mailboxes.
 
candev_stm32_isr_t isr_flags
ISR flags.
 
candev_stm32_rx_mailbox_t rx_mailbox
Rx mailboxes.
 
candev_t candev
candev base structure
 
const can_conf_t * conf
Configuration.
 
gpio_af_t af
Alternate pin function to use.
 
Internal interrupt flags.
 
int isr_rx
Rx FIFO interrupt.
 
int isr_tx
Tx mailboxes interrupt.
 
int isr_wkup
Wake up interrupt.
 
This structure holds anything related to the receive part.
 
int write_idx
Write index in the receive FIFO.
 
can_frame_t frame[FDCAN_STM32_RX_MAILBOXES]
Receive FIFO.
 
int read_idx
Read index in the receive FIFO.
 
int is_full
Flag set when the FIFO is full.