www.pudn.com > CANdrv.rar > CANDrv.h


/* CANDrv.h - MC523x internal Flec_can header file */

/* Copyright 2005 ZHUHAI UNITECH POWER TECHNOLOGY CO.,LTD */

/*
modification history
--------------------
*/

/*
This file contains constants and defines for the CAN contained .
Flex_can has 16 MBs in all,MB0 is used as Tx and MB1 as Rx,others is not used.
*/

#ifndef __INCCANDrvh
#define __INCCANDrvh

#ifdef __cplusplus
extern "C" {
#endif

#ifndef _ASMLANGUAGE

#include "iosLib.h"
#include "semLib.h"
#include "m523x.h"
#include "config.h"
#include "configAll.h"

#ifndef CAN_YES
#define CAN_YES 1
#endif

#ifndef CAN_NO
#define CAN_NO 0
#endif

#define NUM_CAN 1
#define CAN0_MB0_INTVEC 136
#define CAN0_MB1_INTVEC 137
#define CAN1_MB0_INTVEC 107
#define CAN1_MB1_INTVEC 108
#define CAN_DEFAULT_BAUD 500000

#define MCR_MDIS (1 << 31)
#define MCR_MENE (0 << 31)
#define MCR_FRZ (1 << 30)
#define MCR_HALT (1 << 28)
#define MCR_NOTRDY (1 << 27)
#define MCR_SOFTRST (1 << 25)
#define MCR_FRZACK (1 << 24)
#define MCR_SUPV (1 << 23)
#define MCR_MAXMB (1 << 0)

#define RJW 1
#define PSEG1 2
#define PSEG2 2
#define PROPSEG 2
#define CLK_SRC 1
#define SMP 1
#define NUM_TIME_QUANTA (1+PSEG1+1+PSEG2+1+PROPSEG+1)
#define PRESDIV (MASTER_CLOCK/NUM_TIME_QUANTA/CAN_DEFAULT_BAUD-1)
#define PRESDIV1(x) (MASTER_CLOCK/NUM_TIME_QUANTA/(x)-1)
#define CTRL_PRESDIV ( PRESDIV << 24)
#define CTRL_RJW ( RJW << 22)
#define CTRL_PSEG1 ( PSEG1 << 19)
#define CTRL_PSEG2 ( PSEG2 << 16)
#define CTRL_CLK_SRC ( CLK_SRC << 13)
#define CTRL_SMP ( SMP << 7 )
#define CTRL_PROPSEG ( PROPSEG << 0 )

#define TX_NOTENABLE (8 << 8)
#define TX_ENABLE (12 << 8)
#define RX_NOTENABLE (0 << 8)
#define RX_ENABLE (4 << 8)
#define DEFAULT_LENGTH (8 << 0)

#define CAN_NAME_BASE "/can/"

#define MAX_TX_BUFFER 512
#define MAX_RX_BUFFER 512

#define CANDEV_READ(x) (*x) /* argument is register pointer */

#define CANDEV_WRITE(x,y) (*x = y) /* args are reg ptr and data */

#define CAN0_TX_INT_STATUS 0x0001
#define CAN0_RX_INT_STATUS 0x0002

#define CAN1_TX_INT_STATUS 0x0001
#define CAN1_RX_INT_STATUS 0x0002

#define CAN_BAUD_SET 1001
#define CAN_BAUD_GET 1002

#define CAN_TXID_SET 1003
#define CAN_TXID_GET 1004

#define CAN_RXID_SET 1005
#define CAN_RXID_GET 1006

extern int Tx_count;
extern int Rx_count;

extern int CanDrvNum;


typedef struct
{
DEV_HDR pCANHDR;

UINT32 clkRate; /* system clock rate */
UINT32 baudRate; /* Flexcan module baud rate */
UINT32 TxID; /* Flexcan Tx ID */
UINT32 RxID; /* Flexcan Tx ID */

UINT32 Flag_canOpen; /* Flexcan DEV open flag*/

UCHAR tx_Buff[MAX_TX_BUFFER];
UCHAR *ptx; /*发送缓冲区中当前发送指针*/

UINT16 tx_number; /*发送缓冲区中尚未发送数据的个数*/
UINT16 tx_length; /*当前发送的数据长度*/

UCHAR rx_Buff[MAX_TX_BUFFER];

UCHAR *prx_write; /*接收缓冲区中当前写指针*/
UCHAR *prx_read; /*接收缓冲区中当前读指针*/

UINT16 rx_number; /*接收缓冲区中尚未读的数据的个数*/
UINT16 rx_length; /*当前接收的数据长度*/

SEM_ID tx_semSync;
SEM_ID rx_semSync;

volatile UINT32 *mcr; /* Flexcan module configuation register */
volatile UINT32 *ctrl; /* Flexcan module control register */
volatile UINT32 *timer; /* Flexcan free running timer rigster */
volatile UINT32 *rxgmask; /* Flexcan Rx global mask rigster used for 0-13 */
volatile UINT32 *rx14mask; /* Flexcan Rx mask rigster used for 14 */
volatile UINT32 *rx15mask; /* Flexcan Rx mask rigster used for 15 */
volatile UINT32 *errcnt; /* Flexcan error counter rigster */
volatile UINT32 *errstat; /* Flexcan error and status rigster */
volatile UINT16 *imask; /* Flexcan interrupt mask rigster */
volatile UINT16 *iflag; /* Flexcan interrupt flag rigster */

volatile UINT16 *txcode; /* MB0's missage buffer code */
volatile UINT16 *txlength; /* MB0's data length */
volatile UINT16 *txtimestamp; /* MB0'S timer stamp */
volatile UINT32 *txID; /* MB0'S standard ID */
volatile UCHAR *txdata0; /* MB0'S data byte 0 */
volatile UCHAR *txdata1; /* MB0'S data byte 1 */
volatile UCHAR *txdata2; /* MB0'S data byte 2 */
volatile UCHAR *txdata3; /* MB0'S data byte 3 */
volatile UCHAR *txdata4; /* MB0'S data byte 4 */
volatile UCHAR *txdata5; /* MB0'S data byte 5 */
volatile UCHAR *txdata6; /* MB0'S data byte 6 */
volatile UCHAR *txdata7; /* MB0'S data byte 7 */

volatile UINT16 *rxcode; /* MB1's missage buffer code */
volatile UINT16 *rxlength; /* MB1's data length */
volatile UINT16 *rxtimestamp; /* MB1'S timer stamp */
volatile UINT32 *rxID; /* MB1'S standard ID */
volatile UCHAR *rxdata0; /* MB1'S data byte 0 */
volatile UCHAR *rxdata1; /* MB1'S data byte 1 */
volatile UCHAR *rxdata2; /* MB1'S data byte 2 */
volatile UCHAR *rxdata3; /* MB1'S data byte 3 */
volatile UCHAR *rxdata4; /* MB1'S data byte 4 */
volatile UCHAR *rxdata5; /* MB1'S data byte 5 */
volatile UCHAR *rxdata6; /* MB1'S data byte 6 */
volatile UCHAR *rxdata7; /* MB1'S data byte 7 */

volatile UINT16 *mb2code; /* MB2's missage buffer code */
volatile UINT16 *mb2length; /* MB2's data length */
volatile UINT16 *mb2timestamp; /* MB2'S timer stamp */
volatile UINT32 *mb2ID; /* MB2'S standard ID */
volatile UCHAR *mb2data0; /* MB2'S data byte 0 */
volatile UCHAR *mb2data1; /* MB2'S data byte 1 */
volatile UCHAR *mb2data2; /* MB2'S data byte 2 */
volatile UCHAR *mb2data3; /* MB2'S data byte 3 */
volatile UCHAR *mb2data4; /* MB2'S data byte 4 */
volatile UCHAR *mb2data5; /* MB2'S data byte 5 */
volatile UCHAR *mb2data6; /* MB2'S data byte 6 */
volatile UCHAR *mb2data7; /* MB2'S data byte 7 */

volatile UINT16 *mb3code; /* MB3's missage buffer code */
volatile UINT16 *mb3length; /* MB3's data length */
volatile UINT16 *mb3timestamp; /* MB3'S timer stamp */
volatile UINT32 *mb3ID; /* MB3'S standard ID */
volatile UCHAR *mb3data0; /* MB3'S data byte 0 */
volatile UCHAR *mb3data1; /* MB3'S data byte 1 */
volatile UCHAR *mb3data2; /* MB3'S data byte 2 */
volatile UCHAR *mb3data3; /* MB3'S data byte 3 */
volatile UCHAR *mb3data4; /* MB3'S data byte 4 */
volatile UCHAR *mb3data5; /* MB3'S data byte 5 */
volatile UCHAR *mb3data6; /* MB3'S data byte 6 */
volatile UCHAR *mb3data7; /* MB3'S data byte 7 */

volatile UINT16 *mb4code; /* MB4's missage buffer code */
volatile UINT16 *mb4length; /* MB4's data length */
volatile UINT16 *mb4timestamp; /* MB4'S timer stamp */
volatile UINT32 *mb4ID; /* MB4'S standard ID */
volatile UCHAR *mb4data0; /* MB4'S data byte 0 */
volatile UCHAR *mb4data1; /* MB4'S data byte 1 */
volatile UCHAR *mb4data2; /* MB4'S data byte 2 */
volatile UCHAR *mb4data3; /* MB4'S data byte 3 */
volatile UCHAR *mb4data4; /* MB4'S data byte 4 */
volatile UCHAR *mb4data5; /* MB4'S data byte 5 */
volatile UCHAR *mb4data6; /* MB4'S data byte 6 */
volatile UCHAR *mb4data7; /* MB4'S data byte 7 */

volatile UINT16 *mb5code; /* MB5's missage buffer code */
volatile UINT16 *mb5length; /* MB5's data length */
volatile UINT16 *mb5timestamp; /* MB5'S timer stamp */
volatile UINT32 *mb5ID; /* MB5'S standard ID */
volatile UCHAR *mb5data0; /* MB5'S data byte 0 */
volatile UCHAR *mb5data1; /* MB5'S data byte 1 */
volatile UCHAR *mb5data2; /* MB5'S data byte 2 */
volatile UCHAR *mb5data3; /* MB5'S data byte 3 */
volatile UCHAR *mb5data4; /* MB5'S data byte 4 */
volatile UCHAR *mb5data5; /* MB5'S data byte 5 */
volatile UCHAR *mb5data6; /* MB5'S data byte 6 */
volatile UCHAR *mb5data7; /* MB5'S data byte 7 */

volatile UINT16 *mb6code; /* MB6's missage buffer code */
volatile UINT16 *mb6length; /* MB6's data length */
volatile UINT16 *mb6timestamp; /* MB6'S timer stamp */
volatile UINT32 *mb6ID; /* MB6'S standard ID */
volatile UCHAR *mb6data0; /* MB6'S data byte 0 */
volatile UCHAR *mb6data1; /* MB6'S data byte 1 */
volatile UCHAR *mb6data2; /* MB6'S data byte 2 */
volatile UCHAR *mb6data3; /* MB6'S data byte 3 */
volatile UCHAR *mb6data4; /* MB6'S data byte 4 */
volatile UCHAR *mb6data5; /* MB6'S data byte 5 */
volatile UCHAR *mb6data6; /* MB6'S data byte 6 */
volatile UCHAR *mb6data7; /* MB6'S data byte 7 */

volatile UINT16 *mb7code; /* MB7's missage buffer code */
volatile UINT16 *mb7length; /* MB7's data length */
volatile UINT16 *mb7timestamp; /* MB7'S timer stamp */
volatile UINT32 *mb7ID; /* MB7'S standard ID */
volatile UCHAR *mb7data0; /* MB7'S data byte 0 */
volatile UCHAR *mb7data1; /* MB7'S data byte 1 */
volatile UCHAR *mb7data2; /* MB7'S data byte 2 */
volatile UCHAR *mb7data3; /* MB7'S data byte 3 */
volatile UCHAR *mb7data4; /* MB7'S data byte 4 */
volatile UCHAR *mb7data5; /* MB7'S data byte 5 */
volatile UCHAR *mb7data6; /* MB7'S data byte 6 */
volatile UCHAR *mb7data7; /* MB7'S data byte 7 */

volatile UINT16 *mb8code; /* MB8's missage buffer code */
volatile UINT16 *mb8length; /* MB8's data length */
volatile UINT16 *mb8timestamp; /* MB8'S timer stamp */
volatile UINT32 *mb8ID; /* MB8'S standard ID */
volatile UCHAR *mb8data0; /* MB8'S data byte 0 */
volatile UCHAR *mb8data1; /* MB8'S data byte 1 */
volatile UCHAR *mb8data2; /* MB8'S data byte 2 */
volatile UCHAR *mb8data3; /* MB8'S data byte 3 */
volatile UCHAR *mb8data4; /* MB8'S data byte 4 */
volatile UCHAR *mb8data5; /* MB8'S data byte 5 */
volatile UCHAR *mb8data6; /* MB8'S data byte 6 */
volatile UCHAR *mb8data7; /* MB8'S data byte 7 */

volatile UINT16 *mb9code; /* MB9's missage buffer code */
volatile UINT16 *mb9length; /* MB9's data length */
volatile UINT16 *mb9timestamp; /* MB9'S timer stamp */
volatile UINT32 *mb9ID; /* MB9'S standard ID */
volatile UCHAR *mb9data0; /* MB9'S data byte 0 */
volatile UCHAR *mb9data1; /* MB9'S data byte 1 */
volatile UCHAR *mb9data2; /* MB9'S data byte 2 */
volatile UCHAR *mb9data3; /* MB9'S data byte 3 */
volatile UCHAR *mb9data4; /* MB9'S data byte 4 */
volatile UCHAR *mb9data5; /* MB9'S data byte 5 */
volatile UCHAR *mb9data6; /* MB9'S data byte 6 */
volatile UCHAR *mb9data7; /* MB9'S data byte 7 */

volatile UINT16 *mb10code; /* MB10's missage buffer code */
volatile UINT16 *mb10length; /* MB10's data length */
volatile UINT16 *mb10timestamp; /* MB10'S timer stamp */
volatile UINT32 *mb10ID; /* MB10'S standard ID */
volatile UCHAR *mb10data0; /* MB10'S data byte 0 */
volatile UCHAR *mb10data1; /* MB10'S data byte 1 */
volatile UCHAR *mb10data2; /* MB10'S data byte 2 */
volatile UCHAR *mb10data3; /* MB10'S data byte 3 */
volatile UCHAR *mb10data4; /* MB10'S data byte 4 */
volatile UCHAR *mb10data5; /* MB10'S data byte 5 */
volatile UCHAR *mb10data6; /* MB10'S data byte 6 */
volatile UCHAR *mb10data7; /* MB10'S data byte 7 */

volatile UINT16 *mb11code; /* MB11's missage buffer code */
volatile UINT16 *mb11length; /* MB11's data length */
volatile UINT16 *mb11timestamp; /* MB11'S timer stamp */
volatile UINT32 *mb11ID; /* MB11'S standard ID */
volatile UCHAR *mb11data0; /* MB11'S data byte 0 */
volatile UCHAR *mb11data1; /* MB11'S data byte 1 */
volatile UCHAR *mb11data2; /* MB11'S data byte 2 */
volatile UCHAR *mb11data3; /* MB11'S data byte 3 */
volatile UCHAR *mb11data4; /* MB11'S data byte 4 */
volatile UCHAR *mb11data5; /* MB11'S data byte 5 */
volatile UCHAR *mb11data6; /* MB11'S data byte 6 */
volatile UCHAR *mb11data7; /* MB11'S data byte 7 */

volatile UINT16 *mb12code; /* MB12's missage buffer code */
volatile UINT16 *mb12length; /* MB12's data length */
volatile UINT16 *mb12timestamp; /* MB12'S timer stamp */
volatile UINT32 *mb12ID; /* MB12'S standard ID */
volatile UCHAR *mb12data0; /* MB12'S data byte 0 */
volatile UCHAR *mb12data1; /* MB12'S data byte 1 */
volatile UCHAR *mb12data2; /* MB12'S data byte 2 */
volatile UCHAR *mb12data3; /* MB12'S data byte 3 */
volatile UCHAR *mb12data4; /* MB12'S data byte 4 */
volatile UCHAR *mb12data5; /* MB12'S data byte 5 */
volatile UCHAR *mb12data6; /* MB12'S data byte 6 */
volatile UCHAR *mb12data7; /* MB12'S data byte 7 */

volatile UINT16 *mb13code; /* MB13's missage buffer code */
volatile UINT16 *mb13length; /* MB13's data length */
volatile UINT16 *mb13timestamp; /* MB13'S timer stamp */
volatile UINT32 *mb13ID; /* MB13'S standard ID */
volatile UCHAR *mb13data0; /* MB13'S data byte 0 */
volatile UCHAR *mb13data1; /* MB13'S data byte 1 */
volatile UCHAR *mb13data2; /* MB13'S data byte 2 */
volatile UCHAR *mb13data3; /* MB13'S data byte 3 */
volatile UCHAR *mb13data4; /* MB13'S data byte 4 */
volatile UCHAR *mb13data5; /* MB13'S data byte 5 */
volatile UCHAR *mb13data6; /* MB13'S data byte 6 */
volatile UCHAR *mb13data7; /* MB13'S data byte 7 */

volatile UINT16 *mb14code; /* MB14's missage buffer code */
volatile UINT16 *mb14length; /* MB14's data length */
volatile UINT16 *mb14timestamp; /* MB14'S timer stamp */
volatile UINT32 *mb14ID; /* MB14'S standard ID */
volatile UCHAR *mb14data0; /* MB14'S data byte 0 */
volatile UCHAR *mb14data1; /* MB14'S data byte 1 */
volatile UCHAR *mb14data2; /* MB14'S data byte 2 */
volatile UCHAR *mb14data3; /* MB14'S data byte 3 */
volatile UCHAR *mb14data4; /* MB14'S data byte 4 */
volatile UCHAR *mb14data5; /* MB14'S data byte 5 */
volatile UCHAR *mb14data6; /* MB14'S data byte 6 */
volatile UCHAR *mb14data7; /* MB14'S data byte 7 */

volatile UINT16 *mb15code; /* MB15's missage buffer code */
volatile UINT16 *mb15length; /* MB15's data length */
volatile UINT16 *mb15timestamp; /* MB15'S timer stamp */
volatile UINT32 *mb15ID; /* MB15'S standard ID */
volatile UCHAR *mb15data0; /* MB15'S data byte 0 */
volatile UCHAR *mb15data1; /* MB15'S data byte 1 */
volatile UCHAR *mb15data2; /* MB15'S data byte 2 */
volatile UCHAR *mb15data3; /* MB15'S data byte 3 */
volatile UCHAR *mb15data4; /* MB15'S data byte 4 */
volatile UCHAR *mb15data5; /* MB15'S data byte 5 */
volatile UCHAR *mb15data6; /* MB15'S data byte 6 */
volatile UCHAR *mb15data7; /* MB15'S data byte 7 */
} Can_DEV;

extern Can_DEV can_chan_dev[NUM_CAN];

#endif /* _ASMLANGUAGE */


IMPORT STATUS CanDrv(void);
IMPORT STATUS CanDevCreate(void);
IMPORT void Can0TxInterrupt (void);
IMPORT void Can1TxInterrupt (void);
IMPORT void Can0RxInterrupt (void);
IMPORT void Can1RxInterrupt (void);
IMPORT void CanDevInit (void);
IMPORT int CanOpen(Can_DEV *,UCHAR *,int);
IMPORT int CanWrite(Can_DEV *,UCHAR *,UINT16);
IMPORT int CanRead(Can_DEV *,UCHAR *,UINT16);
IMPORT int CanIoctl(Can_DEV *,int,void *);
IMPORT int CanClose(Can_DEV *);
IMPORT void Can0Test(void);


#ifdef __cplusplus
}
#endif

#endif /* __INCcoldfireSioh */