📄 can.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 + -