160 lines
5.1 KiB
C
160 lines
5.1 KiB
C
/*
|
|
* @brief LPC15xx CAN ROM API declarations and functions
|
|
*
|
|
* @note
|
|
* Copyright(C) NXP Semiconductors, 2014
|
|
* All rights reserved.
|
|
*
|
|
* @par
|
|
* Software that is described herein is for illustrative purposes only
|
|
* which provides customers with programming information regarding the
|
|
* LPC products. This software is supplied "AS IS" without any warranties of
|
|
* any kind, and NXP Semiconductors and its licensor disclaim any and
|
|
* all warranties, express or implied, including all implied warranties of
|
|
* merchantability, fitness for a particular purpose and non-infringement of
|
|
* intellectual property rights. NXP Semiconductors assumes no responsibility
|
|
* or liability for the use of the software, conveys no license or rights under any
|
|
* patent, copyright, mask work right, or any other intellectual property rights in
|
|
* or to any products. NXP Semiconductors reserves the right to make changes
|
|
* in the software without notification. NXP Semiconductors also makes no
|
|
* representation or warranty that such application will be suitable for the
|
|
* specified use without further testing or modification.
|
|
*
|
|
* @par
|
|
* Permission to use, copy, modify, and distribute this software and its
|
|
* documentation is hereby granted, under NXP Semiconductors' and its
|
|
* licensor's relevant copyrights in the software, without fee, provided that it
|
|
* is used in conjunction with NXP Semiconductors microcontrollers. This
|
|
* copyright, permission, and disclaimer notice must appear in all copies of
|
|
* this code.
|
|
*/
|
|
|
|
#ifndef __ROM_CAN_15XX_H_
|
|
#define __ROM_CAN_15XX_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** @defgroup CANROM_15XX CHIP: LPC15xx CAN ROM API declarations and functions
|
|
* @ingroup ROMAPI_15XX
|
|
* @{
|
|
*/
|
|
|
|
/* error status bits */
|
|
#define CAN_ERROR_NONE 0x00000000UL
|
|
#define CAN_ERROR_PASS 0x00000001UL
|
|
#define CAN_ERROR_WARN 0x00000002UL
|
|
#define CAN_ERROR_BOFF 0x00000004UL
|
|
#define CAN_ERROR_STUF 0x00000008UL
|
|
#define CAN_ERROR_FORM 0x00000010UL
|
|
#define CAN_ERROR_ACK 0x00000020UL
|
|
#define CAN_ERROR_BIT1 0x00000040UL
|
|
#define CAN_ERROR_BIT0 0x00000080UL
|
|
#define CAN_ERROR_CRC 0x00000100UL
|
|
|
|
typedef void *CAN_HANDLE_T; /* define TYPE for CAN handle pointer */
|
|
|
|
typedef struct _CAN_MSG_OBJ {
|
|
uint32_t mode_id;
|
|
uint32_t mask;
|
|
uint8_t data[8];
|
|
uint8_t dlc;
|
|
uint8_t msgobj;
|
|
} CAN_MSG_OBJ;
|
|
|
|
typedef struct _CAN_CALLBACKS {
|
|
void (*CAN_rx)(uint8_t msg_obj);
|
|
void (*CAN_tx)(uint8_t msg_obj);
|
|
void (*CAN_error)(uint32_t error_info);
|
|
} CAN_CALLBACKS;
|
|
|
|
typedef struct _CAN_CFG {
|
|
uint32_t clkdiv;
|
|
uint32_t btr;
|
|
uint32_t isr_ena;
|
|
} CAN_CFG;
|
|
|
|
typedef struct _CAN_ODCONSTENTRY {
|
|
uint16_t index;
|
|
uint8_t subindex;
|
|
uint8_t len;
|
|
uint32_t val;
|
|
} CAN_ODCONSTENTRY;
|
|
|
|
typedef struct _CAN_ODENTRY {
|
|
uint16_t index;
|
|
uint8_t subindex;
|
|
uint8_t entrytype_len;
|
|
uint8_t *val;
|
|
} CAN_ODENTRY;
|
|
|
|
typedef struct _CAN_CANOPENCFG {
|
|
uint8_t node_id;
|
|
uint8_t msgobj_rx;
|
|
uint8_t msgobj_tx;
|
|
uint8_t isr_handled;
|
|
uint32_t od_const_num;
|
|
CAN_ODCONSTENTRY *od_const_table;
|
|
uint32_t od_num;
|
|
CAN_ODENTRY *od_table;
|
|
} CAN_CANOPENCFG;
|
|
|
|
typedef struct _CANOPEN_CALLBACKS {
|
|
uint32_t (*CANOPEN_sdo_read)(uint16_t index, uint8_t subindex);
|
|
uint32_t (*CANOPEN_sdo_write)(uint16_t index, uint8_t subindex, uint8_t *dat_ptr);
|
|
uint32_t (*CANOPEN_sdo_seg_read)(uint16_t index, uint8_t subindex, uint8_t
|
|
openclose, uint8_t *length, uint8_t *data, uint8_t *last);
|
|
uint32_t (*CANOPEN_sdo_seg_write)(uint16_t index, uint8_t subindex, uint8_t
|
|
openclose, uint8_t length, uint8_t *data, uint8_t *fast_resp);
|
|
uint8_t (*CANOPEN_sdo_req)(uint8_t length_req, uint8_t *req_ptr, uint8_t
|
|
*length_resp, uint8_t *resp_ptr);
|
|
} CANOPEN_CALLBACKS;
|
|
|
|
typedef struct _CAN_API_INIT_PARAM_T {
|
|
uint32_t mem_base; /* Address of user-space memory area to use */
|
|
uint32_t can_reg_base; /* Address of start of CAN controller register area */
|
|
CAN_CFG *can_cfg;
|
|
CAN_CALLBACKS *callbacks;
|
|
CAN_CANOPENCFG *canopen_cfg;
|
|
CANOPEN_CALLBACKS *co_callbacks;
|
|
} CAN_API_INIT_PARAM_T;
|
|
|
|
/**
|
|
* @brief LPC15XX CAN ROM API structure
|
|
* The CAN profile API provides functions to configure and manage the CAN sub-system.
|
|
*/
|
|
typedef struct _CAND_API_T {
|
|
uint32_t (*hwCAN_GetMemSize)(CAN_API_INIT_PARAM_T *param);
|
|
ErrorCode_t (*hwCAN_Init)(CAN_HANDLE_T *phCan, CAN_API_INIT_PARAM_T *param);
|
|
void (*hwCAN_Isr)(CAN_HANDLE_T hCan);
|
|
void (*hwCAN_ConfigRxmsgobj)(CAN_HANDLE_T hCan, CAN_MSG_OBJ *msg_obj);
|
|
uint8_t (*hwCAN_MsgReceive)(CAN_HANDLE_T hCan, CAN_MSG_OBJ *msg_obj);
|
|
void (*hwCAN_MsgTransmit)(CAN_HANDLE_T hCan, CAN_MSG_OBJ *msg_obj);
|
|
void (*hwCAN_CANopenHandler)(CAN_HANDLE_T hCan);
|
|
} CAND_API_T;
|
|
|
|
uint32_t hwCAN_GetMemSize(CAN_API_INIT_PARAM_T *param);
|
|
|
|
ErrorCode_t hwCAN_Init(CAN_HANDLE_T *phCan, CAN_API_INIT_PARAM_T *param);
|
|
|
|
void hwCAN_Isr(CAN_HANDLE_T hCan);
|
|
|
|
void hwCAN_ConfigRxmsgobj(CAN_HANDLE_T hCan, CAN_MSG_OBJ *msg_obj);
|
|
|
|
uint8_t hwCAN_MsgReceive(CAN_HANDLE_T hCan, CAN_MSG_OBJ *msg_obj);
|
|
|
|
void hwCAN_MsgTransmit(CAN_HANDLE_T hCan, CAN_MSG_OBJ *msg_obj);
|
|
|
|
void hwCAN_CANopenHandler(CAN_HANDLE_T hCan);
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __ROM_CAN_15XX_H_ */
|