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

📄 can.h

📁 这个程序是在BC++3.1 for DOS下开发的一个小的示例程序
💻 H
字号:
#ifndef _CAN_H
#define _CAN_H

/* compatiable in c and c++ compilation enveronment*/
#ifdef __cplusplus
	#define _CPPARGS ...
#else
	  #define _CPPARGS
#endif

#ifdef __cplusplus
extern "C" {
#endif

#include	<dos.h>
#include	<bios.h>
#include	<math.h>
#include 	<ctype.h>
#include	<conio.h>
#include	<stdio.h>
#include 	<stdlib.h>
#include	<string.h>
#include	<process.h>


typedef unsigned char	uchar;
typedef unsigned int	uint;
typedef unsigned int	u16;
typedef unsigned char	u8;

enum len {ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT};
enum pat {S,E};
enum typ {D,R};

enum fil {SINGLE,DOUBLE};
enum lis {LON,LOFF};
enum tes {TON,TOFF};
enum sle {SON,SOFF};
enum bau {B1000,B800,B500,B320,B250,B160,B125,B100,B80,B40,B20,B10,B5};

/*--------------------------------------------------------*/
/* PeliCAN mode  Sja1000        Register*/
#define SJA1000_MOD     0               /*mode register*/
#define SJA1000_CMR     1               /* Command register*/
#define SJA1000_SR      2               /* Status register*/
#define SJA1000_IR      3               /* Interrupt register*/
#define SJA1000_IER     4               /* Interrupt Enable*/
#define SJA1000_BTR0    6               /* Bus Timing register 0*/
#define SJA1000_BTR1    7               /* Bus Timing register 1*/
#define SJA1000_OCR     8               /* Output Control register*/
#define SJA1000_ALC     11              /* Arbitration Lost Capture*/
#define SJA1000_ECC     12              /* Error Code Capture*/
#define SJA1000_EWLR    13              /* Error Warning Limit*/
#define SJA1000_RXERR   14              /* RX Error Counter*/
#define SJA1000_TXERR   15              /* TX Error Counter*/

#define SJA1000_RMC     29              /* Rx Message Counter (number of msgs. in RX FIFO*/
#define SJA1000_RBSA    30              /* Rx Buffer Start Addr. (address of current MSG)*/

#define SJA1000_FRM     16              /* Transmit Buffer (write) Receive Buffer (read) Frame Information*/

/*ID bytes (11 bits in 0 and 1 or 16 bits in 0,1 and 13 bits in 2,3 (extended))*/
#define SJA1000_ID0     17
#define SJA1000_ID1     18

/*ID cont. for extended frames*/
#define SJA1000_ID2     19
#define SJA1000_ID3     20

#define SJA1000_DATS    19              /* Data start standard frame*/
#define SJA1000_DATE    21              // Data start extended frame*/

#define SJA1000_ACR0    16              /* Acceptance Code (4 bytes) in RESET mode*/
#define SJA1000_ACR1    17              /* Acceptance Code (4 bytes) in RESET mode*/
#define SJA1000_ACR2    18              /* Acceptance Code (4 bytes) in RESET mode*/
#define SJA1000_ACR3    19              /* Acceptance Code (4 bytes) in RESET mode*/

#define SJA1000_AMR0    20              /* Acceptance Mask (4 bytes) in RESET mode*/
#define SJA1000_AMR1    21              /* Acceptance Mask (4 bytes) in RESET mode*/
#define SJA1000_AMR2    22              /* Acceptance Mask (4 bytes) in RESET mode*/
#define SJA1000_AMR3    23              /* Acceptance Mask (4 bytes) in RESET mode*/

#define SJA1000_CDR     31              /* Clock Divider*/
/*---------------------------------------------------------------------------*/

#define canreadb(base,offset)		peekb(base,offset)
#define canwriteb(base,offset,val)  pokeb(base,offset,val)


typedef struct{
	 enum pat f_pattern;
	 enum typ f_type;
	 enum len byte_len;
	 unsigned char ff;
	 unsigned char id1;
	 unsigned char id2;
	 unsigned char id3;
	 unsigned char id4;
	 unsigned char data[8];
}CAN_PACKET;

typedef struct{
	 unsigned char ff;
	 unsigned char id1;
	 unsigned char id2;
	 unsigned char id3;
	 unsigned char id4;
	 unsigned char data[8];
}CAN_RPACKET;

typedef struct{
	 enum fil filter;
	 enum lis lis_on;
	 enum tes test;
	 enum sle sleep;
	 enum bau baud_rate;
	 unsigned char code1;
	 unsigned char code2;
	 unsigned char code3;
	 unsigned char code4;
	 unsigned char mask1;
	 unsigned char mask2;
	 unsigned char mask3;
	 unsigned char mask4;
}PORT_STRUCT;

			void GetIrqP(void);
			void Close_Rece(void);
			void Inter_Rece(void);
			
			int Inquiry_IntCanflag(int handle);
			void Clear_Canflag(int handle);
			void CanConfigPort(unsigned int baseAddr, PORT_STRUCT * ptrStruct);
			void CanSendMsg(unsigned int baseAddr, CAN_PACKET *canpacket);
			void CanRcvMsg(unsigned int baseAddr, CAN_RPACKET *can_rpacket);
			void CanEnableReceive(unsigned int baseAddr);
			void CanDisableReceive(unsigned int baseAddr);
			void CanClearRxBuffer(unsigned int baseAddr);
			int CanGetErrorCode(unsigned int baseAddr);
			void CanSetErrorWarningLimit(unsigned int baseAddr, int value);
			int CanGetErrorWarningLimit(unsigned int baseAddr);
			int CanGetRxErrorCount(unsigned int baseAddr);
			void CanSetRxErrorCount(unsigned int baseAddr, int value);
			int CanGetTxErrorCount(unsigned int baseAddr);
			void CanSetTxErrorCount(unsigned int baseAddr, int value);
			int CanGetArbLostCap(unsigned int baseAddr);
			int CanEnableIntBusErr(unsigned int baseAddr);
			int CanDisableIntBusErr(unsigned int baseAddr);
			int ResetCan(unsigned int baseAddr);
			
			unsigned int hextoint(char * digits);			
			
			typedef void far interrupt (*IRQHANDLER)(_CPPARGS);
			//void Close_Irq(int IRQ,void far interrupt (*oldhandler)(_CPPARGS));
			//IRQHANDLER Install_Irq(int IRQ,void far interrupt (*newhandler)(_CPPARGS));



#ifdef __cplusplus
}
#endif


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -