rt-thread/bsp/nuvoton_nuc472/Libraries/StdDriver/inc/can.h

172 lines
4.7 KiB
C

/**************************************************************************//**
* @file can.h
* @version V1.00
* $Revision: 8 $
* $Date: 14/09/26 3:38p $
* @brief NUC472/NUC442 CAN driver header file
*
* @note
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#ifndef __CAN_H__
#define __CAN_H__
#ifdef __cplusplus
extern "C"
{
#endif
/** @addtogroup NUC472_442_Device_Driver NUC472/NUC442 Device Driver
@{
*/
/** @addtogroup NUC472_442_CAN_Driver CAN Driver
@{
*/
/** @addtogroup NUC472_442_CAN_EXPORTED_TYPEDEF CAN Exported Type Defines
@{
*/
/**
* @details Message ID types.
*/
typedef enum {
CAN_STD_ID = 0, /*!< Standard Identifier */
CAN_EXT_ID = 1 /*!< Extended Identifier */
} E_CAN_ID_TYPE;
/**
* @details Message Frame types.
*/
typedef enum {
REMOTE_FRAME = 0, /*!< Remote Frame */
DATA_FRAME = 1 /*!< Data Frame */
} E_CAN_FRAME_TYPE;
/**
* @details CAN message structure.
*/
typedef struct {
uint32_t IdType; /*!< Identifier Type */
uint32_t FrameType; /*!< Frame Type */
uint32_t Id; /*!< Message Identifier */
uint8_t DLC; /*!< Data Length Code */
uint8_t Data[8]; /*!< Data byte 0 ~ 7 */
} STR_CANMSG_T;
/**
* @details CAN mask message structure.
*/
typedef struct {
uint8_t u8Xtd; /*!< Extended Identifier */
uint8_t u8Dir; /*!< Message Direction */
uint32_t u32Id; /*!< Message Identifier */
uint8_t u8IdType; /*!< Identifier Type */
} STR_CANMASK_T;
/**
* @details CAN operation mode: normal/basic mode.
*/
typedef enum {
CAN_NORMAL_MODE = 1, /*!< Normal Mode */
CAN_BASIC_MODE = 2 /*!< Basic Mode */
} CAN_MODE_SELECT;
#define ALL_MSG 32 /*!< All Message ram number */
#define MSG(id) id /*!< Message ram number */
/*@}*/ /* end of group NUC472_442_CAN_EXPORTED_TYPEDEF */
/** @addtogroup NUC472_442_CAN_EXPORTED_FUNCTIONS CAN Exported Functions
@{
*/
/**
* @brief Get interrupt status
*
* @param[in] can The base address of can module
*
* @return CAN module status register value
* \hideinitializer
*/
#define CAN_GET_INT_STATUS(can) (can->STATUS)
/**
* @brief Get specified interrupt pending status
*
* @param[in] can The base address of can module
*
* @return The source of the interrupt.
* \hideinitializer
*/
#define CAN_GET_INT_PENDING_STATUS(can) (can->IIDR)
/**
* @brief Disable Wakeup function
*
* @param[in] can The base address of can module
*
* @return None
* \hideinitializer
*/
#define CAN_DISABLE_WAKEUP(can) (can->WU_IE = 0)
/**
* @brief Enable Wakeup function
*
* @param[in] can The base address of can module
*
* @return None
* \hideinitializer
*/
#define CAN_ENABLE_WAKEUP(can) (can->WU_IE = CAN_WUEN_WAKUP_EN_Msk)
/**
* @brief Get specified Message Object new data into bit value
*
* @param[in] can The base address of can module
* @param[in] u32MsgNum Specified Message Object number. (0 ~ 31)
*
* @return Specified Message Object new data into bit value.
* \hideinitializer
*/
#define CAN_GET_NEW_DATA_IN_BIT(can, u32MsgNum) (u32MsgNum < 16 ? can->NDAT1 & (1 << u32MsgNum) : can->NDAT2 & (1 << (u32MsgNum-16)))
/*---------------------------------------------------------------------------------------------------------*/
/* Define CAN functions prototype */
/*---------------------------------------------------------------------------------------------------------*/
uint32_t CAN_SetBaudRate(CAN_T *tCAN, uint32_t u32BaudRate);
uint32_t CAN_Open(CAN_T *tCAN, uint32_t u32BaudRate, uint32_t u32Mode);
int32_t CAN_Transmit(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg);
int32_t CAN_Receive(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg);
void CAN_CLR_INT_PENDING_BIT(CAN_T *tCAN, uint8_t u32MsgNum);
void CAN_EnableInt(CAN_T *tCAN, uint32_t u32Mask);
void CAN_DisableInt(CAN_T *tCAN, uint32_t u32Mask);
int32_t CAN_SetMultiRxMsg(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32MsgCount, uint32_t u32IDType, uint32_t u32ID);
int32_t CAN_SetRxMsg(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32IDType, uint32_t u32ID);
int32_t CAN_SetTxMsg(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg);
int32_t CAN_TriggerTxMsg(CAN_T *tCAN, uint32_t u32MsgNum);
/*@}*/ /* end of group NUC472_442_CAN_EXPORTED_FUNCTIONS */
/*@}*/ /* end of group NUC472_442_CAN_Driver */
/*@}*/ /* end of group NUC472_442_Device_Driver */
#ifdef __cplusplus
}
#endif
#endif //__CAN_H__
/*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/