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.