HPM SDK
HPMicro Software Development Kit
hpm_can_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_CAN_DRV_H
9 #define HPM_CAN_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_can_regs.h"
13 #include "hpm_soc_feature.h"
14 
23 /***********************************************************************************************************************
24  *
25  * Definitions
26  *
27  **********************************************************************************************************************/
28 
32 enum {
42 };
43 
47 #define CAN_EVENT_RECEIVE (CAN_RTIF_RIF_MASK)
48 #define CAN_EVENT_RX_BUF_OVERRUN (CAN_RTIF_ROIF_MASK)
49 #define CAN_EVENT_RX_BUF_FULL (CAN_RTIF_RFIF_MASK)
50 #define CAN_EVENT_RX_BUF_ALMOST_FULL (CAN_RTIF_RAFIF_MASK)
51 #define CAN_EVENT_TX_PRIMARY_BUF (CAN_RTIF_TPIF_MASK)
52 #define CAN_EVENT_TX_SECONDARY_BUF (CAN_RTIF_TSIF_MASK)
53 #define CAN_EVENT_ERROR (CAN_RTIF_EIF_MASK)
54 #define CAN_EVENT_ABORT (CAN_RTIF_AIF_MASK)
59 #define CAN_STB_IS_EMPTY (0U)
60 #define CAN_STB_LESS_EQUAL_HALF_FULL (1U)
61 #define CAN_STB_MORE_THAN_HALF_FULL (2U)
62 #define CAN_STB_IS_FULL (3U)
67 #define CAN_RXBUF_IS_EMPTY (0U)
68 #define CAN_RXBUF_HAS_DATA (1U)
69 #define CAN_RXBUF_ALMOST_FULL (2U)
70 #define CAN_RXBUF_IS_FULL (3U)
76 #define CAN_ERROR_WARNING_LIMIT_FLAG (CAN_ERRINT_EWARN_MASK)
77 #define CAN_ERROR_PASSIVE_MODE_ACTIVE_FLAG (CAN_ERRINT_EPASS_MASK)
78 #define CAN_ERROR_PASSIVE_INT_ENABLE (CAN_ERRINT_EPIE_MASK)
79 #define CAN_ERROR_PASSIVE_INT_FLAG (CAN_ERRINT_EPIF_MASK)
80 #define CAN_ERROR_ARBITRAITION_LOST_INT_ENABLE (CAN_ERRINT_ALIE_MASK)
81 #define CAN_ERROR_ARBITRAITION_LOST_INT_FLAG (CAN_ERRINT_ALIE_MASK)
82 #define CAN_ERROR_BUS_ERROR_INT_ENABLE (CAN_ERRINT_BEIE_MASK)
83 #define CAN_ERROR_BUS_ERROR_INT_FLAG (CAN_ERRINT_BEIF_MASK)
89 #define CAN_KIND_OF_ERROR_NO_ERROR (0U)
90 #define CAN_KIND_OF_ERROR_BIT_ERROR (1U)
91 #define CAN_KIND_OF_ERROR_FORM_ERROR (2U)
92 #define CAN_KIND_OF_ERROR_STUFF_ERROR (3U)
93 #define CAN_KIND_OF_ERROR_ACK_ERROR (4U)
94 #define CAN_KIND_OF_ERROR_CRC_ERROR (5U)
95 #define CAN_KIND_OF_ERROR_OTHER_ERROR (6U)
96 #define CAN_KIND_OF_ERROR_BUS_OFF (7U)
101 typedef enum _can_mode {
107 
111 typedef enum _can_bit_timing_option {
116 
120 enum {
138 };
139 
143 typedef struct {
144  uint16_t prescaler;
145  uint16_t num_seg1;
146  uint16_t num_seg2;
147  uint16_t num_sjw;
149 
153 typedef union _can_rx_buf {
154  uint32_t buffer[20];
155  struct {
156  struct {
157  uint32_t id: 29;
158  uint32_t : 1;
159  uint32_t error_state_indicator: 1;
160  };
161  struct {
162  uint32_t dlc: 4;
163  uint32_t bitrate_switch: 1;
164  uint32_t canfd_frame: 1;
165  uint32_t remote_frame: 1;
166  uint32_t extend_id: 1;
167  uint32_t : 4;
168  uint32_t loopback_message: 1;
169  uint32_t error_type: 3;
170  uint32_t cycle_time: 16;
171  };
172  uint8_t data[];
173  };
175 
179 typedef union _can_tx_buf {
180  uint32_t buffer[18];
181  struct {
182  struct {
183  uint32_t id: 29;
184  uint32_t : 2;
185  uint32_t transmit_timestamp_enable: 1;
186  };
187  struct {
188  uint32_t dlc: 4;
189  uint32_t bitrate_switch: 1;
190  uint32_t canfd_frame: 1;
191  uint32_t remote_frame: 1;
192  uint32_t extend_id: 1;
193  uint32_t : 24;
194  };
195  uint8_t data[];
196  };
198 
202 typedef enum _can_filter_id_mode {
207 
211 typedef struct {
212  uint16_t index;
214  bool enable;
215  uint32_t code;
216  uint32_t mask;
218 
222 typedef struct {
223  union {
224  struct {
225  uint32_t baudrate;
226  uint32_t baudrate_fd;
235  };
236  struct {
239  };
240  };
241 
248  bool enable_tdc;
250  uint8_t filter_list_num;
257 } can_config_t;
258 
259 
260 #ifdef __cplusplus
261 extern "C" {
262 #endif
263 
264 
273 static inline void can_reset(CAN_Type *base, bool enable)
274 {
275  if (enable) {
277  } else {
279  }
280 }
281 
292 static inline void can_set_node_mode(CAN_Type *base, can_node_mode_t mode)
293 {
295  if (mode == can_mode_loopback_internal) {
296  cfg_stat |= CAN_CMD_STA_CMD_CTRL_LBMI_MASK;
297  } else if (mode == can_mode_loopback_external) {
298  cfg_stat |= CAN_CMD_STA_CMD_CTRL_LBME_MASK;
299  } else if (mode == can_mode_listen_only) {
300  cfg_stat |= CAN_CMD_STA_CMD_CTRL_LOM_MASK;
301  } else {
302  /* CAN normal work mode, no change needed here */
303  }
304  base->CMD_STA_CMD_CTRL = cfg_stat;
305 }
306 
314 static inline void can_enable_listen_only_mode(CAN_Type *base, bool enable)
315 {
316  if (enable) {
318  } else {
320  }
321 }
322 
330 static inline void can_enter_standby_mode(CAN_Type *base, bool enable)
331 {
332  if (enable) {
334  } else {
336  }
337 }
338 
345 static inline void can_disable_ptb_retransmission(CAN_Type *base, bool enable)
346 {
347  if (enable) {
349  } else {
351  }
352 }
353 
362 {
363  return ((base->CMD_STA_CMD_CTRL & CAN_CMD_STA_CMD_CTRL_TPSS_MASK) != 0);
364 }
365 
372 static inline void can_disable_stb_retransmission(CAN_Type *base, bool enable)
373 {
374  if (enable) {
376  } else {
378  }
379 }
380 
389 {
390  return ((base->CMD_STA_CMD_CTRL & CAN_CMD_STA_CMD_CTRL_TSSS_MASK) != 0);
391 }
392 
393 
401 static inline void can_select_tx_buffer(CAN_Type *base, bool select_secondary_buffer)
402 {
403  if (select_secondary_buffer) {
405  } else {
407  }
408 }
409 
416 {
418 }
419 
425 {
427 }
428 
433 static inline void can_start_message_transmit(CAN_Type *base)
434 {
436 }
437 
442 static inline void can_start_all_message_transmit(CAN_Type *base)
443 {
445 }
446 
451 static inline void can_abort_message_transmit(CAN_Type *base)
452 {
454 }
455 
460 static inline void can_switch_to_next_tx_buffer(CAN_Type *base)
461 {
463 }
464 
472 static inline void can_select_tx_buffer_priority_mode(CAN_Type *base, bool enable_priority_decision)
473 {
474  if (enable_priority_decision) {
476  } else {
478  }
479 }
480 
488 {
490 }
491 
498 {
499  return ((base->CMD_STA_CMD_CTRL & CAN_CMD_STA_CMD_CTRL_TPE_MASK) != 0U);
500 }
501 
508 {
510 }
511 
519 static inline bool can_is_in_bus_off_mode(CAN_Type *base)
520 {
521  return ((base->CMD_STA_CMD_CTRL & CAN_CMD_STA_CMD_CTRL_BUSOFF_MASK) != 0U);
522 }
523 
530 static inline void can_enable_self_ack(CAN_Type *base, bool enable)
531 {
532  if (enable) {
534  } else {
536  }
537 }
538 
546 static inline void can_set_receive_buffer_overflow_mode(CAN_Type *base, bool override_enable)
547 {
548  if (override_enable) {
550  } else {
552  }
553 }
554 
560 static inline bool can_is_receive_buffer_overflow(CAN_Type *base)
561 {
563 }
564 
570 static inline void can_release_receive_buffer(CAN_Type *base)
571 {
573 }
574 
580 static inline void can_allow_store_all_data_in_receive_buffer(CAN_Type *base, bool allow)
581 {
582  if (allow) {
584  } else {
586  }
587 }
588 
594 static inline uint8_t can_get_receive_buffer_status(CAN_Type *base)
595 {
597 }
598 
605 {
607 }
608 
609 
615 static inline void can_enable_can_fd_iso_mode(CAN_Type *base, bool enable)
616 {
617  if (enable) {
619  } else {
621  }
622 }
623 
629 static inline void can_enable_tx_rx_irq(CAN_Type *base, uint8_t mask)
630 {
631  base->RTIE |= mask;
632 }
633 
639 static inline void can_disable_tx_rx_irq(CAN_Type *base, uint8_t mask)
640 {
641  base->RTIE &= ~mask;
642 }
643 
649 static inline void can_clear_tx_rx_flags(CAN_Type *base, uint8_t flags)
650 {
651  base->RTIF = flags;
652 }
653 
660 static inline uint8_t can_get_tx_rx_flags(CAN_Type *base)
661 {
662  return base->RTIF;
663 }
664 
670 static inline void can_enable_error_irq(CAN_Type *base, uint8_t mask)
671 {
672  base->ERRINT |= mask;
673 }
674 
681 static inline void can_disable_error_irq(CAN_Type *base, uint8_t mask)
682 {
683  base->ERRINT &= ~mask;
684 }
685 
691 static inline uint8_t can_get_error_interrupt_flags(CAN_Type *base)
692 {
693  return (base->ERRINT & (uint8_t) ~(CAN_ERRINT_EPIE_MASK | CAN_ERRINT_ALIE_MASK | CAN_ERRINT_BEIE_MASK));
694 }
695 
701 static inline void can_clear_error_interrupt_flags(CAN_Type *base, uint8_t flags)
702 {
704  base->ERRINT |= flags;
705 }
706 
712 static inline uint8_t can_get_last_error_kind(CAN_Type *base)
713 {
714  return CAN_EALCAP_KOER_GET(base->EALCAP);
715 }
716 
723 {
724  return CAN_EALCAP_ALC_GET(base->EALCAP);
725 }
726 
734 static inline void can_set_transmitter_delay_compensation(CAN_Type *base, uint8_t sample_point, bool enable)
735 {
736 #if defined(CAN_SOC_CANFD_TDC_REQUIRE_STUFF_EXCEPTION_WORKAROUND) && (CAN_SOC_CANFD_TDC_REQUIRE_STUFF_EXCEPTION_WORKAROUND == 1)
737  (void) sample_point;
738  (void) enable;
739  base->TDC = CAN_TDC_TDCEN_SET((uint8_t) enable);
740 #else
741  base->TDC = CAN_TDC_SSPOFF_SET(sample_point) | CAN_TDC_TDCEN_SET((uint8_t) enable);
742 #endif
743 }
744 
751 static inline void can_set_warning_limits(CAN_Type *base, uint8_t almost_full_limit, uint8_t error_warning_limit)
752 {
753  base->LIMIT = CAN_LIMIT_AFWL_SET(almost_full_limit) | CAN_LIMIT_EWL_SET(error_warning_limit);
754 }
755 
761 static inline uint8_t can_get_receive_error_count(CAN_Type *base)
762 {
763  return base->RECNT;
764 }
765 
771 static inline uint8_t can_get_transmit_error_count(CAN_Type *base)
772 {
773  return base->TECNT;
774 }
775 
782 static inline void can_enable_filter(CAN_Type *base, uint32_t index)
783 {
784  base->ACF_EN |= (uint16_t) (1U << index);
785 }
786 
793 static inline void can_disable_filter(CAN_Type *base, uint32_t index)
794 {
795  base->ACF_EN &= (uint16_t) ~(1U << index);
796 }
797 
804 
812 hpm_stat_t can_init(CAN_Type *base, can_config_t *config, uint32_t src_clk_freq);
813 
814 
820 void can_deinit(CAN_Type *base);
821 
822 
828 static inline void can_set_slow_speed_timing(CAN_Type *base, const can_bit_timing_param_t *param)
829 {
830  base->S_PRESC = CAN_S_PRESC_S_PRESC_SET(param->prescaler - 1U) | CAN_S_PRESC_S_SEG_1_SET(param->num_seg1 - 2U) |
832 }
833 
839 static inline void can_set_fast_speed_timing(CAN_Type *base, const can_bit_timing_param_t *param)
840 {
841  base->F_PRESC = CAN_F_PRESC_F_PRESC_SET(param->prescaler - 1U) | CAN_F_PRESC_F_SEG_1_SET(param->num_seg1 - 2U) |
843 }
844 
856  uint32_t src_clk_freq, uint32_t baudrate,
857  uint16_t samplepoint_min, uint16_t samplepoint_max);
858 
859 
870 hpm_stat_t can_calculate_bit_timing(uint32_t src_clk_freq, can_bit_timing_option_t option, uint32_t baudrate,
871  uint16_t samplepoint_min, uint16_t samplepoint_max,
872  can_bit_timing_param_t *timing_param);
873 
874 
875 
883 
891 
899 
900 
908 
916 
933 
934 
953 
960 #ifdef __cplusplus
961 }
962 #endif
963 
964 
965 #endif /* HPM_CAN_DRV_H */
static void can_set_node_mode(CAN_Type *base, can_node_mode_t mode)
Set CAN mode.
Definition: hpm_can_drv.h:292
hpm_stat_t can_read_received_message(CAN_Type *base, can_receive_buf_t *message)
Read Received CAN message.
Definition: hpm_can_drv.c:544
static void can_enable_listen_only_mode(CAN_Type *base, bool enable)
Enable CAN listen-only mode.
Definition: hpm_can_drv.h:314
hpm_stat_t can_send_message_blocking(CAN_Type *base, const can_transmit_buf_t *message)
Send CAN message using blocking transfer.
Definition: hpm_can_drv.c:366
static void can_disable_filter(CAN_Type *base, uint32_t index)
Disable a specified CAN filter.
Definition: hpm_can_drv.h:793
hpm_stat_t can_receive_message_blocking(CAN_Type *base, can_receive_buf_t *message)
Receive CAN message using blocking transfer.
Definition: hpm_can_drv.c:488
static void can_release_receive_buffer(CAN_Type *base)
Release CAN receive buffer.
Definition: hpm_can_drv.h:570
static bool can_is_in_bus_off_mode(CAN_Type *base)
Check whether the CAN is in BUS off mode.
Definition: hpm_can_drv.h:519
static void can_start_message_transmit(CAN_Type *base)
Start CAN message transmit.
Definition: hpm_can_drv.h:433
enum _can_bit_timing_option can_bit_timing_option_t
CAN bit timing options.
static void can_set_warning_limits(CAN_Type *base, uint8_t almost_full_limit, uint8_t error_warning_limit)
Set CAN warning limits.
Definition: hpm_can_drv.h:751
#define CAN_RXBUF_IS_EMPTY
CAN Receive Buffer States.
Definition: hpm_can_drv.h:67
static void can_start_all_message_transmit(CAN_Type *base)
Start CAN all messages transmit.
Definition: hpm_can_drv.h:442
hpm_stat_t can_calculate_bit_timing(uint32_t src_clk_freq, can_bit_timing_option_t option, uint32_t baudrate, uint16_t samplepoint_min, uint16_t samplepoint_max, can_bit_timing_param_t *timing_param)
Calculate the CAN bit timing for CAN BUS.
Definition: hpm_can_drv.c:169
static void can_allow_store_all_data_in_receive_buffer(CAN_Type *base, bool allow)
Allow can store all date in receive buffer.
Definition: hpm_can_drv.h:580
hpm_stat_t can_send_message_nonblocking(CAN_Type *base, const can_transmit_buf_t *message)
Send CAN message using non-blocking transfer.
Definition: hpm_can_drv.c:438
static void can_disable_ptb_retransmission(CAN_Type *base, bool enable)
Disable the re-transmission for the primary transmission buffer.
Definition: hpm_can_drv.h:345
static void can_set_slow_speed_timing(CAN_Type *base, const can_bit_timing_param_t *param)
Configure the Slow Speed Bit timing using low-level interface.
Definition: hpm_can_drv.h:828
hpm_stat_t can_init(CAN_Type *base, can_config_t *config, uint32_t src_clk_freq)
Initialize the CAN controller.
Definition: hpm_can_drv.c:633
static void can_clear_tx_rx_flags(CAN_Type *base, uint8_t flags)
Clear CAN TX/RX flags.
Definition: hpm_can_drv.h:649
hpm_stat_t can_send_high_priority_message_blocking(CAN_Type *base, const can_transmit_buf_t *message)
Send high-priority message using blocking transfer.
Definition: hpm_can_drv.c:409
static void can_enter_standby_mode(CAN_Type *base, bool enable)
Enter CAN standby mode.
Definition: hpm_can_drv.h:330
enum _can_mode can_node_mode_t
CAN loopback types.
static uint8_t can_get_tx_rx_flags(CAN_Type *base)
Get CAN TX/RX flags.
Definition: hpm_can_drv.h:660
static uint8_t can_get_secondary_transmit_buffer_status(CAN_Type *base)
Get CAN secondary transmit buffer status.
Definition: hpm_can_drv.h:487
void can_deinit(CAN_Type *base)
De-initialize the CAN controller.
Definition: hpm_can_drv.c:730
static uint8_t can_get_transmit_error_count(CAN_Type *base)
Get CAN transmit error count.
Definition: hpm_can_drv.h:771
static void can_disable_error_irq(CAN_Type *base, uint8_t mask)
Disable CAN error interrupt.
Definition: hpm_can_drv.h:681
static uint8_t can_get_receive_buffer_status(CAN_Type *base)
Get CAN receive buffer status.
Definition: hpm_can_drv.h:594
static void can_start_high_priority_message_transmit(CAN_Type *base)
Start CAN high priority message transmit.
Definition: hpm_can_drv.h:415
static void can_enable_self_ack(CAN_Type *base, bool enable)
Enable can self ack.
Definition: hpm_can_drv.h:530
static uint8_t can_get_receive_error_count(CAN_Type *base)
Get CAN receive error count.
Definition: hpm_can_drv.h:761
static void can_enable_can_fd_iso_mode(CAN_Type *base, bool enable)
Enable CAN FD ISO mode.
Definition: hpm_can_drv.h:615
static uint8_t can_get_last_error_kind(CAN_Type *base)
Get last CAN error kind.
Definition: hpm_can_drv.h:712
static void can_set_fast_speed_timing(CAN_Type *base, const can_bit_timing_param_t *param)
Configure the Fast Speed Bit timing using low-level interface.
Definition: hpm_can_drv.h:839
static void can_enable_error_irq(CAN_Type *base, uint8_t mask)
Enable CAN error interrupt.
Definition: hpm_can_drv.h:670
static void can_enable_filter(CAN_Type *base, uint32_t index)
Enable a specified CAN filter.
Definition: hpm_can_drv.h:782
static bool can_is_stb_retransmission_disabled(CAN_Type *base)
Check whether re-transmission is disabled for STB or not.
Definition: hpm_can_drv.h:388
static void can_switch_to_next_tx_buffer(CAN_Type *base)
Switch to next CAN tx buffer.
Definition: hpm_can_drv.h:460
hpm_stat_t can_send_high_priority_message_nonblocking(CAN_Type *base, const can_transmit_buf_t *message)
Send high-priority message using non-blocking transfer.
Definition: hpm_can_drv.c:464
static uint8_t can_get_last_arbitration_lost_position(CAN_Type *base)
Get CAN last arbitrary lost position.
Definition: hpm_can_drv.h:722
static void can_abort_high_priority_message_transmit(CAN_Type *base)
Abort CAN high priority message transmit.
Definition: hpm_can_drv.h:424
static void can_reset(CAN_Type *base, bool enable)
Reset CAN controller.
Definition: hpm_can_drv.h:273
static void can_set_transmitter_delay_compensation(CAN_Type *base, uint8_t sample_point, bool enable)
Set CAN transmitter delay compensation.
Definition: hpm_can_drv.h:734
hpm_stat_t can_get_default_config(can_config_t *config)
Get default CAN configuration parameters.
Definition: hpm_can_drv.c:596
static void can_select_tx_buffer(CAN_Type *base, bool select_secondary_buffer)
Select CAN TX buffer.
Definition: hpm_can_drv.h:401
static uint8_t can_get_error_interrupt_flags(CAN_Type *base)
Get CAN error interrupt flags.
Definition: hpm_can_drv.h:691
static bool can_is_receive_buffer_overflow(CAN_Type *base)
Check whether CAN receive buffer is overflow.
Definition: hpm_can_drv.h:560
static void can_enable_tx_rx_irq(CAN_Type *base, uint8_t mask)
Enable CAN TX/RX interrupt.
Definition: hpm_can_drv.h:629
hpm_stat_t can_set_bit_timing(CAN_Type *base, can_bit_timing_option_t option, uint32_t src_clk_freq, uint32_t baudrate, uint16_t samplepoint_min, uint16_t samplepoint_max)
Configure the CAN bit timing for CAN BUS.
Definition: hpm_can_drv.c:243
static void can_select_tx_buffer_priority_mode(CAN_Type *base, bool enable_priority_decision)
Select CAN tx buffer priority mode.
Definition: hpm_can_drv.h:472
#define CAN_STB_IS_FULL
Definition: hpm_can_drv.h:62
static void can_clear_error_interrupt_flags(CAN_Type *base, uint8_t flags)
Get CAN clear interrupt flags.
Definition: hpm_can_drv.h:701
static bool can_is_ptb_retransmission_disabled(CAN_Type *base)
Check whether re-transmission is disabled for PTB or not.
Definition: hpm_can_drv.h:361
hpm_stat_t can_set_filter(CAN_Type *base, const can_filter_config_t *config)
Configure the acceptable filter.
Definition: hpm_can_drv.c:274
static bool can_is_data_available_in_receive_buffer(CAN_Type *base)
Check whether there are data available in receive buffer.
Definition: hpm_can_drv.h:604
static void can_disable_tx_rx_irq(CAN_Type *base, uint8_t mask)
Disable CAN TX/RX interrupt.
Definition: hpm_can_drv.h:639
static void can_disable_stb_retransmission(CAN_Type *base, bool enable)
Disable the re-transmission for the secondary transmission buffer.
Definition: hpm_can_drv.h:372
static void can_abort_message_transmit(CAN_Type *base)
Abort CAN message transmit.
Definition: hpm_can_drv.h:451
union _can_rx_buf can_receive_buf_t
CAN receive buffer data structure.
static bool can_is_primary_transmit_buffer_full(CAN_Type *base)
Check whether the primary transmit buffer is full.
Definition: hpm_can_drv.h:497
static bool can_is_secondary_transmit_buffer_full(CAN_Type *base)
Check whether the secondary transmit buffer is full.
Definition: hpm_can_drv.h:507
union _can_tx_buf can_transmit_buf_t
CAN transmit buffer data structure.
static void can_set_receive_buffer_overflow_mode(CAN_Type *base, bool override_enable)
Set CAN receive buffer overflow mode.
Definition: hpm_can_drv.h:546
enum _can_filter_id_mode can_filter_id_mode_t
CAN acceptance filter modes.
@ status_can_crc_error
Definition: hpm_can_drv.h:37
@ status_can_form_error
Definition: hpm_can_drv.h:34
@ status_can_filter_index_invalid
Definition: hpm_can_drv.h:40
@ status_can_ack_error
Definition: hpm_can_drv.h:36
@ status_can_stuff_error
Definition: hpm_can_drv.h:35
@ status_can_tx_fifo_full
Definition: hpm_can_drv.h:39
@ status_can_filter_num_invalid
Definition: hpm_can_drv.h:41
@ status_can_bit_error
Definition: hpm_can_drv.h:33
@ status_can_other_error
Definition: hpm_can_drv.h:38
@ can_payload_size_32
Definition: hpm_can_drv.h:134
@ can_payload_size_8
Definition: hpm_can_drv.h:129
@ can_payload_size_4
Definition: hpm_can_drv.h:125
@ can_payload_size_48
Definition: hpm_can_drv.h:135
@ can_payload_size_64
Definition: hpm_can_drv.h:136
@ can_payload_size_2
Definition: hpm_can_drv.h:123
@ can_payload_size_20
Definition: hpm_can_drv.h:132
@ can_payload_size_5
Definition: hpm_can_drv.h:126
@ can_payload_size_24
Definition: hpm_can_drv.h:133
@ can_payload_size_1
Definition: hpm_can_drv.h:122
@ can_payload_size_16
Definition: hpm_can_drv.h:131
@ can_payload_size_6
Definition: hpm_can_drv.h:127
@ can_payload_size_7
Definition: hpm_can_drv.h:128
@ can_payload_size_3
Definition: hpm_can_drv.h:124
@ can_payload_size_max
Definition: hpm_can_drv.h:137
@ can_payload_size_0
Definition: hpm_can_drv.h:121
@ can_payload_size_12
Definition: hpm_can_drv.h:130
uint32_t hpm_stat_t
Definition: hpm_common.h:119
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:128
#define IS_HPM_BITMASK_SET(val, mask)
Definition: hpm_common.h:61
@ status_group_can
Definition: hpm_common.h:150
@ can_filter_id_mode_standard_frames
Definition: hpm_can_drv.h:204
@ can_mode_loopback_external
Definition: hpm_can_drv.h:104
@ can_bit_timing_canfd_norminal
Definition: hpm_can_drv.h:113
@ can_mode_normal
Definition: hpm_can_drv.h:102
@ can_mode_listen_only
Definition: hpm_can_drv.h:105
@ can_filter_id_mode_both_frames
Definition: hpm_can_drv.h:203
@ can_mode_loopback_internal
Definition: hpm_can_drv.h:103
@ can_filter_id_mode_extended_frames
Definition: hpm_can_drv.h:205
@ can_bit_timing_canfd_data
Definition: hpm_can_drv.h:114
@ can_bit_timing_can2_0
Definition: hpm_can_drv.h:112
#define CAN_S_PRESC_S_SEG_2_SET(x)
Definition: hpm_can_regs.h:846
#define CAN_CMD_STA_CMD_CTRL_RSTAT_GET(x)
Definition: hpm_can_regs.h:148
#define CAN_S_PRESC_S_PRESC_SET(x)
Definition: hpm_can_regs.h:824
#define CAN_CMD_STA_CMD_CTRL_TPA_MASK
Definition: hpm_can_regs.h:333
#define CAN_S_PRESC_S_SJW_SET(x)
Definition: hpm_can_regs.h:835
#define CAN_CMD_STA_CMD_CTRL_RREL_MASK
Definition: hpm_can_regs.h:120
#define CAN_F_PRESC_F_SEG_1_SET(x)
Definition: hpm_can_regs.h:902
#define CAN_TDC_TDCEN_SET(x)
Definition: hpm_can_regs.h:942
#define CAN_S_PRESC_S_SEG_1_SET(x)
Definition: hpm_can_regs.h:857
#define CAN_CMD_STA_CMD_CTRL_SACK_MASK
Definition: hpm_can_regs.h:81
#define CAN_EALCAP_ALC_GET(x)
Definition: hpm_can_regs.h:931
#define CAN_CMD_STA_CMD_CTRL_TPSS_MASK
Definition: hpm_can_regs.h:453
#define CAN_CMD_STA_CMD_CTRL_TSALL_MASK
Definition: hpm_can_regs.h:379
#define CAN_CMD_STA_CMD_CTRL_ROV_MASK
Definition: hpm_can_regs.h:107
#define CAN_LIMIT_AFWL_SET(x)
Definition: hpm_can_regs.h:801
#define CAN_CMD_STA_CMD_CTRL_TSSS_MASK
Definition: hpm_can_regs.h:465
#define CAN_F_PRESC_F_PRESC_SET(x)
Definition: hpm_can_regs.h:869
#define CAN_CMD_STA_CMD_CTRL_FD_ISO_MASK
Definition: hpm_can_regs.h:161
#define CAN_CMD_STA_CMD_CTRL_STBY_MASK
Definition: hpm_can_regs.h:292
#define CAN_CMD_STA_CMD_CTRL_LBMI_MASK
Definition: hpm_can_regs.h:441
#define CAN_ERRINT_BEIE_MASK
Definition: hpm_can_regs.h:773
#define CAN_CMD_STA_CMD_CTRL_ROM_MASK
Definition: hpm_can_regs.h:94
#define CAN_CMD_STA_CMD_CTRL_TSSTAT_GET(x)
Definition: hpm_can_regs.h:245
#define CAN_CMD_STA_CMD_CTRL_BUSOFF_MASK
Definition: hpm_can_regs.h:501
#define CAN_ERRINT_EPIE_MASK
Definition: hpm_can_regs.h:732
#define CAN_F_PRESC_F_SEG_2_SET(x)
Definition: hpm_can_regs.h:891
#define CAN_CMD_STA_CMD_CTRL_TSMODE_MASK
Definition: hpm_can_regs.h:202
#define CAN_LIMIT_EWL_SET(x)
Definition: hpm_can_regs.h:812
#define CAN_CMD_STA_CMD_CTRL_TPE_MASK
Definition: hpm_can_regs.h:313
#define CAN_EALCAP_KOER_GET(x)
Definition: hpm_can_regs.h:922
#define CAN_CMD_STA_CMD_CTRL_TSONE_MASK
Definition: hpm_can_regs.h:356
#define CAN_CMD_STA_CMD_CTRL_LBME_MASK
Definition: hpm_can_regs.h:430
#define CAN_CMD_STA_CMD_CTRL_TSNEXT_MASK
Definition: hpm_can_regs.h:184
#define CAN_CMD_STA_CMD_CTRL_LOM_MASK
Definition: hpm_can_regs.h:275
#define CAN_TDC_SSPOFF_SET(x)
Definition: hpm_can_regs.h:954
#define CAN_F_PRESC_F_SJW_SET(x)
Definition: hpm_can_regs.h:880
#define CAN_CMD_STA_CMD_CTRL_RBALL_MASK
Definition: hpm_can_regs.h:132
#define CAN_CMD_STA_CMD_CTRL_TSA_MASK
Definition: hpm_can_regs.h:401
#define CAN_ERRINT_ALIE_MASK
Definition: hpm_can_regs.h:753
#define CAN_CMD_STA_CMD_CTRL_TBSEL_MASK
Definition: hpm_can_regs.h:258
#define CAN_CMD_STA_CMD_CTRL_RESET_MASK
Definition: hpm_can_regs.h:418
Definition: hpm_can_regs.h:12
__RW uint32_t S_PRESC
Definition: hpm_can_regs.h:21
__RW uint32_t F_PRESC
Definition: hpm_can_regs.h:22
__R uint8_t EALCAP
Definition: hpm_can_regs.h:23
__RW uint8_t LIMIT
Definition: hpm_can_regs.h:20
__RW uint32_t CMD_STA_CMD_CTRL
Definition: hpm_can_regs.h:16
__R uint8_t TECNT
Definition: hpm_can_regs.h:26
__RW uint16_t ACF_EN
Definition: hpm_can_regs.h:29
__W uint8_t RTIF
Definition: hpm_can_regs.h:18
__R uint8_t RECNT
Definition: hpm_can_regs.h:25
__RW uint8_t RTIE
Definition: hpm_can_regs.h:17
__RW uint8_t TDC
Definition: hpm_can_regs.h:24
__RW uint8_t ERRINT
Definition: hpm_can_regs.h:19
CAN Bit timing parameters.
Definition: hpm_can_drv.h:143
uint16_t prescaler
Definition: hpm_can_drv.h:144
uint16_t num_sjw
Definition: hpm_can_drv.h:147
uint16_t num_seg2
Definition: hpm_can_drv.h:146
uint16_t num_seg1
Definition: hpm_can_drv.h:145
CAN configuration.
Definition: hpm_can_drv.h:222
bool enable_tdc
Definition: hpm_can_drv.h:248
uint8_t irq_error_enable_mask
Definition: hpm_can_drv.h:254
bool enable_canfd
Definition: hpm_can_drv.h:244
uint32_t baudrate
Definition: hpm_can_drv.h:225
can_filter_config_t * filter_list
Definition: hpm_can_drv.h:251
uint16_t can20_samplepoint_max
Definition: hpm_can_drv.h:230
uint8_t irq_txrx_enable_mask
Definition: hpm_can_drv.h:253
bool enable_can_fd_iso_mode
Definition: hpm_can_drv.h:256
can_bit_timing_param_t can_timing
Definition: hpm_can_drv.h:237
bool enable_self_ack
Definition: hpm_can_drv.h:245
uint16_t canfd_samplepoint_min
Definition: hpm_can_drv.h:232
bool disable_ptb_retransmission
Definition: hpm_can_drv.h:246
uint32_t baudrate_fd
Definition: hpm_can_drv.h:226
bool use_lowlevel_timing_setting
Definition: hpm_can_drv.h:243
can_node_mode_t mode
Definition: hpm_can_drv.h:242
uint16_t can20_samplepoint_min
Definition: hpm_can_drv.h:228
bool enable_tx_buffer_priority_mode
Definition: hpm_can_drv.h:255
can_bit_timing_param_t canfd_timing
Definition: hpm_can_drv.h:238
uint16_t canfd_samplepoint_max
Definition: hpm_can_drv.h:234
bool disable_stb_retransmission
Definition: hpm_can_drv.h:247
uint8_t filter_list_num
Definition: hpm_can_drv.h:250
CAN acceptance filter configuration.
Definition: hpm_can_drv.h:211
bool enable
Definition: hpm_can_drv.h:214
can_filter_id_mode_t id_mode
Definition: hpm_can_drv.h:213
uint16_t index
Definition: hpm_can_drv.h:212
uint32_t code
Definition: hpm_can_drv.h:215
uint32_t mask
Definition: hpm_can_drv.h:216