]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Nuvoton_Code/StdDriver/inc/can.h
Add Cortex M23 GCC and IAR ports. Add demo projects for Nuvoton NuMaker-PFM-2351.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC / Nuvoton_Code / StdDriver / inc / can.h
diff --git a/FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Nuvoton_Code/StdDriver/inc/can.h b/FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Nuvoton_Code/StdDriver/inc/can.h
new file mode 100644 (file)
index 0000000..f0ae584
--- /dev/null
@@ -0,0 +1,189 @@
+/**************************************************************************//**\r
+ * @file     can.h\r
+ * @version  V1.00\r
+ * @brief    M2351 Series CAN Driver Header File\r
+ *\r
+ * @copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.\r
+ *\r
+ ******************************************************************************/\r
+#ifndef __CAN_H__\r
+#define __CAN_H__\r
+\r
+\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif\r
+\r
+\r
+/** @addtogroup Standard_Driver Standard Driver\r
+  @{\r
+*/\r
+\r
+/** @addtogroup CAN_Driver CAN Driver\r
+  @{\r
+*/\r
+\r
+/** @addtogroup CAN_EXPORTED_CONSTANTS CAN Exported Constants\r
+  @{\r
+*/\r
+/*---------------------------------------------------------------------------------------------------------*/\r
+/* CAN Test Mode Constant Definitions                                                                      */\r
+/*---------------------------------------------------------------------------------------------------------*/\r
+#define    CAN_NORMAL_MODE   0U    /*!< CAN select normal mode */\r
+#define    CAN_BASIC_MODE    1U    /*!< CAN select basic mode */\r
+\r
+/*---------------------------------------------------------------------------------------------------------*/\r
+/* Message ID Type Constant Definitions                                                                    */\r
+/*---------------------------------------------------------------------------------------------------------*/\r
+#define    CAN_STD_ID    0UL    /*!< CAN select standard ID */\r
+#define    CAN_EXT_ID    1UL    /*!< CAN select extended ID */\r
+\r
+/*---------------------------------------------------------------------------------------------------------*/\r
+/* Message Frame Type Constant Definitions                                                                 */\r
+/*---------------------------------------------------------------------------------------------------------*/\r
+#define    CAN_REMOTE_FRAME    0    /*!< CAN frame select remote frame */\r
+#define    CAN_DATA_FRAME    1      /*!< CAN frame select data frame */\r
+\r
+/*@}*/ /* end of group CAN_EXPORTED_CONSTANTS */\r
+\r
+\r
+/** @addtogroup CAN_EXPORTED_STRUCTS CAN Exported Structs\r
+  @{\r
+*/\r
+/**\r
+  * @details    CAN message structure\r
+  */\r
+typedef struct\r
+{\r
+    uint32_t  IdType;       /*!< ID type */\r
+    uint32_t  FrameType;    /*!< Frame type */\r
+    uint32_t  Id;           /*!< Message ID */\r
+    uint8_t   DLC;          /*!< Data length */\r
+    uint8_t   Data[8];      /*!< Data */\r
+} STR_CANMSG_T;\r
+\r
+/**\r
+  * @details    CAN mask message structure\r
+  */\r
+typedef struct\r
+{\r
+    uint8_t   u8Xtd;      /*!< Extended ID */\r
+    uint8_t   u8Dir;      /*!< Direction */\r
+    uint32_t  u32Id;      /*!< Message ID */\r
+    uint8_t   u8IdType;   /*!< ID type*/\r
+} STR_CANMASK_T;\r
+\r
+/*@}*/ /* end of group CAN_EXPORTED_STRUCTS */\r
+\r
+/** @cond HIDDEN_SYMBOLS */\r
+#define MSG(id)  (id)\r
+/** @endcond HIDDEN_SYMBOLS */\r
+\r
+/** @addtogroup CAN_EXPORTED_FUNCTIONS CAN Exported Functions\r
+  @{\r
+*/\r
+\r
+/**\r
+ * @brief Get interrupt status.\r
+ *\r
+ * @param[in] can The base address of can module.\r
+ *\r
+ * @return CAN module status register value.\r
+ *\r
+ * @details Status Interrupt is generated by bits BOff (CAN_STATUS[7]), EWarn (CAN_STATUS[6]),\r
+ *          EPass (CAN_STATUS[5]), RxOk (CAN_STATUS[4]), TxOk (CAN_STATUS[3]), and LEC (CAN_STATUS[2:0]).\r
+ */\r
+#define CAN_GET_INT_STATUS(can) ((can)->STATUS)\r
+\r
+/**\r
+ * @brief Get specified interrupt pending status.\r
+ *\r
+ * @param[in] can The base address of can module.\r
+ *\r
+ * @return The source of the interrupt.\r
+ *\r
+ * @details If several interrupts are pending, the CAN Interrupt Register will point to the pending interrupt\r
+ *          with the highest priority, disregarding their chronological order.\r
+ */\r
+#define CAN_GET_INT_PENDING_STATUS(can) ((can)->IIDR)\r
+\r
+/**\r
+ * @brief Disable wake-up function.\r
+ *\r
+ * @param[in] can The base address of can module.\r
+ *\r
+ * @return None\r
+ *\r
+ * @details  The macro is used to disable wake-up function.\r
+ */\r
+#define CAN_DISABLE_WAKEUP(can) ((can)->WU_EN = 0)\r
+\r
+/**\r
+ * @brief Enable wake-up function.\r
+ *\r
+ * @param[in] can The base address of can module.\r
+ *\r
+ * @return None\r
+ *\r
+ * @details User can wake-up system when there is a falling edge in the CAN_Rx pin.\r
+ */\r
+#define CAN_ENABLE_WAKEUP(can) ((can)->WU_EN = CAN_WU_EN_WAKUP_EN_Msk)\r
+\r
+/**\r
+ * @brief Get specified Message Object new data into bit value.\r
+ *\r
+ * @param[in] can The base address of can module.\r
+ * @param[in] u32MsgNum Specified Message Object number, valid value are from 0 to 31.\r
+ *\r
+ * @return Specified Message Object new data into bit value.\r
+ *\r
+ * @details The NewDat bit (CAN_IFn_MCON[15]) of a specific Message Object can be set/reset by the software through the IFn Message Interface Registers\r
+ *          or by the Message Handler after reception of a Data Frame or after a successful transmission.\r
+ */\r
+#define CAN_GET_NEW_DATA_IN_BIT(can, u32MsgNum) ((u32MsgNum) < 16 ? (can)->NDAT1 & (1 << (u32MsgNum)) : (can)->NDAT2 & (1 << ((u32MsgNum)-16)))\r
+\r
+\r
+/*---------------------------------------------------------------------------------------------------------*/\r
+/* Define CAN functions prototype                                                                          */\r
+/*---------------------------------------------------------------------------------------------------------*/\r
+uint32_t CAN_SetBaudRate(CAN_T *tCAN, uint32_t u32BaudRate);\r
+void CAN_Close(CAN_T *tCAN);\r
+uint32_t CAN_Open(CAN_T *tCAN, uint32_t u32BaudRate, uint32_t u32Mode);\r
+void CAN_CLR_INT_PENDING_BIT(CAN_T *tCAN, uint8_t u32MsgNum);\r
+void CAN_EnableInt(CAN_T *tCAN, uint32_t u32Mask);\r
+void CAN_DisableInt(CAN_T *tCAN, uint32_t u32Mask);\r
+int32_t CAN_Transmit(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T* pCanMsg);\r
+int32_t CAN_Receive(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T* pCanMsg);\r
+int32_t CAN_SetMultiRxMsg(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32MsgCount, uint32_t u32IDType, uint32_t u32ID);\r
+int32_t CAN_SetRxMsg(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32IDType, uint32_t u32ID);\r
+int32_t CAN_SetRxMsgAndMsk(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32IDType, uint32_t u32ID, uint32_t u32IDMask);\r
+int32_t CAN_SetTxMsg(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T* pCanMsg);\r
+int32_t CAN_TriggerTxMsg(CAN_T  *tCAN, uint32_t u32MsgNum);\r
+void CAN_EnterInitMode(CAN_T *tCAN, uint8_t u8Mask);\r
+void CAN_LeaveInitMode(CAN_T *tCAN);\r
+void CAN_WaitMsg(CAN_T *tCAN);\r
+uint32_t CAN_GetCANBitRate(CAN_T *tCAN);\r
+void CAN_EnterTestMode(CAN_T *tCAN, uint8_t u8TestMask);\r
+void CAN_LeaveTestMode(CAN_T *tCAN);\r
+uint32_t CAN_IsNewDataReceived(CAN_T *tCAN, uint8_t u8MsgObj);\r
+int32_t CAN_BasicSendMsg(CAN_T *tCAN, STR_CANMSG_T* pCanMsg);\r
+int32_t CAN_BasicReceiveMsg(CAN_T *tCAN, STR_CANMSG_T* pCanMsg);\r
+int32_t CAN_SetRxMsgObjAndMsk(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint32_t u32idmask, uint8_t u8singleOrFifoLast);\r
+int32_t CAN_SetRxMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint8_t u8singleOrFifoLast);\r
+int32_t CAN_ReadMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8Release, STR_CANMSG_T* pCanMsg);\r
+\r
+\r
+/*@}*/ /* end of group CAN_EXPORTED_FUNCTIONS */\r
+\r
+/*@}*/ /* end of group CAN_Driver */\r
+\r
+/*@}*/ /* end of group Standard_Driver */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* __CAN_H__ */\r
+\r
+/*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/\r