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