32 #ifndef __CCAND_11XX_H_
33 #define __CCAND_11XX_H_
47 #define CAN_ERROR_NONE 0x00000000UL
48 #define CAN_ERROR_PASS 0x00000001UL
49 #define CAN_ERROR_WARN 0x00000002UL
50 #define CAN_ERROR_BOFF 0x00000004UL
51 #define CAN_ERROR_STUF 0x00000008UL
52 #define CAN_ERROR_FORM 0x00000010UL
53 #define CAN_ERROR_ACK 0x00000020UL
54 #define CAN_ERROR_BIT1 0x00000040UL
55 #define CAN_ERROR_BIT0 0x00000080UL
56 #define CAN_ERROR_CRC 0x00000100UL
61 #define CAN_MSGOBJ_STD 0x00000000UL
62 #define CAN_MSGOBJ_EXT 0x20000000UL
63 #define CAN_MSGOBJ_DAT 0x00000000UL
64 #define CAN_MSGOBJ_RTR 0x40000000UL
66 typedef struct CCAN_MSG_OBJ {
77 #define SDO_ABORT_TOGGLE 0x05030000UL // Toggle bit not alternated
78 #define SDO_ABORT_SDOTIMEOUT 0x05040000UL // SDO protocol timed out
79 #define SDO_ABORT_UNKNOWN_COMMAND 0x05040001UL // Client/server command specifier not valid or unknown
80 #define SDO_ABORT_UNSUPPORTED 0x06010000UL // Unsupported access to an object
81 #define SDO_ABORT_WRITEONLY 0x06010001UL // Attempt to read a write only object
82 #define SDO_ABORT_READONLY 0x06010002UL // Attempt to write a read only object
83 #define SDO_ABORT_NOT_EXISTS 0x06020000UL // Object does not exist in the object dictionary
84 #define SDO_ABORT_PARAINCOMP 0x06040043UL // General parameter incompatibility reason
85 #define SDO_ABORT_ACCINCOMP 0x06040047UL // General internal incompatibility in the device
86 #define SDO_ABORT_TYPEMISMATCH 0x06070010UL // Data type does not match, length of service parameter does not match
87 #define SDO_ABORT_UNKNOWNSUB 0x06090011UL // Sub-index does not exist
88 #define SDO_ABORT_VALUE_RANGE 0x06090030UL // Value range of parameter exceeded (only for write access)
89 #define SDO_ABORT_TRANSFER 0x08000020UL // Data cannot be transferred or stored to the application
90 #define SDO_ABORT_LOCAL 0x08000021UL // Data cannot be transferred or stored to the application because of local control
91 #define SDO_ABORT_DEVSTAT 0x08000022UL // Data cannot be transferred or stored to the application because of the present device state
93 typedef struct CCAN_ODCONSTENTRY {
101 #define OD_NONE 0x00 // Object Dictionary entry doesn't exist
102 #define OD_EXP_RO 0x10 // Object Dictionary entry expedited, read-only
103 #define OD_EXP_WO 0x20 // Object Dictionary entry expedited, write-only
104 #define OD_EXP_RW 0x30 // Object Dictionary entry expedited, read-write
105 #define OD_SEG_RO 0x40 // Object Dictionary entry segmented, read-only
106 #define OD_SEG_WO 0x50 // Object Dictionary entry segmented, write-only
107 #define OD_SEG_RW 0x60 // Object Dictionary entry segmented, read-write
109 typedef struct CCAN_ODENTRY {
116 typedef struct CCAN_CANOPENCFG {
128 #define CAN_SDOREQ_NOTHANDLED 0 // process regularly, no impact
129 #define CAN_SDOREQ_HANDLED_SEND 1 // processed in callback, auto-send returned msg
130 #define CAN_SDOREQ_HANDLED_NOSEND 2 // processed in callback, don't send response
133 #define CAN_SDOSEG_SEGMENT 0 // segment read/write
134 #define CAN_SDOSEG_OPEN 1 // channel is opened
135 #define CAN_SDOSEG_CLOSE 2 // channel is closed
137 typedef struct CCAN_CALLBACKS {
141 uint32_t (*CANOPEN_sdo_read)(uint16_t index, uint8_t subindex);
142 uint32_t (*CANOPEN_sdo_write)(uint16_t index, uint8_t subindex, uint8_t *dat_ptr);
143 uint32_t (*CANOPEN_sdo_seg_read)(uint16_t index, uint8_t subindex, uint8_t openclose, uint8_t *length,
144 uint8_t *data, uint8_t *last);
145 uint32_t (*CANOPEN_sdo_seg_write)(uint16_t index, uint8_t subindex, uint8_t openclose, uint8_t length,
146 uint8_t *data, uint8_t *fast_resp);
147 uint8_t (*CANOPEN_sdo_req)(uint8_t length_req, uint8_t *req_ptr, uint8_t *length_resp, uint8_t *resp_ptr);
150 typedef struct CCAN_API {
151 void (*init_can)(
uint32_t *can_cfg, uint8_t isr_ena);
157 void (*canopen_handler)(void);
161 typedef struct ROM_API {
166 #define ROM_DRIVER_BASE (0x1FFF1FF8UL)
167 #define LPC_CCAN_API ((CCAN_API_T *) ((*(ROM_API_T * *) (ROM_DRIVER_BASE))->pCCAND))