HPM SDK
HPMicro Software Development Kit
CAN driver APIs

CAN driver APIs. More...

Data Structures

struct  can_bit_timing_param_t
 CAN Bit timing parameters. More...
 
struct  can_filter_config_t
 CAN acceptance filter configuration. More...
 
struct  can_config_t
 CAN configuration. More...
 

Macros

#define CAN_EVENT_RECEIVE   (CAN_RTIF_RIF_MASK)
 CAN Event definitions. More...
 
#define CAN_EVENT_RX_BUF_OVERRUN   (CAN_RTIF_ROIF_MASK)
 
#define CAN_EVENT_RX_BUF_FULL   (CAN_RTIF_RFIF_MASK)
 
#define CAN_EVENT_RX_BUF_ALMOST_FULL   (CAN_RTIF_RAFIF_MASK)
 
#define CAN_EVENT_TX_PRIMARY_BUF   (CAN_RTIF_TPIF_MASK)
 
#define CAN_EVENT_TX_SECONDARY_BUF   (CAN_RTIF_TSIF_MASK)
 
#define CAN_EVENT_ERROR   (CAN_RTIF_EIF_MASK)
 
#define CAN_EVENT_ABORT   (CAN_RTIF_AIF_MASK)
 
#define CAN_STB_IS_EMPTY   (0U)
 CAN Secondary Transmit buffer Status. More...
 
#define CAN_STB_LESS_EQUAL_HALF_FULL   (1U)
 
#define CAN_STB_MORE_THAN_HALF_FULL   (2U)
 
#define CAN_STB_IS_FULL   (3U)
 
#define CAN_RXBUF_IS_EMPTY   (0U)
 CAN Receive Buffer States. More...
 
#define CAN_RXBUF_HAS_DATA   (1U)
 
#define CAN_RXBUF_ALMOST_FULL   (2U)
 
#define CAN_RXBUF_IS_FULL   (3U)
 
#define CAN_ERROR_WARNING_LIMIT_FLAG   (CAN_ERRINT_EWARN_MASK)
 CAN Error interrupts/flags. More...
 
#define CAN_ERROR_PASSIVE_MODE_ACTIVE_FLAG   (CAN_ERRINT_EPASS_MASK)
 
#define CAN_ERROR_PASSIVE_INT_ENABLE   (CAN_ERRINT_EPIE_MASK)
 
#define CAN_ERROR_PASSIVE_INT_FLAG   (CAN_ERRINT_EPIF_MASK)
 
#define CAN_ERROR_ARBITRATION_LOST_INT_ENABLE   (CAN_ERRINT_ALIE_MASK)
 
#define CAN_ERROR_ARBITRATION_LOST_INT_FLAG   (CAN_ERRINT_ALIE_MASK)
 
#define CAN_ERROR_BUS_ERROR_INT_ENABLE   (CAN_ERRINT_BEIE_MASK)
 
#define CAN_ERROR_BUS_ERROR_INT_FLAG   (CAN_ERRINT_BEIF_MASK)
 
#define CAN_KIND_OF_ERROR_NO_ERROR   (0U)
 CAN Error Kinds. More...
 
#define CAN_KIND_OF_ERROR_BIT_ERROR   (1U)
 
#define CAN_KIND_OF_ERROR_FORM_ERROR   (2U)
 
#define CAN_KIND_OF_ERROR_STUFF_ERROR   (3U)
 
#define CAN_KIND_OF_ERROR_ACK_ERROR   (4U)
 
#define CAN_KIND_OF_ERROR_CRC_ERROR   (5U)
 
#define CAN_KIND_OF_ERROR_OTHER_ERROR   (6U)
 
#define CAN_KIND_OF_ERROR_BUS_OFF   (7U)
 

Typedefs

typedef enum _can_mode can_node_mode_t
 CAN loopback types. More...
 
typedef enum _can_bit_timing_option can_bit_timing_option_t
 CAN bit timing options. More...
 
typedef union _can_rx_buf can_receive_buf_t
 CAN receive buffer data structure. More...
 
typedef union _can_tx_buf can_transmit_buf_t
 CAN transmit buffer data structure. More...
 
typedef enum _can_filter_id_mode can_filter_id_mode_t
 CAN acceptance filter modes. More...
 

Enumerations

enum  {
  status_can_bit_error = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 0 )) , status_can_form_error = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 1 )) , status_can_stuff_error = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 2 )) , status_can_ack_error = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 3 )) ,
  status_can_crc_error = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 4 )) , status_can_other_error = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 5 )) , status_can_tx_fifo_full = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 6 )) , status_can_filter_index_invalid = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 7 )) ,
  status_can_filter_num_invalid = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 8 )) , status_can_invalid_bit_timing = ((uint32_t)( status_group_can )*1000U + (uint32_t)( 9 ))
}
 CAN error codes. More...
 
enum  {
  can_payload_size_0 = 0 , can_payload_size_1 , can_payload_size_2 , can_payload_size_3 ,
  can_payload_size_4 , can_payload_size_5 , can_payload_size_6 , can_payload_size_7 ,
  can_payload_size_8 , can_payload_size_12 , can_payload_size_16 , can_payload_size_20 ,
  can_payload_size_24 , can_payload_size_32 , can_payload_size_48 , can_payload_size_64 ,
  can_payload_size_max = can_payload_size_64
}
 CAN DLC definitions. More...
 

Functions

static void can_reset (CAN_Type *base, bool enable)
 Reset CAN controller. More...
 
static void can_force_bus_off (CAN_Type *base)
 Force CAN controller to Bus-off mode. More...
 
static void can_set_node_mode (CAN_Type *base, can_node_mode_t mode)
 Set CAN mode. More...
 
static void can_enable_listen_only_mode (CAN_Type *base, bool enable)
 Enable CAN listen-only mode. More...
 
static void can_enter_standby_mode (CAN_Type *base, bool enable)
 Enter CAN standby mode. More...
 
static void can_disable_ptb_retransmission (CAN_Type *base, bool enable)
 Disable the re-transmission for the primary transmission buffer. More...
 
static bool can_is_ptb_retransmission_disabled (CAN_Type *base)
 Check whether re-transmission is disabled for PTB or not. More...
 
static void can_disable_stb_retransmission (CAN_Type *base, bool enable)
 Disable the re-transmission for the secondary transmission buffer. More...
 
static bool can_is_stb_retransmission_disabled (CAN_Type *base)
 Check whether re-transmission is disabled for STB or not. More...
 
static void can_select_tx_buffer (CAN_Type *base, bool select_secondary_buffer)
 Select CAN TX buffer. More...
 
static void can_start_high_priority_message_transmit (CAN_Type *base)
 Start CAN high priority message transmit. More...
 
static void can_abort_high_priority_message_transmit (CAN_Type *base)
 Abort CAN high priority message transmit. More...
 
static void can_start_message_transmit (CAN_Type *base)
 Start CAN message transmit. More...
 
static void can_start_all_message_transmit (CAN_Type *base)
 Start CAN all messages transmit. More...
 
static void can_abort_message_transmit (CAN_Type *base)
 Abort CAN message transmit. More...
 
static void can_switch_to_next_tx_buffer (CAN_Type *base)
 Switch to next CAN tx buffer. More...
 
static void can_select_tx_buffer_priority_mode (CAN_Type *base, bool enable_priority_decision)
 Select CAN tx buffer priority mode. More...
 
static uint8_t can_get_secondary_transmit_buffer_status (CAN_Type *base)
 Get CAN secondary transmit buffer status. More...
 
static bool can_is_primary_transmit_buffer_full (CAN_Type *base)
 Check whether the primary transmit buffer is full. More...
 
static bool can_is_secondary_transmit_buffer_full (CAN_Type *base)
 Check whether the secondary transmit buffer is full. More...
 
static bool can_is_in_bus_off_mode (CAN_Type *base)
 Check whether the CAN is in BUS off mode. More...
 
static void can_enable_self_ack (CAN_Type *base, bool enable)
 Enable can self ack. More...
 
static void can_set_receive_buffer_overflow_mode (CAN_Type *base, bool override_enable)
 Set CAN receive buffer overflow mode. More...
 
static bool can_is_receive_buffer_overflow (CAN_Type *base)
 Check whether CAN receive buffer is overflow. More...
 
static void can_release_receive_buffer (CAN_Type *base)
 Release CAN receive buffer. More...
 
static void can_allow_store_all_data_in_receive_buffer (CAN_Type *base, bool allow)
 Allow can store all date in receive buffer. More...
 
static uint8_t can_get_receive_buffer_status (CAN_Type *base)
 Get CAN receive buffer status. More...
 
static bool can_is_data_available_in_receive_buffer (CAN_Type *base)
 Check whether there are data available in receive buffer. More...
 
static void can_enable_can_fd_iso_mode (CAN_Type *base, bool enable)
 Enable CAN FD ISO mode. More...
 
static void can_enable_tx_rx_irq (CAN_Type *base, uint8_t mask)
 Enable CAN TX/RX interrupt. More...
 
static void can_disable_tx_rx_irq (CAN_Type *base, uint8_t mask)
 Disable CAN TX/RX interrupt. More...
 
static void can_clear_tx_rx_flags (CAN_Type *base, uint8_t flags)
 Clear CAN TX/RX flags. More...
 
static uint8_t can_get_tx_rx_flags (CAN_Type *base)
 Get CAN TX/RX flags. More...
 
static void can_enable_error_irq (CAN_Type *base, uint8_t mask)
 Enable CAN error interrupt. More...
 
static void can_disable_error_irq (CAN_Type *base, uint8_t mask)
 Disable CAN error interrupt. More...
 
static uint8_t can_get_error_interrupt_flags (CAN_Type *base)
 Get CAN error interrupt flags. More...
 
static void can_clear_error_interrupt_flags (CAN_Type *base, uint8_t flags)
 Get CAN clear interrupt flags. More...
 
static uint8_t can_get_last_error_kind (CAN_Type *base)
 Get last CAN error kind. More...
 
static uint8_t can_get_last_arbitration_lost_position (CAN_Type *base)
 Get CAN last arbitrary lost position. More...
 
static void can_set_transmitter_delay_compensation (CAN_Type *base, uint8_t sample_point, bool enable)
 Set CAN transmitter delay compensation. More...
 
static void can_set_warning_limits (CAN_Type *base, uint8_t almost_full_limit, uint8_t error_warning_limit)
 Set CAN warning limits. More...
 
static uint8_t can_get_receive_error_count (CAN_Type *base)
 Get CAN receive error count. More...
 
static uint8_t can_get_transmit_error_count (CAN_Type *base)
 Get CAN transmit error count. More...
 
static void can_enable_filter (CAN_Type *base, uint32_t index)
 Enable a specified CAN filter. More...
 
static void can_disable_filter (CAN_Type *base, uint32_t index)
 Disable a specified CAN filter. More...
 
hpm_stat_t can_get_default_config (can_config_t *config)
 Get default CAN configuration parameters. More...
 
hpm_stat_t can_init (CAN_Type *base, can_config_t *config, uint32_t src_clk_freq)
 Initialize the CAN controller. More...
 
void can_deinit (CAN_Type *base)
 De-initialize the CAN controller. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
hpm_stat_t can_set_filter (CAN_Type *base, const can_filter_config_t *config)
 Configure the acceptable filter. More...
 
hpm_stat_t can_send_message_blocking (CAN_Type *base, const can_transmit_buf_t *message)
 Send CAN message using blocking transfer. More...
 
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. More...
 
hpm_stat_t can_send_message_nonblocking (CAN_Type *base, const can_transmit_buf_t *message)
 Send CAN message using non-blocking transfer. More...
 
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. More...
 
hpm_stat_t can_receive_message_blocking (CAN_Type *base, can_receive_buf_t *message)
 Receive CAN message using blocking transfer. More...
 
hpm_stat_t can_read_received_message (CAN_Type *base, can_receive_buf_t *message)
 Read Received CAN message. More...
 

Detailed Description

CAN driver APIs.

Macro Definition Documentation

◆ CAN_ERROR_ARBITRATION_LOST_INT_ENABLE

#define CAN_ERROR_ARBITRATION_LOST_INT_ENABLE   (CAN_ERRINT_ALIE_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN Arbitration Lost Interrupt Enable

◆ CAN_ERROR_ARBITRATION_LOST_INT_FLAG

#define CAN_ERROR_ARBITRATION_LOST_INT_FLAG   (CAN_ERRINT_ALIE_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN arbitration Lost Interrupt Flag

◆ CAN_ERROR_BUS_ERROR_INT_ENABLE

#define CAN_ERROR_BUS_ERROR_INT_ENABLE   (CAN_ERRINT_BEIE_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN BUS error Interrupt Enable

◆ CAN_ERROR_BUS_ERROR_INT_FLAG

#define CAN_ERROR_BUS_ERROR_INT_FLAG   (CAN_ERRINT_BEIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN BUS error Interrupt flag

◆ CAN_ERROR_PASSIVE_INT_ENABLE

#define CAN_ERROR_PASSIVE_INT_ENABLE   (CAN_ERRINT_EPIE_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN Passive Interrupt Enable

◆ CAN_ERROR_PASSIVE_INT_FLAG

#define CAN_ERROR_PASSIVE_INT_FLAG   (CAN_ERRINT_EPIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN Passive Interrupt Flag

◆ CAN_ERROR_PASSIVE_MODE_ACTIVE_FLAG

#define CAN_ERROR_PASSIVE_MODE_ACTIVE_FLAG   (CAN_ERRINT_EPASS_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN Passive mode active

◆ CAN_ERROR_WARNING_LIMIT_FLAG

#define CAN_ERROR_WARNING_LIMIT_FLAG   (CAN_ERRINT_EWARN_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN Error interrupts/flags.

CAN Error Limit reached

◆ CAN_EVENT_ABORT

#define CAN_EVENT_ABORT   (CAN_RTIF_AIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN abort event

◆ CAN_EVENT_ERROR

#define CAN_EVENT_ERROR   (CAN_RTIF_EIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN error event

◆ CAN_EVENT_RECEIVE

#define CAN_EVENT_RECEIVE   (CAN_RTIF_RIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN Event definitions.

CAN Receive event

◆ CAN_EVENT_RX_BUF_ALMOST_FULL

#define CAN_EVENT_RX_BUF_ALMOST_FULL   (CAN_RTIF_RAFIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN RX buffer almost full event

◆ CAN_EVENT_RX_BUF_FULL

#define CAN_EVENT_RX_BUF_FULL   (CAN_RTIF_RFIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN RX buffer full event

◆ CAN_EVENT_RX_BUF_OVERRUN

#define CAN_EVENT_RX_BUF_OVERRUN   (CAN_RTIF_ROIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN RX buffer overrun event

◆ CAN_EVENT_TX_PRIMARY_BUF

#define CAN_EVENT_TX_PRIMARY_BUF   (CAN_RTIF_TPIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN TX primary buffer event

◆ CAN_EVENT_TX_SECONDARY_BUF

#define CAN_EVENT_TX_SECONDARY_BUF   (CAN_RTIF_TSIF_MASK)

#include <drivers/inc/hpm_can_drv.h>

CAN TX secondary buffer event

◆ CAN_KIND_OF_ERROR_ACK_ERROR

#define CAN_KIND_OF_ERROR_ACK_ERROR   (4U)

#include <drivers/inc/hpm_can_drv.h>

Acknowledgment error

◆ CAN_KIND_OF_ERROR_BIT_ERROR

#define CAN_KIND_OF_ERROR_BIT_ERROR   (1U)

#include <drivers/inc/hpm_can_drv.h>

Bit error

◆ CAN_KIND_OF_ERROR_BUS_OFF

#define CAN_KIND_OF_ERROR_BUS_OFF   (7U)

#include <drivers/inc/hpm_can_drv.h>

BUS off error

◆ CAN_KIND_OF_ERROR_CRC_ERROR

#define CAN_KIND_OF_ERROR_CRC_ERROR   (5U)

#include <drivers/inc/hpm_can_drv.h>

CRC error

◆ CAN_KIND_OF_ERROR_FORM_ERROR

#define CAN_KIND_OF_ERROR_FORM_ERROR   (2U)

#include <drivers/inc/hpm_can_drv.h>

Form error

◆ CAN_KIND_OF_ERROR_NO_ERROR

#define CAN_KIND_OF_ERROR_NO_ERROR   (0U)

#include <drivers/inc/hpm_can_drv.h>

CAN Error Kinds.

No error

◆ CAN_KIND_OF_ERROR_OTHER_ERROR

#define CAN_KIND_OF_ERROR_OTHER_ERROR   (6U)

#include <drivers/inc/hpm_can_drv.h>

Other errors

◆ CAN_KIND_OF_ERROR_STUFF_ERROR

#define CAN_KIND_OF_ERROR_STUFF_ERROR   (3U)

#include <drivers/inc/hpm_can_drv.h>

Stuff error

◆ CAN_RXBUF_ALMOST_FULL

#define CAN_RXBUF_ALMOST_FULL   (2U)

#include <drivers/inc/hpm_can_drv.h>

CAN Receive buffer is almost full

◆ CAN_RXBUF_HAS_DATA

#define CAN_RXBUF_HAS_DATA   (1U)

#include <drivers/inc/hpm_can_drv.h>

CAN Receive buffer has data

◆ CAN_RXBUF_IS_EMPTY

#define CAN_RXBUF_IS_EMPTY   (0U)

#include <drivers/inc/hpm_can_drv.h>

CAN Receive Buffer States.

CAN Receive buffer is empty

◆ CAN_RXBUF_IS_FULL

#define CAN_RXBUF_IS_FULL   (3U)

#include <drivers/inc/hpm_can_drv.h>

CAN Receive buffer is full

◆ CAN_STB_IS_EMPTY

#define CAN_STB_IS_EMPTY   (0U)

#include <drivers/inc/hpm_can_drv.h>

CAN Secondary Transmit buffer Status.

CAN Secondary Transmit buffer is empty

◆ CAN_STB_IS_FULL

#define CAN_STB_IS_FULL   (3U)

#include <drivers/inc/hpm_can_drv.h>

CAN Secondary Transmit buffer is full

◆ CAN_STB_LESS_EQUAL_HALF_FULL

#define CAN_STB_LESS_EQUAL_HALF_FULL   (1U)

#include <drivers/inc/hpm_can_drv.h>

CAN Secondary Transmit buffer <= 1/2 * FULL

◆ CAN_STB_MORE_THAN_HALF_FULL

#define CAN_STB_MORE_THAN_HALF_FULL   (2U)

#include <drivers/inc/hpm_can_drv.h>

CAN Secondary Transmit buffer > 1/2 * FULL

Typedef Documentation

◆ can_bit_timing_option_t

typedef enum _can_bit_timing_option can_bit_timing_option_t

#include <drivers/inc/hpm_can_drv.h>

CAN bit timing options.

◆ can_filter_id_mode_t

typedef enum _can_filter_id_mode can_filter_id_mode_t

#include <drivers/inc/hpm_can_drv.h>

CAN acceptance filter modes.

◆ can_node_mode_t

typedef enum _can_mode can_node_mode_t

#include <drivers/inc/hpm_can_drv.h>

CAN loopback types.

◆ can_receive_buf_t

typedef union _can_rx_buf can_receive_buf_t

#include <drivers/inc/hpm_can_drv.h>

CAN receive buffer data structure.

◆ can_transmit_buf_t

typedef union _can_tx_buf can_transmit_buf_t

#include <drivers/inc/hpm_can_drv.h>

CAN transmit buffer data structure.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

#include <drivers/inc/hpm_can_drv.h>

CAN error codes.

Enumerator
status_can_bit_error 

CAN bit error

status_can_form_error 

CAN Form error

status_can_stuff_error 

CAN stuff error

status_can_ack_error 

CAN ACK error

status_can_crc_error 

CAN CRC error

status_can_other_error 

CAN other error

status_can_tx_fifo_full 

CAN TX fifo full

status_can_filter_index_invalid 

CAN filter index is invalid

status_can_filter_num_invalid 

CAN filter number is invalid

status_can_invalid_bit_timing 

Invalid CAN bit timing parameter

◆ anonymous enum

anonymous enum

#include <drivers/inc/hpm_can_drv.h>

CAN DLC definitions.

Enumerator
can_payload_size_0 

Payload size is 0

can_payload_size_1 

Payload size is 1

can_payload_size_2 

Payload size is 2

can_payload_size_3 

Payload size is 3

can_payload_size_4 

Payload size is 4

can_payload_size_5 

Payload size is 5

can_payload_size_6 

Payload size is 6

can_payload_size_7 

Payload size is 7

can_payload_size_8 

Payload size is 8

can_payload_size_12 

Payload size is 12

can_payload_size_16 

Payload size is 16

can_payload_size_20 

Payload size is 20

can_payload_size_24 

Payload size is 24

can_payload_size_32 

Payload size is 32

can_payload_size_48 

Payload size is 48

can_payload_size_64 

Payload size is 64

can_payload_size_max 

Function Documentation

◆ can_abort_high_priority_message_transmit()

static void can_abort_high_priority_message_transmit ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Abort CAN high priority message transmit.

Parameters
[in]baseCAN base address

◆ can_abort_message_transmit()

static void can_abort_message_transmit ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Abort CAN message transmit.

Parameters
[in]baseCAN base address

◆ can_allow_store_all_data_in_receive_buffer()

static void can_allow_store_all_data_in_receive_buffer ( CAN_Type base,
bool  allow 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Allow can store all date in receive buffer.

Parameters
[in]baseCAN base address
[in]allowflag to determine whether to store error data frame

◆ can_calculate_bit_timing()

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 
)

#include <drivers/inc/hpm_can_drv.h>

Calculate the CAN bit timing for CAN BUS.

Parameters
[in]src_clk_freqCAN IP source clock frequency
[in]optionCAN bit timing option
[in]baudrateCAN baudrate in MHz
[in]samplepoint_minMinimum Sample point, range(0-1000), samplepoint_min / 1000 will be used in calculation
[in]samplepoint_maxMaximum Sample point, range(0-1000), samplepoint_max / 1000 will be used in calculation
[out]timing_paramCalculated CAN bit timing parameter
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_clear_error_interrupt_flags()

static void can_clear_error_interrupt_flags ( CAN_Type base,
uint8_t  flags 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get CAN clear interrupt flags.

Parameters
[in]baseCAN base address
[in]flagsCAN error interrupt flags

◆ can_clear_tx_rx_flags()

static void can_clear_tx_rx_flags ( CAN_Type base,
uint8_t  flags 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Clear CAN TX/RX flags.

Parameters
[in]baseCAN base address
[in]flagsCAN TX/RX interrupt flags

◆ can_deinit()

void can_deinit ( CAN_Type base)

#include <drivers/inc/hpm_can_drv.h>

De-initialize the CAN controller.

Parameters
[in]baseCAN base address

◆ can_disable_error_irq()

static void can_disable_error_irq ( CAN_Type base,
uint8_t  mask 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Disable CAN error interrupt.

Parameters
[in]baseCAN base address
[in]maskCAN error interrupt mask

◆ can_disable_filter()

static void can_disable_filter ( CAN_Type base,
uint32_t  index 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Disable a specified CAN filter.

Parameters
[in]baseCAN base address
indexCAN filter index

◆ can_disable_ptb_retransmission()

static void can_disable_ptb_retransmission ( CAN_Type base,
bool  enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Disable the re-transmission for the primary transmission buffer.

Parameters
[in]baseCAN base address
[in]enableFlag for disabling re-transmission for PTB

◆ can_disable_stb_retransmission()

static void can_disable_stb_retransmission ( CAN_Type base,
bool  enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Disable the re-transmission for the secondary transmission buffer.

Parameters
[in]baseCAN base address
[in]enableFlag for disabling re-transmission for STB

◆ can_disable_tx_rx_irq()

static void can_disable_tx_rx_irq ( CAN_Type base,
uint8_t  mask 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Disable CAN TX/RX interrupt.

Parameters
[in]baseCAN base address
[in]maskCAN interrupt mask

◆ can_enable_can_fd_iso_mode()

static void can_enable_can_fd_iso_mode ( CAN_Type base,
bool  enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Enable CAN FD ISO mode.

Parameters
[in]baseCAN base address
enableCAN-FD ISO mode enable flag

◆ can_enable_error_irq()

static void can_enable_error_irq ( CAN_Type base,
uint8_t  mask 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Enable CAN error interrupt.

Parameters
[in]baseCAN base address
[in]maskCAN error interrupt mask

◆ can_enable_filter()

static void can_enable_filter ( CAN_Type base,
uint32_t  index 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Enable a specified CAN filter.

Parameters
[in]baseCAN base address
indexCAN filter index

◆ can_enable_listen_only_mode()

static void can_enable_listen_only_mode ( CAN_Type base,
bool  enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Enable CAN listen-only mode.

Parameters
[in]baseCAN base address
[in]enableCAN listen-only mode enable flag
  • true enable listen-only mode
  • false disable listen-only mode

◆ can_enable_self_ack()

static void can_enable_self_ack ( CAN_Type base,
bool  enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Enable can self ack.

Parameters
[in]baseCAN base address
[in]enableSelf-ack enable flag, true or false

◆ can_enable_tx_rx_irq()

static void can_enable_tx_rx_irq ( CAN_Type base,
uint8_t  mask 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Enable CAN TX/RX interrupt.

Parameters
[in]baseCAN base address
[in]maskCAN interrupt mask

◆ can_enter_standby_mode()

static void can_enter_standby_mode ( CAN_Type base,
bool  enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Enter CAN standby mode.

Parameters
[in]baseCAN base address
[in]enableCan standby mode enable flag
  • true enable standby mode
  • false disable standby mode

◆ can_force_bus_off()

static void can_force_bus_off ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Force CAN controller to Bus-off mode.

Parameters
[in]baseCAN base address

◆ can_get_default_config()

hpm_stat_t can_get_default_config ( can_config_t config)

#include <drivers/inc/hpm_can_drv.h>

Get default CAN configuration parameters.

Parameters
[out]configCAN configuration structure
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_get_error_interrupt_flags()

static uint8_t can_get_error_interrupt_flags ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get CAN error interrupt flags.

Parameters
[in]baseCAN base address
Return values
CANerror interrupt flags

◆ can_get_last_arbitration_lost_position()

static uint8_t can_get_last_arbitration_lost_position ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get CAN last arbitrary lost position.

Parameters
[in]baseCAN base address
Return values
CANlast arbitrary lost position

◆ can_get_last_error_kind()

static uint8_t can_get_last_error_kind ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get last CAN error kind.

Parameters
[in]baseCAN base address
Return values
CANlast error kind

◆ can_get_receive_buffer_status()

static uint8_t can_get_receive_buffer_status ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get CAN receive buffer status.

Parameters
[in]baseCAN base address
Return values
Receivebuffer status, 0: empty, 1: > empty, < almost full, 2: >= almost full, 3: full

◆ can_get_receive_error_count()

static uint8_t can_get_receive_error_count ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get CAN receive error count.

Parameters
[in]baseCAN base address
Return values
CANreceive error count

◆ can_get_secondary_transmit_buffer_status()

static uint8_t can_get_secondary_transmit_buffer_status ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get CAN secondary transmit buffer status.

Parameters
[in]baseCAN base address
Return values
secondarytransmit buffer status, 0: empty, 1: <= 1/2 full, 2: > 1/2 full, 3: full

◆ can_get_transmit_error_count()

static uint8_t can_get_transmit_error_count ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get CAN transmit error count.

Parameters
[in]baseCAN base address
Return values
CANtransmit error count

◆ can_get_tx_rx_flags()

static uint8_t can_get_tx_rx_flags ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Get CAN TX/RX flags.

Parameters
[in]baseCAN base address
Return values
CANTx/RX interrupt flags

◆ can_init()

hpm_stat_t can_init ( CAN_Type base,
can_config_t config,
uint32_t  src_clk_freq 
)

#include <drivers/inc/hpm_can_drv.h>

Initialize the CAN controller.

Parameters
[in]baseCAN base address
[in]configCAN configuration
[in]src_clk_freqCAN IP source clock frequency
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_is_data_available_in_receive_buffer()

static bool can_is_data_available_in_receive_buffer ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Check whether there are data available in receive buffer.

Parameters
[in]baseCAN base address
Returns
true if the receive buffer is not empty

< CAN Receive buffer is empty

◆ can_is_in_bus_off_mode()

static bool can_is_in_bus_off_mode ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Check whether the CAN is in BUS off mode.

Parameters
[in]baseCAN base address
Returns
true for bus off mode
false for non-bus off mode

◆ can_is_primary_transmit_buffer_full()

static bool can_is_primary_transmit_buffer_full ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Check whether the primary transmit buffer is full.

Parameters
[in]baseCAN base address
Returns
true for full

◆ can_is_ptb_retransmission_disabled()

static bool can_is_ptb_retransmission_disabled ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Check whether re-transmission is disabled for PTB or not.

Parameters
[in]baseCAN base address
Returns
true Re-transmission is disabled for PTB
false Re-transmission is enabled for PTB

◆ can_is_receive_buffer_overflow()

static bool can_is_receive_buffer_overflow ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Check whether CAN receive buffer is overflow.

Parameters
[in]baseCAN base address
Return values
trueor false

◆ can_is_secondary_transmit_buffer_full()

static bool can_is_secondary_transmit_buffer_full ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Check whether the secondary transmit buffer is full.

Parameters
[in]baseCAN base address
Returns
true for full

< CAN Secondary Transmit buffer is full

◆ can_is_stb_retransmission_disabled()

static bool can_is_stb_retransmission_disabled ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Check whether re-transmission is disabled for STB or not.

Parameters
[in]baseCAN base address
Returns
true Re-transmission is disabled for STB
false Re-transmission is enabled for STB

◆ can_read_received_message()

hpm_stat_t can_read_received_message ( CAN_Type base,
can_receive_buf_t message 
)

#include <drivers/inc/hpm_can_drv.h>

Read Received CAN message.

Note
This API assumes that the received CAN message is available. It can be used in the interrupt handler
Parameters
[in]baseCAN base address
[out]messageCAN message buffer
Return values
status_successAPI execution is successful
status_invalid_argumentInvalid parameters
status_can_bit_errorCAN bit error happened during receiving message
status_can_form_errorCAN form error happened during receiving message
status_can_stuff_errorCAN stuff error happened during receiving message
status_can_ack_errorCAN ack error happened during receiving message
status_can_crc_errorCAN crc error happened during receiving message
status_can_other_errorOther error happened during receiving message

◆ can_receive_message_blocking()

hpm_stat_t can_receive_message_blocking ( CAN_Type base,
can_receive_buf_t message 
)

#include <drivers/inc/hpm_can_drv.h>

Receive CAN message using blocking transfer.

Parameters
[in]baseCAN base address
[out]messageCAN message buffer
Return values
status_successAPI execution is successful
status_invalid_argumentInvalid parameters
status_can_bit_errorCAN bit error happened during receiving message
status_can_form_errorCAN form error happened during receiving message
status_can_stuff_errorCAN stuff error happened during receiving message
status_can_ack_errorCAN ack error happened during receiving message
status_can_crc_errorCAN crc error happened during receiving message
status_can_other_errorOther error happened during receiving message

◆ can_release_receive_buffer()

static void can_release_receive_buffer ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Release CAN receive buffer.

Parameters
[in]baseCAN base address

◆ can_reset()

static void can_reset ( CAN_Type base,
bool  enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Reset CAN controller.

Parameters
[in]baseCAN base address
[in]enablereset flag for CAN controller
  • true reset the CAN controller
  • false clear the CAN controller reset flag

◆ can_select_tx_buffer()

static void can_select_tx_buffer ( CAN_Type base,
bool  select_secondary_buffer 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Select CAN TX buffer.

Parameters
[in]baseCAN base address
[in]select_secondary_bufferCAN secondary transmit buffer selection flag
  • true Select the secondary transmit buffer
  • false Select the primary transmit buffer

◆ can_select_tx_buffer_priority_mode()

static void can_select_tx_buffer_priority_mode ( CAN_Type base,
bool  enable_priority_decision 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Select CAN tx buffer priority mode.

Parameters
[in]baseCAN base address
[in]enable_priority_decisionCAN tx buffer priority mode selection flag
  • true priority decision mode
  • false FIFO mode

◆ can_send_high_priority_message_blocking()

hpm_stat_t can_send_high_priority_message_blocking ( CAN_Type base,
const can_transmit_buf_t message 
)

#include <drivers/inc/hpm_can_drv.h>

Send high-priority message using blocking transfer.

Parameters
[in]baseCAN base address
[in]messageCAN message to be sent out
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_send_high_priority_message_nonblocking()

hpm_stat_t can_send_high_priority_message_nonblocking ( CAN_Type base,
const can_transmit_buf_t message 
)

#include <drivers/inc/hpm_can_drv.h>

Send high-priority message using non-blocking transfer.

Parameters
[in]baseCAN base address
[in]messageCAN message to be sent out
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_send_message_blocking()

hpm_stat_t can_send_message_blocking ( CAN_Type base,
const can_transmit_buf_t message 
)

#include <drivers/inc/hpm_can_drv.h>

Send CAN message using blocking transfer.

Parameters
[in]baseCAN base address
[in]messageCAN message to be sent out
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_send_message_nonblocking()

hpm_stat_t can_send_message_nonblocking ( CAN_Type base,
const can_transmit_buf_t message 
)

#include <drivers/inc/hpm_can_drv.h>

Send CAN message using non-blocking transfer.

Parameters
[in]baseCAN base address
[in]messageCAN message to be sent out
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_set_bit_timing()

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 
)

#include <drivers/inc/hpm_can_drv.h>

Configure the CAN bit timing for CAN BUS.

Parameters
[in]baseCAN base address
[in]optionCAN bit timing option
[in]src_clk_freqCAN IP source clock frequency
[in]baudrateCAN baudrate in MHz
[in]samplepoint_minMinimum Sample point, range(0-1000), samplepoint_min / 1000 will be used in calculation
[in]samplepoint_maxMaximum Sample point, range(0-1000), samplepoint_max / 1000 will be used in calculation
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_set_fast_speed_timing()

static void can_set_fast_speed_timing ( CAN_Type base,
const can_bit_timing_param_t param 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Configure the Fast Speed Bit timing using low-level interface.

Parameters
[in]baseCAN base address
[in]paramCAN bit timing parameter

◆ can_set_filter()

hpm_stat_t can_set_filter ( CAN_Type base,
const can_filter_config_t config 
)

#include <drivers/inc/hpm_can_drv.h>

Configure the acceptable filter.

Parameters
[in]baseCAN base address
[in]configCAN filter configuration
Return values
APIexecution status, status_success or status_invalid_argument

◆ can_set_node_mode()

static void can_set_node_mode ( CAN_Type base,
can_node_mode_t  mode 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Set CAN mode.

Parameters
[in]baseCAN base address
[in]modeCAN loopback mode
  • can_mode_normal Normal work mode
  • can_mode_loopback_internal internal loopback mode
  • can_mode_loopback_external external loopback mode
  • can_mode_listen_only CAN listen-only mode

◆ can_set_receive_buffer_overflow_mode()

static void can_set_receive_buffer_overflow_mode ( CAN_Type base,
bool  override_enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Set CAN receive buffer overflow mode.

Parameters
[in]baseCAN base address
[in]override_enablereceive buffer overflow mode option
  • true the oldest message will be overwritten
  • false the new message will not be stored

◆ can_set_slow_speed_timing()

static void can_set_slow_speed_timing ( CAN_Type base,
const can_bit_timing_param_t param 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Configure the Slow Speed Bit timing using low-level interface.

Parameters
[in]baseCAN base address
[in]paramCAN bit timing parameter

◆ can_set_transmitter_delay_compensation()

static void can_set_transmitter_delay_compensation ( CAN_Type base,
uint8_t  sample_point,
bool  enable 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Set CAN transmitter delay compensation.

Parameters
[in]baseCAN base address
[in]sample_pointdelay compensation sample point
[in]enabledelay compensation enable flag

◆ can_set_warning_limits()

static void can_set_warning_limits ( CAN_Type base,
uint8_t  almost_full_limit,
uint8_t  error_warning_limit 
)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Set CAN warning limits.

Parameters
[in]baseCAN base address
[in]almost_full_limit
[in]error_warning_limit

◆ can_start_all_message_transmit()

static void can_start_all_message_transmit ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Start CAN all messages transmit.

Parameters
[in]baseCAN base address

◆ can_start_high_priority_message_transmit()

static void can_start_high_priority_message_transmit ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Start CAN high priority message transmit.

Parameters
[in]baseCAN base address

◆ can_start_message_transmit()

static void can_start_message_transmit ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Start CAN message transmit.

Parameters
[in]baseCAN base address

◆ can_switch_to_next_tx_buffer()

static void can_switch_to_next_tx_buffer ( CAN_Type base)
inlinestatic

#include <drivers/inc/hpm_can_drv.h>

Switch to next CAN tx buffer.

Parameters
[in]baseCAN base address