📄 jcancntrl.h
字号:
/*--------------------------------------------------------------------
CANCNTRL.H
--------------------------------------------------------------------
Copyright (C) 1998-2000 Vector Informatik GmbH, Stuttgart
Function: CAN controller functions header
--------------------------------------------------------------------*/
#ifndef _CANCNTRL_H_
#define _CANCNTRL_H_
/*--------------------------------------------------------------------*/
/* constants definitions */
/*--------------------------------------------------------------------*/
#define EXTENDED_ID_USED 1
#define CAN_STS_NORMAL 0x00 /*!< CAN controller status normal */
#define CAN_STS_RESET 0x01 /*!< CAN controller status reset */
#define CAN_STS_WARNING 0x02 /*!< CAN controller status warning */
#define CAN_STS_BUS_OFF 0x04 /*!< CAN controller status bus off */
#define CAN_STS_SLEEPING 0x08 /*!< CAN controller status sleeping */
#define CAN_STS_OVERRUN 0x10 /*!< CAN controller status overrun */
#define CAN_STS_TX_OK 0x20 /*!< CAN controller tx ok */
#define CAN_NUM_ID 2048 /*!< number of basic identifiers */
#define CAN_ID_LIMIT 0xFFF /*!< magic max number */
#define CAN_MASK 0xFF /*!< no acceptance mask */
#define CAN_CODE 0x00 /*!< accept all identifiers */
/* buffer status */
#define BUF_EMPTY 0 /*!< buffer empty or unused */
#define BUF_FULL 1 /*!< buffer contents in evaluation */
#define BUF_SENT 2 /*!< buffer has been transmitted */
#define BUF_RECEIVED 3 /*!< buffer received */
#define BUF_COMPLETE 4 /*!< buffer ready to transmit */
#define BUF_ABORT 5 /*!< buffer transmission cancelled */
#define BUF_NOT_SENT 6 /*!< buffer not transmitted */
#define BUF_TRANSMIT 7 /*!< buffer in transmission */
#define NO_MESSAGE 255 /*!< no message available */
#define MODE_CONFIG 1 /*!< enter configuration mode */
#define MODE_NORMAL 2 /*!< enter normal operation mode */
#define MODE_SLEEP 3 /*!< enter sleep mode */
#define MODE_LISTEN 4 /*!< enter listen only mode */
#define MODE_LOOPBK 5 /*!< enter loopback mode */
#define SELECTABLE_BITTIMES 9 /*!< size of bittiming table */
#define BR_1M 8 /*!< baud rate 1M Bit/s */
#define BR_800K 7 /*!< baud rate 800K Bit/s */
#define BR_500K 6 /*!< baud rate 500K Bit/s */
#define BR_250K 5 /*!< baud rate 250K Bit/s */
#define BR_125K 4 /*!< baud rate 125K Bit/s */
#define BR_100K 3 /*!< baud rate 100K Bit/s */
#define BR_50K 2 /*!< baud rate 50K Bit/s */
#define BR_20K 1 /*!< baud rate 20K Bit/s */
#define BR_10K 0 /*!< baud rate 10K Bit/s */
#define QUEUED_MODE 0
#define FULLCAN_BUFFER_MODE 0
#define ID_FILTER 0
/*--------------------------------------------------------------------*/
/* type definitions */
/*--------------------------------------------------------------------*/
/*!
\brief This structure describes a CAN message
A single message could be completely described by the identifier and the
data length code. Additionally it is necessary to know some more
attributes.
*/
typedef struct {
QBYTE qbId; /*!< identifier */
BYTE bDb[8]; /*!< data bytes [0..8] */
unsigned int Dlc: 4; /*!< data length code [0..8] (4 bits) */
unsigned int Rtr: 1; /*!< 0 - data frame, 1 - remote frame */
unsigned int Ext: 1; /*!< 0 - standard frame, 1 - extended frame */
unsigned int TxOk: 1; /*!< message transmitted successfully */
unsigned int RxOk: 1; /*!< new message received */
} CAN_MSG;
/*!
\brief Buffer structure for a single message.
The code provides some static buffers for messages.
This is necessary for TX pdos to determine a state change event
for instance.
*/
typedef struct {
CAN_MSG tMsg; /*!< message contents */
BYTE bSta; /*!< buffer state */
BYTE bAlign; /*!< this byte provides alignment */
} CAN_BUF;
/*--------------------------------------------------------------------*/
/* macros */
/*--------------------------------------------------------------------*/
#define NUM_COM(base, num) base ## num
#define GET_ID(BNr, Pos) (tCanMsgBuffer[BNr].tMsg.qbId.fb.NUM_COM(b, Pos))
#if QUEUED_MODE == 1
# define gCan_SendBuf(Buffer) gCB_QueSendMsg(&tCanMsgBuffer[Buffer].tMsg)
#else
# if FULLCAN_BUFFER_MODE == 1
# define gCan_SendBuf(Buffer) gCan_SendMsg(Buffer)
# else
# define gCan_SendBuf(Buffer) gCan_SendMsg(&tCanMsgBuffer[Buffer].tMsg)
# endif /* FULLCAN_BUFFER_MODE == 1 */
#endif /* QUEUED_MODE == 1 */
/*--------------------------------------------------------------------*/
/* function prototypes */
/*--------------------------------------------------------------------*/
void gCan_Init(void);
void gCan_CntrlInit(BYTE);
BYTE gCan_GetCanStatus(void);
BYTE gCan_PrepareRemoteMessage(CAN_MSG MEM_AREA * );
BYTE gCan_TxOccurred(void);
BYTE gCan_InstallWakeUp(void);
void gCan_WakeUpOccurred(void);
/*--------------------------------------------------------------------*/
/* function prototypes forMyCAN */
/*--------------------------------------------------------------------*/
#if FULLCAN_BUFFER_MODE == 1
BYTE gCan_SendMsg(BYTE);
#else
BYTE gCan_SendMsg(CAN_MSG MEM_AREA *);
#endif /* FULLCAN_BUFFER_MODE == 1 */
#endif /* _CANCNTRL_H_ */
/*--------------------------------------------------------------------*/
/* documentation */
/*--------------------------------------------------------------------*/
/*!
\file
\brief CAN controller functions header.
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -