/**************************************************************************//** * @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. ***/