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 */