can_pal.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 NXP
3  * All rights reserved.
4  *
5  * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
6  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
7  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
8  * IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
9  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
10  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
11  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
12  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
13  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
14  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
15  * THE POSSIBILITY OF SUCH DAMAGE.
16  */
17 
18 #ifndef CAN_PAL_H
19 #define CAN_PAL_H
20 
21 #include <stdint.h>
22 #include <stdbool.h>
23 #include <stddef.h>
24 #include "can_pal_cfg.h"
25 #include "can_pal_mapping.h"
26 #include "status.h"
27 #include "callbacks.h"
28 
36 /*******************************************************************************
37  * Definitions
38  ******************************************************************************/
39 
43 typedef enum {
48 
52 typedef enum {
58 
62 typedef struct {
63  uint32_t propSeg;
64  uint32_t phaseSeg1;
65  uint32_t phaseSeg2;
66  uint32_t preDivider;
67  uint32_t rJumpwidth;
69 
73 typedef enum {
77 
81 typedef enum {
85 
89 typedef enum {
93 
97 typedef struct {
98  bool enableFD;
99  bool enableBRS;
100  uint8_t fdPadding;
103  bool isRemote;
105 
109 typedef struct {
110  uint32_t cs;
111  uint32_t id;
112  uint8_t data[64];
113  uint8_t length;
114 } can_message_t;
115 
119 typedef struct
120 {
121  uint32_t maxBuffNum;
124  bool enableFD;
128  void *extension;
131 
132 #if (defined(CAN_OVER_FLEXCAN))
133 
136 typedef struct
137 {
138  flexcan_rx_fifo_id_filter_num_t numIdFilters;
140  flexcan_id_table_t *idFilterTable;
141 } extension_flexcan_rx_fifo_t;
142 #endif
143 
144 /*******************************************************************************
145  * API
146  ******************************************************************************/
147 
162 status_t CAN_Init(const can_instance_t * const instance,
163  const can_user_config_t *config);
164 
174 status_t CAN_Deinit(const can_instance_t * const instance);
175 
187 status_t CAN_SetBitrate(const can_instance_t * const instance,
188  can_bitrate_phase_t phase,
189  const can_time_segment_t *bitTiming);
190 
202 status_t CAN_GetBitrate(const can_instance_t * const instance,
203  can_bitrate_phase_t phase,
204  can_time_segment_t *bitTiming);
205 
222 status_t CAN_ConfigTxBuff(const can_instance_t * const instance,
223  uint32_t buffIdx,
224  const can_buff_config_t *config);
225 
238  uint32_t buffIdx,
239  const can_buff_config_t *config,
240  const can_message_t *message);
241 
260 status_t CAN_ConfigRxBuff(const can_instance_t * const instance,
261  uint32_t buffIdx,
262  const can_buff_config_t *config,
263  uint32_t acceptedId);
264 
284 status_t CAN_Send(const can_instance_t * const instance,
285  uint32_t buffIdx,
286  const can_message_t *message);
287 
308 status_t CAN_SendBlocking(const can_instance_t * const instance,
309  uint32_t buffIdx,
310  const can_message_t *message,
311  uint32_t timeoutMs);
312 
332 status_t CAN_Receive(const can_instance_t * const instance,
333  uint32_t buffIdx,
334  can_message_t *message);
335 
356 status_t CAN_ReceiveBlocking(const can_instance_t * const instance,
357  uint32_t buffIdx,
358  can_message_t *message,
359  uint32_t timeoutMs);
360 
373 status_t CAN_AbortTransfer(const can_instance_t * const instance,
374  uint32_t buffIdx);
375 
393 status_t CAN_SetRxFilter(const can_instance_t * const instance,
394  can_msg_id_type_t idType,
395  uint32_t buffIdx,
396  uint32_t mask);
397 
414 status_t CAN_GetTransferStatus(const can_instance_t * const instance,
415  uint32_t buffIdx);
416 
427 status_t CAN_InstallEventCallback(const can_instance_t * const instance,
428  can_callback_t callback,
429  void *callbackParam);
430 
431 #if defined(__cplusplus)
432 extern "C" {
433 #endif
434 
435 #if defined(__cplusplus)
436 }
437 #endif
438 
441 #endif /* CAN_PAL_H */
442 
443 /*******************************************************************************
444  * EOF
445  ******************************************************************************/
void * extension
Definition: can_pal.h:128
status_t CAN_Receive(const can_instance_t *const instance, uint32_t buffIdx, can_message_t *message)
Receives a CAN frame using the specified message buffer.
Definition: can_pal.c:779
status_t CAN_AbortTransfer(const can_instance_t *const instance, uint32_t buffIdx)
Ends a non-blocking CAN transfer early.
Definition: can_pal.c:885
can_time_segment_t dataBitrate
Definition: can_pal.h:127
uint32_t maxBuffNum
Definition: can_pal.h:121
uint32_t preDivider
Definition: can_pal.h:66
status_t CAN_GetTransferStatus(const can_instance_t *const instance, uint32_t buffIdx)
Returns the state of the previous CAN transfer.
Definition: can_pal.c:967
flexcan_rx_fifo_id_filter_num_t
FlexCAN Rx FIFO filters number Implements : flexcan_rx_fifo_id_filter_num_t_Class.
status_t CAN_ConfigRxBuff(const can_instance_t *const instance, uint32_t buffIdx, const can_buff_config_t *config, uint32_t acceptedId)
Configures a buffer for reception.
Definition: can_pal.c:598
can_msg_id_type_t
CAN Message Buffer ID type Implements : can_msg_id_type_t_Class.
Definition: can_pal.h:81
can_operation_modes_t mode
Definition: can_pal.h:122
uint32_t phaseSeg2
Definition: can_pal.h:65
status_t CAN_InstallEventCallback(const can_instance_t *const instance, can_callback_t callback, void *callbackParam)
Installs a callback function for the IRQ handler.
Definition: can_pal.c:1006
can_operation_modes_t
CAN controller operation modes Implements : can_operation_modes_t_Class.
Definition: can_pal.h:43
uint8_t length
Definition: can_pal.h:113
status_t CAN_ConfigTxBuff(const can_instance_t *const instance, uint32_t buffIdx, const can_buff_config_t *config)
Configures a buffer for transmission.
Definition: can_pal.c:472
status_t CAN_Deinit(const can_instance_t *const instance)
De-initializes the CAN module.
Definition: can_pal.c:358
status_t CAN_SendBlocking(const can_instance_t *const instance, uint32_t buffIdx, const can_message_t *message, uint32_t timeoutMs)
Sends a CAN frame using the specified buffer, in a blocking manner.
Definition: can_pal.c:719
void(* can_callback_t)(uint32_t instance, can_event_t eventType, uint32_t objIdx, void *driverState)
Definition: callbacks.h:158
status_t
Status return codes. Common error codes will be a unified enumeration (C enum) that will contain all ...
Definition: status.h:44
Structure storing PAL instance information.
CAN buffer configuration Implements : can_buff_config_t_Class.
Definition: can_pal.h:97
status_t CAN_GetBitrate(const can_instance_t *const instance, can_bitrate_phase_t phase, can_time_segment_t *bitTiming)
Returns the CAN bitrate.
Definition: can_pal.c:432
uint32_t rJumpwidth
Definition: can_pal.h:67
status_t CAN_SetBitrate(const can_instance_t *const instance, can_bitrate_phase_t phase, const can_time_segment_t *bitTiming)
Configures the CAN bitrate.
Definition: can_pal.c:392
can_clk_source_t peClkSrc
Definition: can_pal.h:123
flexcan_rx_fifo_id_element_format_t
ID formats for Rx FIFO Implements : flexcan_rx_fifo_id_element_format_t_Class.
CAN controller configuration Implements : can_user_config_t_Class.
Definition: can_pal.h:119
can_msg_id_type_t idType
Definition: can_pal.h:102
FlexCAN Rx FIFO ID filter table structure Implements : flexcan_id_table_t_Class.
status_t CAN_Send(const can_instance_t *const instance, uint32_t buffIdx, const can_message_t *message)
Sends a CAN frame using the specified buffer.
Definition: can_pal.c:660
CAN message format Implements : can_message_t_Class.
Definition: can_pal.h:109
CAN bit timing variables Implements : can_time_segment_t_Class.
Definition: can_pal.h:62
can_fd_payload_size_t payloadSize
Definition: can_pal.h:125
can_bitrate_phase_t
CAN bitrate phase (nominal/data) Implements : can_bitrate_phase_t_Class.
Definition: can_pal.h:73
uint32_t id
Definition: can_pal.h:111
uint32_t cs
Definition: can_pal.h:110
can_time_segment_t nominalBitrate
Definition: can_pal.h:126
uint8_t fdPadding
Definition: can_pal.h:100
status_t CAN_SetRxFilter(const can_instance_t *const instance, can_msg_id_type_t idType, uint32_t buffIdx, uint32_t mask)
Configures an ID filter for a specific reception buffer.
Definition: can_pal.c:924
uint32_t propSeg
Definition: can_pal.h:63
can_clk_source_t
CAN PE clock sources Implements : can_clk_source_t_Class.
Definition: can_pal.h:89
can_fd_payload_size_t
CAN buffer payload sizes Implements : can_fd_payload_size_t_Class.
Definition: can_pal.h:52
status_t CAN_ConfigRemoteResponseBuff(const can_instance_t *const instance, uint32_t buffIdx, const can_buff_config_t *config, const can_message_t *message)
Configures a transmit buffer for remote frame response.
Definition: can_pal.c:535
status_t CAN_ReceiveBlocking(const can_instance_t *const instance, uint32_t buffIdx, can_message_t *message, uint32_t timeoutMs)
Receives a CAN frame using the specified buffer, in a blocking manner.
Definition: can_pal.c:831
uint32_t phaseSeg1
Definition: can_pal.h:64
status_t CAN_Init(const can_instance_t *const instance, const can_user_config_t *config)
Initializes the CAN module.
Definition: can_pal.c:251