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

📄 ch365dos.h

📁 南京沁恒电子有限公司USB通用设备接口芯片资料
💻 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 + -