176 lines
6.3 KiB
C
176 lines
6.3 KiB
C
|
/**************************************************************************//**
|
||
|
* @file can.h
|
||
|
* @version V2.00
|
||
|
* $Revision: 9 $
|
||
|
* $Date: 15/08/11 10:26a $
|
||
|
* @brief M451 Series CAN Driver Header File
|
||
|
*
|
||
|
* @note
|
||
|
* Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved.
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
#ifndef __CAN_H__
|
||
|
#define __CAN_H__
|
||
|
|
||
|
#include "M451Series.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/** @addtogroup Standard_Driver Standard Driver
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup CAN_Driver CAN Driver
|
||
|
@{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup CAN_EXPORTED_CONSTANTS CAN Exported Constants
|
||
|
@{
|
||
|
*/
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
/* CAN Test Mode Constant Definitions */
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
#define CAN_NORMAL_MODE 0
|
||
|
#define CAN_BASIC_MODE 1
|
||
|
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
/* Message ID Type Constant Definitions */
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
#define CAN_STD_ID 0
|
||
|
#define CAN_EXT_ID 1
|
||
|
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
/* Message Frame Type Constant Definitions */
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
#define CAN_REMOTE_FRAME 0
|
||
|
#define CAN_DATA_FRAME 1
|
||
|
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
/* CAN message structure */
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
typedef struct
|
||
|
{
|
||
|
uint32_t IdType;
|
||
|
uint32_t FrameType;
|
||
|
uint32_t Id;
|
||
|
uint8_t DLC;
|
||
|
uint8_t Data[8];
|
||
|
} STR_CANMSG_T;
|
||
|
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
/* CAN mask message structure */
|
||
|
/*---------------------------------------------------------------------------------------------------------*/
|
||
|
typedef struct
|
||
|
{
|
||
|
uint8_t u8Xtd;
|
||
|
uint8_t u8Dir;
|
||
|
uint32_t u32Id;
|
||
|
uint8_t u8IdType;
|
||
|
} STR_CANMASK_T;
|
||
|
|
||
|
#define MSG(id) (id)
|
||
|
|
||
|
|
||
|
/*@}*/ /* end of group CAN_EXPORTED_CONSTANTS */
|
||
|
|
||
|
|
||
|
/** @addtogroup 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.
|
||
|
*
|
||
|
* @details Status Interrupt is generated by bits BOff (CAN_STATUS[7]), EWarn (CAN_STATUS[6]),
|
||
|
* EPass (CAN_STATUS[5]), RxOk (CAN_STATUS[4]), TxOk (CAN_STATUS[3]), and LEC (CAN_STATUS[2:0]).
|
||
|
*/
|
||
|
#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.
|
||
|
*
|
||
|
* @details If several interrupts are pending, the CAN Interrupt Register will point to the pending interrupt
|
||
|
* with the highest priority, disregarding their chronological order.
|
||
|
*/
|
||
|
#define CAN_GET_INT_PENDING_STATUS(can) ((can)->IIDR)
|
||
|
|
||
|
/**
|
||
|
* @brief Disable wake-up function.
|
||
|
*
|
||
|
* @param[in] can The base address of can module.
|
||
|
*
|
||
|
* @return None
|
||
|
*
|
||
|
* @details The macro is used to disable wake-up function.
|
||
|
*/
|
||
|
#define CAN_DISABLE_WAKEUP(can) ((can)->WU_EN = 0)
|
||
|
|
||
|
/**
|
||
|
* @brief Enable wake-up function.
|
||
|
*
|
||
|
* @param[in] can The base address of can module.
|
||
|
*
|
||
|
* @return None
|
||
|
*
|
||
|
* @details User can wake-up system when there is a falling edge in the CAN_Rx pin.
|
||
|
*/
|
||
|
#define CAN_ENABLE_WAKEUP(can) ((can)->WU_EN = 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, valid value are from 0 to 31.
|
||
|
*
|
||
|
* @return Specified Message Object new data into bit value.
|
||
|
*
|
||
|
* @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
|
||
|
* or by the Message Handler after reception of a Data Frame or after a successful transmission.
|
||
|
*/
|
||
|
#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);
|
||
|
void CAN_Close(CAN_T *tCAN);
|
||
|
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_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);
|
||
|
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_SetRxMsgAndMsk(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32IDType, uint32_t u32ID, uint32_t u32IDMask);
|
||
|
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 CAN_EXPORTED_FUNCTIONS */
|
||
|
|
||
|
/*@}*/ /* end of group CAN_Driver */
|
||
|
|
||
|
/*@}*/ /* end of group Standard_Driver */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif //__CAN_H__
|
||
|
|
||
|
/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/
|