mbed library sources. Supersedes mbed-src.
Fork of mbed-dev by
Diff: targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_can.h
- Revision:
- 149:156823d33999
- Parent:
- 144:ef7eb2e8f9f7
- Child:
- 150:02e0a0aed4ec
diff -r 21d94c44109e -r 156823d33999 targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_can.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_can.h Fri Oct 28 11:17:30 2016 +0100 @@ -0,0 +1,171 @@ +/**************************************************************************//** + * @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. ***/ + + + + +