📄 ch365dos.h
字号:
/* 2003.09.10
****************************************
** Copyright (C) W.ch 1999-2003 **
** Web: http://www.winchiphead.com **
****************************************
** DOS for PCI interface chip CH365 **
** C, TC2.0 **
****************************************
PCI总线接口芯片CH365的DOS接口库 V1.1
南京沁恒电子有限公司 作者: W.ch 2003.09
CH365-DOS V1.1 , Support: IO/MEM/INT
运行环境: DOS
*/
#ifndef _CH365_DOS_H
#define _CH365_DOS_H
typedef void VOID;
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
typedef unsigned long ULONG;
typedef void *PVOID;
typedef unsigned char *PUCHAR;
typedef unsigned short *PUSHORT;
typedef unsigned long *PULONG;
typedef void far *FPVOID;
typedef unsigned char far *FPUCHAR;
typedef unsigned short far *FPUSHORT;
typedef unsigned long far *FPULONG;
typedef unsigned short BOOL;
typedef void far interrupt ( *PINTERRUPT_ROUTINE )( );
typedef union REGS X86REG;
typedef struct SREGS X86SREG;
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define mOFFSET( s, m ) ( (ULONG) & ( ( ( s * ) 0 ) -> m ) ) /* 定义获取结构成员相对偏移地址的宏 */
#ifndef max
#define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) /* 较大值 */
#endif
#ifndef min
#define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) /* 较小值 */
#endif
typedef struct _PCI_CONFIG { /* 定义PCI配置空间数据结构 */
USHORT mPcVendorId; /* 00H 供应商标识 */
USHORT mPcDeviceId; /* 02H 设备标识 */
USHORT mPcCommandReg; /* 04H 命令寄存器 */
USHORT mPcStatusReg; /* 06H 状态寄存器 */
UCHAR mPcRevisionId; /* 08H 修改标识 */
UCHAR mPcProgramIf; /* 09H 寄存器级编程接口 */
UCHAR mPcSubClass; /* 0AH 子类代码 */
UCHAR mPcBaseClass; /* 0BH 基本分类代码 */
UCHAR mPcCacheLine; /* 0CH 缓存行长度 */
UCHAR mPcLatenTimer; /* 0DH 延迟计数器 */
UCHAR mPcHeaderType; /* 0EH 头标类型 */
UCHAR mPcBistReg; /* 0FH 内含自测试寄存器 */
ULONG mPcBaseAddr0; /* 10H 基址寄存器0 */
ULONG mPcBaseAddr1; /* 14H 基址寄存器1 */
ULONG mPcBaseAddr2; /* 18H 基址寄存器2 */
ULONG mPcBaseAddr3; /* 1CH 基址寄存器3 */
ULONG mPcBaseAddr4; /* 20H 基址寄存器4 */
ULONG mPcBaseAddr5; /* 24H 基址寄存器5 */
ULONG mPcCardCis; /* 28H */
USHORT mPcSubSysVen; /* 2CH 子系统供应商标识 */
USHORT mPcSubSysDev; /* 2EH 子系统设备标识 */
ULONG mPcExpansRom; /* 30H 扩展ROM基址寄存器 */
UCHAR mPcCapPtr; /* 34H */
UCHAR mPcReserved1[3]; /* 35H */
ULONG mPcReserved2; /* 38H */
UCHAR mPcInterLine; /* 3CH 中断线寄存器 */
UCHAR mPcInterPin; /* 3DH 中断引脚寄存器 */
UCHAR mPcMinGrant; /* 3EH */
UCHAR mPcMaxLatency; /* 3FH */
} mPCI_CONFIG, *mPPCI_CONFIG;
typedef struct _PCI_EXP_ROM { /* PCI扩展ROM的数据结构 */
UCHAR mPerRomSig[4]; /* 00H PCI扩展ROM签名字符串'PCIR' */
USHORT mPerVendorId; /* 04H 供应商标识 */
USHORT mPerDeviceId; /* 06H 设备标识 */
USHORT mPerVpdPtr; /* 08H 重要产品数据指针 */
USHORT mPerStrucLen; /* 0AH PCI扩展ROM数据结构的长度 */
UCHAR mPerRevision; /* 0CH PCI扩展ROM数据结构的修改版本 */
UCHAR mPerProgramIf; /* 0DH 寄存器级编程接口 */
UCHAR mPerSubClass; /* 0EH 子类代码 */
UCHAR mPerBaseClass; /* 0FH 基本分类代码 */
USHORT mPerImageLen; /* 10H 映像长度 */
USHORT mPerImageRev; /* 12H 映像中代码/数据的修改版本 */
UCHAR mPerCodeType; /* 14H 代码类型 */
UCHAR mPerIndicator; /* 15H 映像指示标志 */
USHORT mPerReserved; /* 16H */
} mPCI_EXP_ROM, *mPPCI_EXP_ROM;
typedef struct _CH365_CFG_REG { /* CH365芯片的配置寄存器 */
mPCI_CONFIG mCh365CfgPci; /* 00H-3FH,共64字节为标准PCI配置空间 */
UCHAR mCh365CfgCtrl; /* 40H 芯片控制寄存器,高5位只读 */
UCHAR mCh365CfgDin; /* 41H 8位总线输入端口,只读 */
UCHAR mCh365CfgState; /* 42H 芯片状态寄存器,只读 */
UCHAR mCh365CfgResv; /* 43H */
} mCH365_CFG_REG, *mPCH365_CFG_REG;
typedef struct _CH365_IO_REG { /* CH365芯片的I/O空间 */
UCHAR mCh365IoPort[0xf0]; /* 00H-EFH,共240字节为标准的I/O端口 */
UCHAR mCh365MemAddrL; /* F0H 存储器接口: A7-A0地址设定寄存器 */
UCHAR mCh365MemAddrH; /* F1H 存储器接口: A15-A8地址设定寄存器 */
UCHAR mCh365IoResv2; /* F2H */
UCHAR mCh365MemData; /* F3H 存储器接口: 存储器数据存取寄存器 */
UCHAR mCh365I2cData; /* F4H I2C串行接口: I2C数据存取寄存器 */
UCHAR mCh365I2cCtrl; /* F5H I2C串行接口: I2C控制和状态寄存器 */
UCHAR mCh365I2cAddr; /* F6H I2C串行接口: I2C地址设定寄存器 */
UCHAR mCh365I2cDev; /* F7H I2C串行接口: I2C设备地址和命令寄存器 */
UCHAR mCh365IoCtrl; /* F8H 芯片控制寄存器,高5位只读 */
UCHAR mCh365IoBuf; /* F9H 本地数据输入缓存寄存器 */
UCHAR mCh365IoSpeed; /* FAH 读写速度控制寄存器 */
UCHAR mCh365IoResv3; /* FBH */
UCHAR mCh365IoTime; /* FCH 硬件循环计数寄存器 */
UCHAR mCh365IoResv4[3]; /* FDH */
} mCH365_IO_REG, *mPCH365_IO_REG;
#define mCH365_MEM_BASE_AUTO 0xffffffff /* 自动设定CH365的存储器基址 */
#define mCH365_INT_LINE_AUTO 0xffff /* 自动检测CH365的中断号 */
#define mHARDWARE_INTERRUPT( i ) ( ( i ) < 8 ? ( i ) + 8 : ( i ) + 0x68 ) /* 硬件中断的中断向量号 */
/* 寄存器的位定义 */
#define mBitAddr15Out 0x01 /* 设定A15输出值,1*:high,0:low */
#define mBitSysExtOut 0x02 /* 设定SYS_EX输出值,1:high,0*:low */
#define mBitIntAction 0x04 /* 设定中断激活状态,1:action,0*:inaction */
#define mBitPciIdDef 0x01 /* 只读,PCI设备标识的当前选择,1*:default,0:external */
#define mBitPortHit 0x04 /* 只读,本地硬件定址功能的启用状态,1:启用,0*:禁用 */
#define mBitInterRom 0x10 /* 只读,内部Mini-ROM功能的启用状态,1:启用,0*:禁用 */
#define mBitSysExtOe 0x40 /* 只读,SYS_EX输出三态控制/输出使能,1*:启用,0:禁用 */
#define mBitIntEnable 0x80 /* 只读,中断功能的启用状态,1:启用,0*:禁用 */
#define mBitI2cStatus 0x01 /* I2C接口的操作控制和状态,1:开始/正在操作,0*:空闲/操作完成 */
#define mBitI2cSclOut 0x80 /* 选择I2C接口的SCL输出,1:SYS_EX,0*:A15 */
#define mBitIoSpeed 0x07 /* 设定读写脉冲宽度,000-111,111*:210nS/240nS */
#define mBitIoSpace 0x10 /* 设定读写脉冲之间的最小间隔,1:60nS,0*:30nS */
#define mBitIoPrefetch 0x80 /* 设定存储器空间预取控制位,1:使能,0*:禁止 */
USHORT CH365CheckDevice( ); /* 检测CH365设备,检测到CH365则返回其PCI地址,即总线/设备/功能号,出错则返回0 */
UCHAR CH365ReadCfgByte( /* 从配置空间读取一个字节数据,返回读取的字节数据 */
USHORT iOffset ); /* 指定偏移地址 */
VOID CH365WriteCfgByte( /* 向配置空间写入一个字节数据 */
USHORT iOffset, /* 指定偏移地址 */
UCHAR iByte ); /* 待写入的字节数据 */
USHORT CH365ReadCfgWord( /* 从配置空间读取一个字数据,返回读取的字数据 */
USHORT iOffset ); /* 指定偏移地址 */
VOID CH365WriteCfgWord( /* 向配置空间写入一个字数据 */
USHORT iOffset, /* 指定偏移地址 */
USHORT iWord ); /* 待写入的字数据 */
mPCH365_IO_REG CH365GetIoBaseAddr( ); /* 获取I/O端口的基址,返回I/O端口基址 */
BOOL CH365SetIoBaseAddr( /* 设定I/O端口的基址 */
mPCH365_IO_REG iIoBaseAddr ); /* 指定I/O端口基址 */
ULONG CH365GetMemBaseAddr( ); /* 获取存储器的基址,返回存储器基址 */
BOOL CH365SetMemBaseAddr( /* 设定存储器的基址 */
ULONG iMemBaseAddr ); /* 指定存储器基址,为0则关闭存储器,为-1则自动设定 */
USHORT CH365GetIntLine( ); /* 获取中断号,返回中断号,为0则无效 */
BOOL CH365SetIntLine( /* 设定中断号 */
USHORT iIntLine ); /* 指定中断号,为0则关闭中断,为-1则自动检测并设定 */
BOOL CH365SetIntRoutine( /* 设定中断服务程序 */
PINTERRUPT_ROUTINE iIntRoutine ); /* 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序 */
UCHAR CH365ReadI2C( /* 从I2C接口读取一个字节数据,返回读取的字节数据 */
UCHAR iDevice, /* 低7位指定I2C设备地址 */
UCHAR iAddr ); /* 指定数据单元的地址 */
VOID CH365WriteI2C( /* 向I2C接口写入一个字节数据 */
UCHAR iDevice, /* 低7位指定I2C设备地址 */
UCHAR iAddr, /* 指定数据单元的地址 */
UCHAR iByte ); /* 待写入的字节数据 */
VOID CH365DelayUS( /* 延时指定微秒 */
ULONG iDelay ); /* 指定要延时的微秒数,如果延时小于10则误差较大 */
#endif /* _CH365_DOS_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -