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 {
43 };
44 
48 #define CAN_EVENT_RECEIVE (CAN_RTIF_RIF_MASK)
49 #define CAN_EVENT_RX_BUF_OVERRUN (CAN_RTIF_ROIF_MASK)
50 #define CAN_EVENT_RX_BUF_FULL (CAN_RTIF_RFIF_MASK)
51 #define CAN_EVENT_RX_BUF_ALMOST_FULL (CAN_RTIF_RAFIF_MASK)
52 #define CAN_EVENT_TX_PRIMARY_BUF (CAN_RTIF_TPIF_MASK)
53 #define CAN_EVENT_TX_SECONDARY_BUF (CAN_RTIF_TSIF_MASK)
54 #define CAN_EVENT_ERROR (CAN_RTIF_EIF_MASK)
55 #define CAN_EVENT_ABORT (CAN_RTIF_AIF_MASK)
60 #define CAN_STB_IS_EMPTY (0U)
61 #define CAN_STB_LESS_EQUAL_HALF_FULL (1U)
62 #define CAN_STB_MORE_THAN_HALF_FULL (2U)
63 #define CAN_STB_IS_FULL (3U)
68 #define CAN_RXBUF_IS_EMPTY (0U)
69 #define CAN_RXBUF_HAS_DATA (1U)
70 #define CAN_RXBUF_ALMOST_FULL (2U)
71 #define CAN_RXBUF_IS_FULL (3U)
77 #define CAN_ERROR_WARNING_LIMIT_FLAG (CAN_ERRINT_EWARN_MASK)
78 #define CAN_ERROR_PASSIVE_MODE_ACTIVE_FLAG (CAN_ERRINT_EPASS_MASK)
79 #define CAN_ERROR_PASSIVE_INT_ENABLE (CAN_ERRINT_EPIE_MASK)
80 #define CAN_ERROR_PASSIVE_INT_FLAG (CAN_ERRINT_EPIF_MASK)
81 #define CAN_ERROR_ARBITRATION_LOST_INT_ENABLE (CAN_ERRINT_ALIE_MASK)
82 #define CAN_ERROR_ARBITRATION_LOST_INT_FLAG (CAN_ERRINT_ALIE_MASK)
83 #define CAN_ERROR_BUS_ERROR_INT_ENABLE (CAN_ERRINT_BEIE_MASK)
84 #define CAN_ERROR_BUS_ERROR_INT_FLAG (CAN_ERRINT_BEIF_MASK)
90 #define CAN_KIND_OF_ERROR_NO_ERROR (0U)
91 #define CAN_KIND_OF_ERROR_BIT_ERROR (1U)
92 #define CAN_KIND_OF_ERROR_FORM_ERROR (2U)
93 #define CAN_KIND_OF_ERROR_STUFF_ERROR (3U)
94 #define CAN_KIND_OF_ERROR_ACK_ERROR (4U)
95 #define CAN_KIND_OF_ERROR_CRC_ERROR (5U)
96 #define CAN_KIND_OF_ERROR_OTHER_ERROR (6U)
97 #define CAN_KIND_OF_ERROR_BUS_OFF (7U)
102 typedef enum _can_mode {
108 
112 typedef enum _can_bit_timing_option {
117 
121 enum {
139 };
140 
144 typedef struct {
145  uint16_t prescaler;
146  uint16_t num_seg1;
147  uint16_t num_seg2;
148  uint16_t num_sjw;
150 
154 typedef union _can_rx_buf {
155  uint32_t buffer[20];
156  struct {
157  struct {
158  uint32_t id: 29;
159  uint32_t : 1;
160  uint32_t error_state_indicator: 1;
161  };
162  struct {
163  uint32_t dlc: 4;
164  uint32_t bitrate_switch: 1;
165  uint32_t canfd_frame: 1;
166  uint32_t remote_frame: 1;
167  uint32_t extend_id: 1;
168  uint32_t : 4;
169  uint32_t loopback_message: 1;
170  uint32_t error_type: 3;
171  uint32_t cycle_time: 16;
172  };
173  uint8_t data[];
174  };
176 
180 typedef union _can_tx_buf {
181  uint32_t buffer[18];
182  struct {
183  struct {
184  uint32_t id: 29;
185  uint32_t : 2;
186  uint32_t transmit_timestamp_enable: 1;
187  };
188  struct {
189  uint32_t dlc: 4;
190  uint32_t bitrate_switch: 1;
191  uint32_t canfd_frame: 1;
192  uint32_t remote_frame: 1;
193  uint32_t extend_id: 1;
194  uint32_t : 24;
195  };
196  uint8_t data[];
197  };
199 
203 typedef enum _can_filter_id_mode {
208 
212 typedef struct {
213  uint16_t index;
215  bool enable;
216  uint32_t code;
217  uint32_t mask;
219 
223 typedef struct {
224  union {
225  struct {
226  uint32_t baudrate;
227  uint32_t baudrate_fd;
236  };
237  struct {
240  };
241  };
242 
249  bool enable_tdc;
251  uint8_t filter_list_num;
258 } can_config_t;
259 
260 
261 #ifdef __cplusplus
262 extern "C" {
263 #endif
264 
265 
274 static inline void can_reset(CAN_Type *base, bool enable)
275 {
276  if (enable) {
278  } else {
280  }
281 }
282 
287 static inline void can_force_bus_off(CAN_Type *base)
288 {
290 }
291 
302 static inline void can_set_node_mode(CAN_Type *base, can_node_mode_t mode)
303 {
305  if (mode == can_mode_loopback_internal) {
306  cfg_stat |= CAN_CMD_STA_CMD_CTRL_LBMI_MASK;
307  } else if (mode == can_mode_loopback_external) {
308  cfg_stat |= CAN_CMD_STA_CMD_CTRL_LBME_MASK;
309  } else if (mode == can_mode_listen_only) {
310  cfg_stat |= CAN_CMD_STA_CMD_CTRL_LOM_MASK;
311  } else {
312  /* CAN normal work mode, no change needed here */
313  }
314  base->CMD_STA_CMD_CTRL = cfg_stat;
315 }
316 
324 static inline void can_enable_listen_only_mode(CAN_Type *base, bool enable)
325 {
326  if (enable) {
328  } else {
330  }
331 }
332 
340 static inline void can_enter_standby_mode(CAN_Type *base, bool enable)
341 {
342  if (enable) {
344  } else {
346  }
347 }
348 
355 static inline void can_disable_ptb_retransmission(CAN_Type *base, bool enable)
356 {
357  if (enable) {
359  } else {
361  }
362 }
363 
372 {
373  return ((base->CMD_STA_CMD_CTRL & CAN_CMD_STA_CMD_CTRL_TPSS_MASK) != 0);
374 }
375 
382 static inline void can_disable_stb_retransmission(CAN_Type *base, bool enable)
383 {
384  if (enable) {
386  } else {
388  }
389 }
390 
399 {
400  return ((base->CMD_STA_CMD_CTRL & CAN_CMD_STA_CMD_CTRL_TSSS_MASK) != 0);
401 }
402 
403 
411 static inline void can_select_tx_buffer(CAN_Type *base, bool select_secondary_buffer)
412 {
413  if (select_secondary_buffer) {
415  } else {
417  }
418 }
419 
426 {
428 }
429 
435 {
437 }
438 
443 static inline void can_start_message_transmit(CAN_Type *base)
444 {
446 }
447 
452 static inline void can_start_all_message_transmit(CAN_Type *base)
453 {
455 }
456 
461 static inline void can_abort_message_transmit(CAN_Type *base)
462 {
464 }
465 
470 static inline void can_switch_to_next_tx_buffer(CAN_Type *base)
471 {
473 }
474 
482 static inline void can_select_tx_buffer_priority_mode(CAN_Type *base, bool enable_priority_decision)
483 {
484  if (enable_priority_decision) {
486  } else {
488  }
489 }
490 
498 {
500 }
501 
508 {
509  return ((base->CMD_STA_CMD_CTRL & CAN_CMD_STA_CMD_CTRL_TPE_MASK) != 0U);
510 }
511 
518 {
520 }
521 
529 static inline bool can_is_in_bus_off_mode(CAN_Type *base)
530 {
531  return ((base->CMD_STA_CMD_CTRL & CAN_CMD_STA_CMD_CTRL_BUSOFF_MASK) != 0U);
532 }
533 
540 static inline void can_enable_self_ack(CAN_Type *base, bool enable)
541 {
542  if (enable) {
544  } else {
546  }
547 }
548 
556 static inline void can_set_receive_buffer_overflow_mode(CAN_Type *base, bool override_enable)
557 {
558  if (override_enable) {
560  } else {
562  }
563 }
564 
570 static inline bool can_is_receive_buffer_overflow(CAN_Type *base)
571 {
573 }
574 
580 static inline void can_release_receive_buffer(CAN_Type *base)
581 {
583 }
584 
590 static inline void can_allow_store_all_data_in_receive_buffer(CAN_Type *base, bool allow)
591 {
592  if (allow) {
594  } else {
596  }
597 }
598 
604 static inline uint8_t can_get_receive_buffer_status(CAN_Type *base)
605 {
607 }
608 
615 {
617 }
618 
619 
625 static inline void can_enable_can_fd_iso_mode(CAN_Type *base, bool enable)
626 {
627  if (enable) {
629  } else {
631  }
632 }
633 
639 static inline void can_enable_tx_rx_irq(CAN_Type *base, uint8_t mask)
640 {
641  base->RTIE |= mask;
642 }
643 
649 static inline void can_disable_tx_rx_irq(CAN_Type *base, uint8_t mask)
650 {
651  base->RTIE &= ~mask;
652 }
653 
659 static inline void can_clear_tx_rx_flags(CAN_Type *base, uint8_t flags)
660 {
661  base->RTIF = flags;
662 }
663 
670 static inline uint8_t can_get_tx_rx_flags(CAN_Type *base)
671 {
672  return base->RTIF;
673 }
674 
680 static inline void can_enable_error_irq(CAN_Type *base, uint8_t mask)
681 {
682  base->ERRINT |= mask;
683 }
684 
691 static inline void can_disable_error_irq(CAN_Type *base, uint8_t mask)
692 {
693  base->ERRINT &= ~mask;
694 }
695 
701 static inline uint8_t can_get_error_interrupt_flags(CAN_Type *base)
702 {
703  return (base->ERRINT & (uint8_t) ~(CAN_ERRINT_EPIE_MASK | CAN_ERRINT_ALIE_MASK | CAN_ERRINT_BEIE_MASK));
704 }
705 
711 static inline void can_clear_error_interrupt_flags(CAN_Type *base, uint8_t flags)
712 {
714  base->ERRINT |= flags;
715 }
716 
722 static inline uint8_t can_get_last_error_kind(CAN_Type *base)
723 {
724  return CAN_EALCAP_KOER_GET(base->EALCAP);
725 }
726 
733 {
734  return CAN_EALCAP_ALC_GET(base->EALCAP);
735 }
736 
744 static inline void can_set_transmitter_delay_compensation(CAN_Type *base, uint8_t sample_point, bool enable)
745 {
746 #if defined(CAN_SOC_CANFD_TDC_REQUIRE_STUFF_EXCEPTION_WORKAROUND) && (CAN_SOC_CANFD_TDC_REQUIRE_STUFF_EXCEPTION_WORKAROUND == 1)
747  (void) sample_point;
748  (void) enable;
749  base->TDC = CAN_TDC_TDCEN_SET((uint8_t) enable);
750 #else
751  base->TDC = CAN_TDC_SSPOFF_SET(sample_point) | CAN_TDC_TDCEN_SET((uint8_t) enable);
752 #endif
753 }
754 
761 static inline void can_set_warning_limits(CAN_Type *base, uint8_t almost_full_limit, uint8_t error_warning_limit)
762 {
763  base->LIMIT = CAN_LIMIT_AFWL_SET(almost_full_limit) | CAN_LIMIT_EWL_SET(error_warning_limit);
764 }
765 
771 static inline uint8_t can_get_receive_error_count(CAN_Type *base)
772 {
773  return base->RECNT;
774 }
775 
781 static inline uint8_t can_get_transmit_error_count(CAN_Type *base)
782 {
783  return base->TECNT;
784 }
785 
792 static inline void can_enable_filter(CAN_Type *base, uint32_t index)
793 {
794  base->ACF_EN |= (uint16_t) (1U << index);
795 }
796 
803 static inline void can_disable_filter(CAN_Type *base, uint32_t index)
804 {
805  base->ACF_EN &= (uint16_t) ~(1U << index);
806 }
807 
814 
822 hpm_stat_t can_init(CAN_Type *base, can_config_t *config, uint32_t src_clk_freq);
823 
828 void can_deinit(CAN_Type *base);
829 
830 
836 static inline void can_set_slow_speed_timing(CAN_Type *base, const can_bit_timing_param_t *param)
837 {
838  base->S_PRESC = CAN_S_PRESC_S_PRESC_SET(param->prescaler - 1U) | CAN_S_PRESC_S_SEG_1_SET(param->num_seg1 - 2U) |
840 }
841 
847 static inline void can_set_fast_speed_timing(CAN_Type *base, const can_bit_timing_param_t *param)
848 {
849  base->F_PRESC = CAN_F_PRESC_F_PRESC_SET(param->prescaler - 1U) | CAN_F_PRESC_F_SEG_1_SET(param->num_seg1 - 2U) |
851 }
852 
864  uint32_t src_clk_freq, uint32_t baudrate,
865  uint16_t samplepoint_min, uint16_t samplepoint_max);
866 
867 
878 hpm_stat_t can_calculate_bit_timing(uint32_t src_clk_freq, can_bit_timing_option_t option, uint32_t baudrate,
879  uint16_t samplepoint_min, uint16_t samplepoint_max,
880  can_bit_timing_param_t *timing_param);
881 
882 
883 
891 
899 
907 
908 
916 
924 
941 
942 
961 
968 #ifdef __cplusplus
969 }
970 #endif
971 
972 
973 #endif /* HPM_CAN_DRV_H */
#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
static void can_set_node_mode(CAN_Type *base, can_node_mode_t mode)
Set CAN mode.
Definition: hpm_can_drv.h:302
hpm_stat_t can_read_received_message(CAN_Type *base, can_receive_buf_t *message)
Read Received CAN message.
Definition: hpm_can_drv.c:566
static void can_enable_listen_only_mode(CAN_Type *base, bool enable)
Enable CAN listen-only mode.
Definition: hpm_can_drv.h:324
static void can_force_bus_off(CAN_Type *base)
Force CAN controller to Bus-off mode.
Definition: hpm_can_drv.h:287
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:388
static void can_disable_filter(CAN_Type *base, uint32_t index)
Disable a specified CAN filter.
Definition: hpm_can_drv.h:803
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:510
static void can_release_receive_buffer(CAN_Type *base)
Release CAN receive buffer.
Definition: hpm_can_drv.h:580
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:529
static void can_start_message_transmit(CAN_Type *base)
Start CAN message transmit.
Definition: hpm_can_drv.h:443
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:761
#define CAN_RXBUF_IS_EMPTY
CAN Receive Buffer States.
Definition: hpm_can_drv.h:68
static void can_start_all_message_transmit(CAN_Type *base)
Start CAN all messages transmit.
Definition: hpm_can_drv.h:452
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:590
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:460
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:355
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:836
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:655
static void can_clear_tx_rx_flags(CAN_Type *base, uint8_t flags)
Clear CAN TX/RX flags.
Definition: hpm_can_drv.h:659
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:431
static void can_enter_standby_mode(CAN_Type *base, bool enable)
Enter CAN standby mode.
Definition: hpm_can_drv.h:340
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:670
static uint8_t can_get_secondary_transmit_buffer_status(CAN_Type *base)
Get CAN secondary transmit buffer status.
Definition: hpm_can_drv.h:497
void can_deinit(CAN_Type *base)
De-initialize the CAN controller.
Definition: hpm_can_drv.c:778
static uint8_t can_get_transmit_error_count(CAN_Type *base)
Get CAN transmit error count.
Definition: hpm_can_drv.h:781
static void can_disable_error_irq(CAN_Type *base, uint8_t mask)
Disable CAN error interrupt.
Definition: hpm_can_drv.h:691
static uint8_t can_get_receive_buffer_status(CAN_Type *base)
Get CAN receive buffer status.
Definition: hpm_can_drv.h:604
static void can_start_high_priority_message_transmit(CAN_Type *base)
Start CAN high priority message transmit.
Definition: hpm_can_drv.h:425
static void can_enable_self_ack(CAN_Type *base, bool enable)
Enable can self ack.
Definition: hpm_can_drv.h:540
static uint8_t can_get_receive_error_count(CAN_Type *base)
Get CAN receive error count.
Definition: hpm_can_drv.h:771
static void can_enable_can_fd_iso_mode(CAN_Type *base, bool enable)
Enable CAN FD ISO mode.
Definition: hpm_can_drv.h:625
static uint8_t can_get_last_error_kind(CAN_Type *base)
Get last CAN error kind.
Definition: hpm_can_drv.h:722
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:847
static void can_enable_error_irq(CAN_Type *base, uint8_t mask)
Enable CAN error interrupt.
Definition: hpm_can_drv.h:680
static void can_enable_filter(CAN_Type *base, uint32_t index)
Enable a specified CAN filter.
Definition: hpm_can_drv.h:792
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:398
static void can_switch_to_next_tx_buffer(CAN_Type *base)
Switch to next CAN tx buffer.
Definition: hpm_can_drv.h:470
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:486
static uint8_t can_get_last_arbitration_lost_position(CAN_Type *base)
Get CAN last arbitrary lost position.
Definition: hpm_can_drv.h:732
static void can_abort_high_priority_message_transmit(CAN_Type *base)
Abort CAN high priority message transmit.
Definition: hpm_can_drv.h:434
static void can_reset(CAN_Type *base, bool enable)
Reset CAN controller.
Definition: hpm_can_drv.h:274
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:744
hpm_stat_t can_get_default_config(can_config_t *config)
Get default CAN configuration parameters.
Definition: hpm_can_drv.c:618
static void can_select_tx_buffer(CAN_Type *base, bool select_secondary_buffer)
Select CAN TX buffer.
Definition: hpm_can_drv.h:411
static uint8_t can_get_error_interrupt_flags(CAN_Type *base)
Get CAN error interrupt flags.
Definition: hpm_can_drv.h:701
static bool can_is_receive_buffer_overflow(CAN_Type *base)
Check whether CAN receive buffer is overflow.
Definition: hpm_can_drv.h:570
static void can_enable_tx_rx_irq(CAN_Type *base, uint8_t mask)
Enable CAN TX/RX interrupt.
Definition: hpm_can_drv.h:639
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:265
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:482
#define CAN_STB_IS_FULL
Definition: hpm_can_drv.h:63
static void can_clear_error_interrupt_flags(CAN_Type *base, uint8_t flags)
Get CAN clear interrupt flags.
Definition: hpm_can_drv.h:711
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:371
hpm_stat_t can_set_filter(CAN_Type *base, const can_filter_config_t *config)
Configure the acceptable filter.
Definition: hpm_can_drv.c:296
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:614
static void can_disable_tx_rx_irq(CAN_Type *base, uint8_t mask)
Disable CAN TX/RX interrupt.
Definition: hpm_can_drv.h:649
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:382
static void can_abort_message_transmit(CAN_Type *base)
Abort CAN message transmit.
Definition: hpm_can_drv.h:461
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:507
static bool can_is_secondary_transmit_buffer_full(CAN_Type *base)
Check whether the secondary transmit buffer is full.
Definition: hpm_can_drv.h:517
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:556
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_invalid_bit_timing
Definition: hpm_can_drv.h:42
@ 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:135
@ can_payload_size_8
Definition: hpm_can_drv.h:130
@ can_payload_size_4
Definition: hpm_can_drv.h:126
@ can_payload_size_48
Definition: hpm_can_drv.h:136
@ can_payload_size_64
Definition: hpm_can_drv.h:137
@ can_payload_size_2
Definition: hpm_can_drv.h:124
@ can_payload_size_20
Definition: hpm_can_drv.h:133
@ can_payload_size_5
Definition: hpm_can_drv.h:127
@ can_payload_size_24
Definition: hpm_can_drv.h:134
@ can_payload_size_1
Definition: hpm_can_drv.h:123
@ can_payload_size_16
Definition: hpm_can_drv.h:132
@ can_payload_size_6
Definition: hpm_can_drv.h:128
@ can_payload_size_7
Definition: hpm_can_drv.h:129
@ can_payload_size_3
Definition: hpm_can_drv.h:125
@ can_payload_size_max
Definition: hpm_can_drv.h:138
@ can_payload_size_0
Definition: hpm_can_drv.h:122
@ can_payload_size_12
Definition: hpm_can_drv.h:131
uint32_t hpm_stat_t
Definition: hpm_common.h:126
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:135
#define IS_HPM_BITMASK_SET(val, mask)
Definition: hpm_common.h:61
@ status_group_can
Definition: hpm_common.h:157
@ can_filter_id_mode_standard_frames
Definition: hpm_can_drv.h:205
@ can_mode_loopback_external
Definition: hpm_can_drv.h:105
@ can_mode_normal
Definition: hpm_can_drv.h:103
@ can_bit_timing_canfd_nominal
Definition: hpm_can_drv.h:114
@ can_mode_listen_only
Definition: hpm_can_drv.h:106
@ can_filter_id_mode_both_frames
Definition: hpm_can_drv.h:204
@ can_mode_loopback_internal
Definition: hpm_can_drv.h:104
@ can_filter_id_mode_extended_frames
Definition: hpm_can_drv.h:206
@ can_bit_timing_canfd_data
Definition: hpm_can_drv.h:115
@ can_bit_timing_can2_0
Definition: hpm_can_drv.h:113
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:144
uint16_t prescaler
Definition: hpm_can_drv.h:145
uint16_t num_sjw
Definition: hpm_can_drv.h:148
uint16_t num_seg2
Definition: hpm_can_drv.h:147
uint16_t num_seg1
Definition: hpm_can_drv.h:146
CAN configuration.
Definition: hpm_can_drv.h:223
bool enable_tdc
Definition: hpm_can_drv.h:249
uint8_t irq_error_enable_mask
Definition: hpm_can_drv.h:255
bool enable_canfd
Definition: hpm_can_drv.h:245
uint32_t baudrate
Definition: hpm_can_drv.h:226
can_filter_config_t * filter_list
Definition: hpm_can_drv.h:252
uint16_t can20_samplepoint_max
Definition: hpm_can_drv.h:231
uint8_t irq_txrx_enable_mask
Definition: hpm_can_drv.h:254
bool enable_can_fd_iso_mode
Definition: hpm_can_drv.h:257
can_bit_timing_param_t can_timing
Definition: hpm_can_drv.h:238
bool enable_self_ack
Definition: hpm_can_drv.h:246
uint16_t canfd_samplepoint_min
Definition: hpm_can_drv.h:233
bool disable_ptb_retransmission
Definition: hpm_can_drv.h:247
uint32_t baudrate_fd
Definition: hpm_can_drv.h:227
bool use_lowlevel_timing_setting
Definition: hpm_can_drv.h:244
can_node_mode_t mode
Definition: hpm_can_drv.h:243
uint16_t can20_samplepoint_min
Definition: hpm_can_drv.h:229
bool enable_tx_buffer_priority_mode
Definition: hpm_can_drv.h:256
can_bit_timing_param_t canfd_timing
Definition: hpm_can_drv.h:239
uint16_t canfd_samplepoint_max
Definition: hpm_can_drv.h:235
bool disable_stb_retransmission
Definition: hpm_can_drv.h:248
uint8_t filter_list_num
Definition: hpm_can_drv.h:251
CAN acceptance filter configuration.
Definition: hpm_can_drv.h:212
bool enable
Definition: hpm_can_drv.h:215
can_filter_id_mode_t id_mode
Definition: hpm_can_drv.h:214
uint16_t index
Definition: hpm_can_drv.h:213
uint32_t code
Definition: hpm_can_drv.h:216
uint32_t mask
Definition: hpm_can_drv.h:217