⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcancntrl.h

📁 在Freescale16位单片机MC9s12dp256上移植了J1939源码和操作系统(ucOSII)。
💻 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 + -