Astra MCU SDK Peripheral Driver Library
Loading...
Searching...
No Matches
can.h
1
31
32#ifndef CAN_H
33#define CAN_H
34
35#include <stdint.h>
36#include <stdbool.h>
37#include <stddef.h>
38#include "syna_device.h"
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44/*******************************************************************************
45* Macro Definitions
46*******************************************************************************/
47
49#define CAN_MAX_DATA_LENGTH_CLASSIC 8U
50
52#define CAN_MAX_DATA_LENGTH_FD 64U
53
55#define CAN_MAX_DATA_LENGTH CAN_MAX_DATA_LENGTH_FD
56
58#define CAN_STD_ID_MASK 0x7FFU
59
61#define CAN_EXT_ID_MASK 0x1FFFFFFFU
62
64#define CAN_FILTER_IDE (1UL << 0)
65
67#define CAN_FILTER_RTR (1UL << 1)
68
70#define CAN_FILTER_FD (1UL << 2)
71
73#define CAN_TX_DESCRIPTOR_RESERVED_BYTES 20U
74
76#define CAN_RX_DESCRIPTOR_RESERVED_BYTES 8U
77
79#define CAN_RX_HEADER_RAW_WORDS 6U
80
81/***************************************************************************/
215
216/*******************************************************************************
217* Enumerated Types
218*******************************************************************************/
223
246
259
269
279
289
299
309
320
324typedef enum {
325 CAN_INTERRUPT_OVERLOAD_DETECTED = (1UL << 0),
326 CAN_INTERRUPT_CLOSING_GOOD_RX_FRAME = (1UL << 1),
327 CAN_INTERRUPT_TX_RETRANSMIT_REQUEST = (1UL << 2),
328 CAN_INTERRUPT_INCREMENT_REC_8 = (1UL << 3),
329 CAN_INTERRUPT_INCREMENT_REC_1 = (1UL << 4),
330 CAN_INTERRUPT_INCREMENT_TEC_8 = (1UL << 5),
331 CAN_INTERRUPT_ERROR_FRAME_DETECTED = (1UL << 6),
332 CAN_INTERRUPT_ABORTS_HAPPENED = (1UL << 7),
333 CAN_INTERRUPT_TX_FIFO_EMPTY = (1UL << 8),
334 CAN_INTERRUPT_RX_PTR_BUFS_FIFO_ALMOST_EMPTY = (1UL << 9),
335 CAN_INTERRUPT_RX_PTR_BUFS_FIFO_EMPTY = (1UL << 10),
336 CAN_INTERRUPT_USED_BUFFERS_NOT_EMPTY = (1UL << 11),
337 CAN_INTERRUPT_CLTX_NOACK = (1UL << 12),
338 CAN_INTERRUPT_FDTX_NOACK = (1UL << 13),
339 CAN_INTERRUPT_CLTX_GOOD = (1UL << 14),
340 CAN_INTERRUPT_FDTX_GOOD = (1UL << 15),
341 CAN_INTERRUPT_BUS_STATE1 = (1UL << 16),
342 CAN_INTERRUPT_BUS_STATE2 = (1UL << 17),
343 CAN_INTERRUPT_WATCHDOG = (1UL << 18),
344 CAN_INTERRUPT_GAP = (1UL << 19),
345 CAN_INTERRUPT_PANIC_NO_BUFFERS = (1UL << 20),
346 CAN_INTERRUPT_PANIC_TX_BYTE_UNAVAILABLE = (1UL << 21),
347 CAN_INTERRUPT_PANIC_TX_START_FAILED = (1UL << 22),
348 CAN_INTERRUPT_PANIC_TX_WRONG_FRAME = (1UL << 23),
349 CAN_INTERRUPT_CANNOT_FIX = (1UL << 24),
350 CAN_INTERRUPT_FIXED = (1UL << 25),
351 CAN_INTERRUPT_PANICS = (1UL << 26),
352 CAN_INTERRUPT_ILLEGAL_PARITY = (1UL << 27),
353 CAN_INTERRUPT_ILLEGAL_SM_STATES = (1UL << 28),
354 CAN_INTERRUPT_NEW_SAMPLE_TIMESTAMP = (1UL << 31),
356
358
359/*******************************************************************************
360* Type Definitions
361*******************************************************************************/
366
370typedef struct {
371 struct {
372 union {
373 struct {
374 uint32_t dlc :12;
375 uint32_t id :11;
376 uint32_t reserved :1;
377 uint32_t esi :1;
378 uint32_t brs :1;
379 uint32_t rtr :1;
380 uint32_t ide :1;
381 uint32_t frame_type :4;
382 } fields;
383 uint32_t raw;
384 } signal_desc;
385 uint32_t ext_id;
386 uint32_t reserved;
387 } header;
388 uint8_t data[CAN_MAX_DATA_LENGTH];
389 uint8_t reserved[CAN_TX_DESCRIPTOR_RESERVED_BYTES];
391
395typedef struct {
396 uint32_t timestamp_low;
397 uint32_t timestamp_high;
399
405typedef struct {
406 union {
407 struct {
408 uint32_t frame_type :2;
409 uint32_t is_extended :1;
410 uint32_t is_rtr :1;
411 uint32_t status :10;
412 uint32_t dlc :11;
413 uint32_t id_0_6 :7;
414 uint32_t id_7_10 :4;
415 uint32_t ext_id :18;
416 uint32_t reserved_53_55:3;
417 uint32_t crc_0_6 :7;
418 uint32_t crc_7_14 :8;
419 uint32_t rtr :1;
420 uint32_t ide :1;
421 uint32_t reserved_74_95:22;
423 uint32_t timestamp_low;
424 uint32_t timestamp_high;
425 };
426 };
428
434typedef struct {
435 union {
436 struct {
437 uint32_t frame_type :2;
438 uint32_t is_extended :1;
439 uint32_t is_rtr :1;
440 uint32_t status :10;
441 uint32_t dlc :11;
442 uint32_t id_0_6 :7;
443 uint32_t id_7_10 :4;
444 uint32_t ext_id :18;
445 uint32_t reserved_53_55:3;
446 uint32_t crc_0_6 :7;
447 uint32_t crc_7_20 :14;
448 uint32_t sbc :4;
449 uint32_t ide :1;
450 uint32_t esi :1;
451 uint32_t brs :1;
452 uint32_t reserved_85_95:11;
454 uint32_t timestamp_low;
455 uint32_t timestamp_high;
456 };
457 };
459
463typedef struct {
464 union {
467 uint32_t raw[CAN_RX_HEADER_RAW_WORDS];
468 } header;
469 uint8_t data[CAN_MAX_DATA_LENGTH];
470 uint8_t reserved[CAN_RX_DESCRIPTOR_RESERVED_BYTES];
472
476typedef struct {
477 uint32_t mask;
478 uint32_t id;
479 uint32_t flags;
481
495
508
518typedef void (*can_tx_handler_t)(void *user_data, can_transfer_status_en status);
519
530typedef void (*can_rx_handler_t)(void *user_data, const can_rx_frame_t *frame);
531
542typedef void (*can_timestamp_handler_t)(void *user_data, uint32_t timestamp_low, uint32_t timestamp_high);
543
545
546/*******************************************************************************
547* Function Prototypes
548*******************************************************************************/
553
554/*******************************************************************************
555 * Function Name: can_init
556 ******************************************************************************/
568
569/*******************************************************************************
570 * Function Name: can_configure
571 ****************************************************************************/
586
587/*******************************************************************************
588 * Function Name: can_deinit
589 ****************************************************************************/
601
602/*******************************************************************************
603 * Function Name: can_enable
604 ****************************************************************************/
616
617/*******************************************************************************
618 * Function Name: can_disable
619 ****************************************************************************/
631
632/*******************************************************************************
633 * Function Name: can_tx
634 ****************************************************************************/
664can_status_en can_tx(can_instance_en id, bool high_priority, const can_tx_frame_t *frame,
665 const can_tx_schedule_time_t *time, can_tx_handler_t callback,
666 void *callback_param);
667
668/*******************************************************************************
669 * Function Name: can_rx_subscribe
670 ****************************************************************************/
694 can_rx_handler_t callback, void *callback_param,
695 int *subid);
696
697/*******************************************************************************
698 * Function Name: can_rx_unsubscribe
699 ****************************************************************************/
714
715/*******************************************************************************
716 * Function Name: can_set_speed
717 ****************************************************************************/
740can_status_en can_set_speed(can_instance_en id, int cl, int fd, int cl_sample, int fd_sample);
741
742/*******************************************************************************
743 * Function Name: can_set_timestamp_sample_handler
744 ****************************************************************************/
762
763/*******************************************************************************
764 * Function Name: can_get_timestamp
765 ****************************************************************************/
785can_status_en can_get_timestamp(can_instance_en id, uint32_t *ts_l, uint32_t *ts_h, uint32_t *ts_res_ns);
786
787/*******************************************************************************
788 * Function Name: can_set_driver_buffer
789 ****************************************************************************/
809
810/*******************************************************************************
811 * Function Name: can_enable_interrupt
812 ****************************************************************************/
827
828/*******************************************************************************
829 * Function Name: can_enable_all_interrupts
830 ****************************************************************************/
842
843/*******************************************************************************
844 * Function Name: can_disable_interrupt
845 ****************************************************************************/
860
861/*******************************************************************************
862 * Function Name: can_disable_all_interrupts
863 ****************************************************************************/
875
876/*******************************************************************************
877 * Function Name: can_clear_interrupt
878 ****************************************************************************/
893
894/*******************************************************************************
895 * Function Name: can_clear_all_interrupts
896 ****************************************************************************/
908
911
912#ifdef __cplusplus
913}
914#endif
915
916#endif /* CAN_H */
can_instance_en
CAN instances for CM52.
Definition sl2610_cm52.h:51
void(* can_tx_handler_t)(void *user_data, can_transfer_status_en status)
CAN TX completion callback type.
Definition can.h:518
void(* can_timestamp_handler_t)(void *user_data, uint32_t timestamp_low, uint32_t timestamp_high)
CAN timestamp capture callback type.
Definition can.h:542
void(* can_rx_handler_t)(void *user_data, const can_rx_frame_t *frame)
CAN RX frame callback type.
Definition can.h:530
can_status_en
CAN API status codes.
Definition can.h:230
can_rtr_type_en
CAN remote frame type.
Definition can.h:295
can_rx_frame_type_en
Encoded frame type values reported in received CAN headers.
Definition can.h:275
can_frame_format_en
CAN frame format.
Definition can.h:265
can_interrupt_en
Hardware interrupt mask bits for CAN interrupt control APIs.
Definition can.h:324
can_bus_state_en
CAN bus state.
Definition can.h:315
can_operating_mode_en
CAN operating mode.
Definition can.h:305
can_transfer_status_en
CAN transfer status.
Definition can.h:252
can_id_type_en
CAN identifier type.
Definition can.h:285
@ CAN_ERROR_UNSUPPORTED
Definition can.h:236
@ CAN_ERROR_TIMEOUT
Definition can.h:235
@ CAN_ERROR_BUS_OFF
Definition can.h:243
@ CAN_ERROR_ECC
Definition can.h:244
@ CAN_ERROR_RX_FAILED
Definition can.h:241
@ CAN_ERROR
Definition can.h:232
@ CAN_ERROR_DMA_FAILED
Definition can.h:242
@ CAN_ERROR_BUSY
Definition can.h:234
@ CAN_ERROR_TX_FAILED
Definition can.h:240
@ CAN_ERROR_NOT_RUNNING
Definition can.h:238
@ CAN_OK
Definition can.h:231
@ CAN_ERROR_PARAMETER
Definition can.h:233
@ CAN_ERROR_NO_RESOURCE
Definition can.h:239
@ CAN_ERROR_NOT_INITIALIZED
Definition can.h:237
@ CAN_FRAME_REMOTE
Definition can.h:297
@ CAN_FRAME_DATA
Definition can.h:296
@ CAN_RX_FRAME_TYPE_FD
Definition can.h:277
@ CAN_RX_FRAME_TYPE_CLASSIC
Definition can.h:276
@ CAN_FRAME_CLASSIC
Definition can.h:266
@ CAN_FRAME_FD
Definition can.h:267
@ CAN_BUS_ERROR_PASSIVE
Definition can.h:317
@ CAN_BUS_BUS_OFF
Definition can.h:318
@ CAN_BUS_ERROR_ACTIVE
Definition can.h:316
@ CAN_MODE_NORMAL
Definition can.h:306
@ CAN_MODE_LOOPBACK
Definition can.h:307
@ CAN_TRANSFER_IN_PROGRESS
Definition can.h:253
@ CAN_TRANSFER_TIMEOUT
Definition can.h:254
@ CAN_TRANSFER_ERROR
Definition can.h:255
@ CAN_TRANSFER_DONE
Definition can.h:256
@ CAN_TRANSFER_ABORTED
Definition can.h:257
@ CAN_ID_STANDARD
Definition can.h:286
@ CAN_ID_EXTENDED
Definition can.h:287
can_status_en can_rx_subscribe(can_instance_en id, const can_rx_filter_t *filter, can_rx_handler_t callback, void *callback_param, int *subid)
can_status_en can_get_timestamp(can_instance_en id, uint32_t *ts_l, uint32_t *ts_h, uint32_t *ts_res_ns)
can_status_en can_disable_all_interrupts(can_instance_en id)
can_status_en can_enable(can_instance_en id)
can_status_en can_set_timestamp_sample_handler(can_instance_en id, can_timestamp_handler_t callback, void *callback_param)
can_status_en can_clear_all_interrupts(can_instance_en id)
can_status_en can_set_speed(can_instance_en id, int cl, int fd, int cl_sample, int fd_sample)
can_status_en can_configure(can_instance_en id, const can_config_t *config)
can_status_en can_enable_all_interrupts(can_instance_en id)
can_status_en can_init(can_instance_en id)
can_status_en can_set_driver_buffer(can_instance_en id, void *buffer, size_t size)
can_status_en can_rx_unsubscribe(can_instance_en id, int sub_id)
can_status_en can_tx(can_instance_en id, bool high_priority, const can_tx_frame_t *frame, const can_tx_schedule_time_t *time, can_tx_handler_t callback, void *callback_param)
can_status_en can_disable(can_instance_en id)
can_status_en can_deinit(can_instance_en id)
can_status_en can_enable_interrupt(can_instance_en id, uint32_t mask)
can_status_en can_clear_interrupt(can_instance_en id, uint32_t mask)
can_status_en can_disable_interrupt(can_instance_en id, uint32_t mask)
Runtime CAN controller configuration.
Definition can.h:499
uint32_t fd_bitrate
Definition can.h:502
uint32_t classic_sample_point
Definition can.h:503
bool ecc_enabled
Definition can.h:505
uint32_t fd_sample_point
Definition can.h:504
uint32_t classic_bitrate
Definition can.h:501
uint32_t timestamp_resolution_ns
Definition can.h:500
can_hw_config_t hw
Definition can.h:506
Hardware-specific CAN controller configuration.
Definition can.h:485
bool iso_fd_enabled
Definition can.h:490
uint32_t watchdog_timeout_us
Definition can.h:486
uint8_t max_retransmissions
Definition can.h:493
bool self_ack_enabled
Definition can.h:489
uint32_t ssp_delay
Definition can.h:487
can_operating_mode_en mode
Definition can.h:488
bool fd_disable_sbc
Definition can.h:491
bool disable_ack_check
Definition can.h:492
Header layout reported for a received Classical CAN frame.
Definition can.h:405
uint32_t id_0_6
Definition can.h:413
uint32_t ide
Definition can.h:420
uint32_t crc_0_6
Definition can.h:417
uint32_t status
Definition can.h:411
uint32_t ext_id
Definition can.h:415
uint32_t is_extended
Definition can.h:409
uint32_t crc_7_14
Definition can.h:418
uint32_t timestamp_low
Definition can.h:423
uint32_t reserved_96_127
Definition can.h:422
uint32_t reserved_53_55
Definition can.h:416
uint32_t timestamp_high
Definition can.h:424
uint32_t frame_type
Definition can.h:408
uint32_t rtr
Definition can.h:419
uint32_t id_7_10
Definition can.h:414
uint32_t is_rtr
Definition can.h:410
uint32_t dlc
Definition can.h:412
uint32_t reserved_74_95
Definition can.h:421
Header layout reported for a received CAN FD frame.
Definition can.h:434
uint32_t esi
Definition can.h:450
uint32_t status
Definition can.h:440
uint32_t reserved_85_95
Definition can.h:452
uint32_t reserved_53_55
Definition can.h:445
uint32_t ext_id
Definition can.h:444
uint32_t is_extended
Definition can.h:438
uint32_t timestamp_low
Definition can.h:454
uint32_t crc_7_20
Definition can.h:447
uint32_t id_7_10
Definition can.h:443
uint32_t brs
Definition can.h:451
uint32_t sbc
Definition can.h:448
uint32_t id_0_6
Definition can.h:442
uint32_t crc_0_6
Definition can.h:446
uint32_t frame_type
Definition can.h:437
uint32_t dlc
Definition can.h:441
uint32_t ide
Definition can.h:449
uint32_t is_rtr
Definition can.h:439
uint32_t reserved_96_127
Definition can.h:453
uint32_t timestamp_high
Definition can.h:455
Receive filter entry matched against incoming CAN identifiers.
Definition can.h:476
uint32_t mask
Definition can.h:477
uint32_t id
Definition can.h:478
uint32_t flags
Definition can.h:479
Receive frame container returned to RX callbacks.
Definition can.h:463
uint8_t data[CAN_MAX_DATA_LENGTH]
Definition can.h:469
uint8_t reserved[CAN_RX_DESCRIPTOR_RESERVED_BYTES]
Definition can.h:470
can_rx_fd_header_t fd
Definition can.h:466
uint32_t raw[CAN_RX_HEADER_RAW_WORDS]
Definition can.h:467
can_rx_classic_header_t classic
Definition can.h:465
Transmit frame layout written into CAN hardware memory.
Definition can.h:370
uint32_t reserved
Definition can.h:376
uint32_t brs
Definition can.h:378
uint32_t ext_id
Definition can.h:385
uint32_t rtr
Definition can.h:379
uint32_t id
Definition can.h:375
uint8_t data[CAN_MAX_DATA_LENGTH]
Definition can.h:388
uint32_t dlc
Definition can.h:374
uint32_t ide
Definition can.h:380
uint32_t esi
Definition can.h:377
uint32_t frame_type
Definition can.h:381
uint32_t raw
Definition can.h:383
64-bit timestamp used for scheduled transmit requests.
Definition can.h:395
uint32_t timestamp_high
Definition can.h:397
uint32_t timestamp_low
Definition can.h:396