M480 BSP V3.05.005
The Board Support Package for M480 Series
can.h
Go to the documentation of this file.
1/**************************************************************************/
9#ifndef __CAN_H__
10#define __CAN_H__
11
12#ifdef __cplusplus
13extern "C"
14{
15#endif
16
17
29/*---------------------------------------------------------------------------------------------------------*/
30/* CAN Test Mode Constant Definitions */
31/*---------------------------------------------------------------------------------------------------------*/
32#define CAN_NORMAL_MODE 0ul
33#define CAN_BASIC_MODE 1ul
35/*---------------------------------------------------------------------------------------------------------*/
36/* Message ID Type Constant Definitions */
37/*---------------------------------------------------------------------------------------------------------*/
38#define CAN_STD_ID 0ul
39#define CAN_EXT_ID 1ul
41/*---------------------------------------------------------------------------------------------------------*/
42/* Message Frame Type Constant Definitions */
43/*---------------------------------------------------------------------------------------------------------*/
44#define CAN_REMOTE_FRAME 0ul
45#define CAN_DATA_FRAME 1ul
47/*---------------------------------------------------------------------------------------------------------*/
48/* Mask Bit Definitions */
49/*---------------------------------------------------------------------------------------------------------*/
50#define CAN_MASK_MSG_DIR (0x1ul << 30)
51#define CAN_MASK_EXT_ID_BIT (0x1ul << 31) /* end of group CAN_EXPORTED_CONSTANTS */
54
55
62typedef struct
63{
64 uint32_t IdType;
65 uint32_t FrameType;
66 uint32_t Id;
67 uint8_t DLC;
68 uint8_t Data[8];
70
74typedef struct
75{
76 uint8_t u8Xtd;
77 uint8_t u8Dir;
78 uint32_t u32Id;
79 uint8_t u8IdType;
81 /* end of group CAN_EXPORTED_STRUCTS */
83
85#define MSG(id) (id)
101#define CAN_STD_ID_MASK(mask_bit) (mask_bit << 18)
102
112#define CAN_EXT_ID_MASK(mask_bit) (mask_bit)
113
125#define CAN_GET_INT_STATUS(can) ((can)->STATUS)
126
138#define CAN_GET_INT_PENDING_STATUS(can) ((can)->IIDR)
139
150#define CAN_DISABLE_WAKEUP(can) ((can)->WU_EN = 0ul)
151
162#define CAN_ENABLE_WAKEUP(can) ((can)->WU_EN = CAN_WU_EN_WAKUP_EN_Msk)
163
176#define CAN_GET_NEW_DATA_IN_BIT(can, u32MsgNum) ((u32MsgNum) < 16 ? (can)->NDAT1 & (1 << (u32MsgNum)) : (can)->NDAT2 & (1 << ((u32MsgNum)-16)))
177
178
179/*---------------------------------------------------------------------------------------------------------*/
180/* Define CAN functions prototype */
181/*---------------------------------------------------------------------------------------------------------*/
182uint32_t CAN_SetBaudRate(CAN_T *tCAN, uint32_t u32BaudRate);
183uint32_t CAN_Open(CAN_T *tCAN, uint32_t u32BaudRate, uint32_t u32Mode);
184void CAN_Close(CAN_T *tCAN);
185void CAN_CLR_INT_PENDING_BIT(CAN_T *tCAN, uint8_t u32MsgNum);
186void CAN_EnableInt(CAN_T *tCAN, uint32_t u32Mask);
187void CAN_DisableInt(CAN_T *tCAN, uint32_t u32Mask);
188int32_t CAN_Transmit(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T* pCanMsg);
189int32_t CAN_Receive(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T* pCanMsg);
190int32_t CAN_SetMultiRxMsg(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32MsgCount, uint32_t u32IDType, uint32_t u32ID);
191int32_t CAN_SetRxMsg(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32IDType, uint32_t u32ID);
192int32_t CAN_SetRxMsgAndMsk(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32IDType, uint32_t u32ID, uint32_t u32IDMask);
193int32_t CAN_SetTxMsg(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T* pCanMsg);
194int32_t CAN_TriggerTxMsg(CAN_T *tCAN, uint32_t u32MsgNum);
195int32_t CAN_BasicSendMsg(CAN_T *tCAN, STR_CANMSG_T* pCanMsg);
196int32_t CAN_BasicReceiveMsg(CAN_T *tCAN, STR_CANMSG_T* pCanMsg);
197void CAN_EnterInitMode(CAN_T *tCAN, uint8_t u8Mask);
198void CAN_EnterTestMode(CAN_T *tCAN, uint8_t u8TestMask);
199void CAN_LeaveTestMode(CAN_T *tCAN);
200uint32_t CAN_GetCANBitRate(CAN_T *tCAN);
201uint32_t CAN_IsNewDataReceived(CAN_T *tCAN, uint8_t u8MsgObj);
202void CAN_LeaveInitMode(CAN_T *tCAN);
203int32_t CAN_SetRxMsgObjAndMsk(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint32_t u32idmask, uint8_t u8singleOrFifoLast);
204int32_t CAN_SetRxMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint8_t u8singleOrFifoLast);
205void CAN_WaitMsg(CAN_T *tCAN);
206int32_t CAN_ReadMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8Release, STR_CANMSG_T* pCanMsg);
207 /* end of group CAN_EXPORTED_FUNCTIONS */
209 /* end of group CAN_Driver */
211 /* end of group Standard_Driver */
213
214#ifdef __cplusplus
215}
216#endif
217
218#endif /*__CAN_H__ */
219
220/*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/
void CAN_EnterTestMode(CAN_T *tCAN, uint8_t u8TestMask)
Switch the CAN into test mode.
Definition: can.c:354
uint8_t u8Dir
Definition: can.h:77
void CAN_Close(CAN_T *tCAN)
The function is used to disable all CAN interrupt.
Definition: can.c:908
uint8_t u8IdType
Definition: can.h:79
int32_t CAN_BasicSendMsg(CAN_T *tCAN, STR_CANMSG_T *pCanMsg)
Send CAN message in BASIC mode of test mode.
Definition: can.c:399
void CAN_LeaveInitMode(CAN_T *tCAN)
Leave initialization mode.
Definition: can.c:261
int32_t CAN_SetRxMsg(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32IDType, uint32_t u32ID)
The function is used to configure a receive message object.
Definition: can.c:1110
void CAN_LeaveTestMode(CAN_T *tCAN)
Leave the test mode.
Definition: can.c:367
void CAN_WaitMsg(CAN_T *tCAN)
Wait message into message buffer in basic mode.
Definition: can.c:279
int32_t CAN_SetTxMsg(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T *pCanMsg)
The function is used to configure a transmit object.
Definition: can.c:956
int32_t CAN_TriggerTxMsg(CAN_T *tCAN, uint32_t u32MsgNum)
Set transmit request bit.
Definition: can.c:1020
int32_t CAN_Receive(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T *pCanMsg)
Gets the message, if received.
Definition: can.c:1275
int32_t CAN_ReadMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8Release, STR_CANMSG_T *pCanMsg)
Gets the message.
Definition: can.c:693
int32_t CAN_BasicReceiveMsg(CAN_T *tCAN, STR_CANMSG_T *pCanMsg)
Get a message information in BASIC mode.
Definition: can.c:487
uint8_t DLC
Definition: can.h:67
int32_t CAN_SetRxMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint8_t u8singleOrFifoLast)
Set Rx message object.
Definition: can.c:629
uint32_t FrameType
Definition: can.h:65
uint32_t CAN_GetCANBitRate(CAN_T *tCAN)
Get current bit rate.
Definition: can.c:318
uint32_t u32Id
Definition: can.h:78
int32_t CAN_SetRxMsgAndMsk(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32IDType, uint32_t u32ID, uint32_t u32IDMask)
The function is used to configure a receive message object.
Definition: can.c:1147
uint32_t CAN_IsNewDataReceived(CAN_T *tCAN, uint8_t u8MsgObj)
Get the waiting status of a received message.
Definition: can.c:382
uint32_t CAN_SetBaudRate(CAN_T *tCAN, uint32_t u32BaudRate)
Set bus baud-rate.
Definition: can.c:776
void CAN_DisableInt(CAN_T *tCAN, uint32_t u32Mask)
Disable CAN interrupt.
Definition: can.c:1088
void CAN_EnableInt(CAN_T *tCAN, uint32_t u32Mask)
Enable CAN interrupt.
Definition: can.c:1072
void CAN_CLR_INT_PENDING_BIT(CAN_T *tCAN, uint8_t u32MsgNum)
Clear interrupt pending bit.
Definition: can.c:1303
uint32_t CAN_Open(CAN_T *tCAN, uint32_t u32BaudRate, uint32_t u32Mode)
Set CAN operation mode and target baud-rate.
Definition: can.c:926
int32_t CAN_SetRxMsgObjAndMsk(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint32_t u32idmask, uint8_t u8singleOrFifoLast)
Set Rx message object, include ID mask.
Definition: can.c:559
int32_t CAN_SetMultiRxMsg(CAN_T *tCAN, uint32_t u32MsgNum, uint32_t u32MsgCount, uint32_t u32IDType, uint32_t u32ID)
The function is used to configure several receive message objects.
Definition: can.c:1184
uint8_t u8Xtd
Definition: can.h:76
void CAN_EnterInitMode(CAN_T *tCAN, uint8_t u8Mask)
Enter initialization mode.
Definition: can.c:248
uint32_t Id
Definition: can.h:66
uint32_t IdType
Definition: can.h:64
int32_t CAN_Transmit(CAN_T *tCAN, uint32_t u32MsgNum, STR_CANMSG_T *pCanMsg)
Send CAN message.
Definition: can.c:1235
Definition: can_reg.h:551