You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
559 lines
22 KiB
C
559 lines
22 KiB
C
// 2003.09.10
|
|
// 2003.12.08 V1.2
|
|
// 2004.05.08 V1.3
|
|
// 2004.12.10 V1.5
|
|
//****************************************
|
|
//** Copyright (C) W.ch 1999-2004 **
|
|
//** Web: http://www.winchiphead.com **
|
|
//****************************************
|
|
//** DLL for PCI interface chip CH365 **
|
|
//** C, VC5.0 **
|
|
//****************************************
|
|
//
|
|
// PCI总线接口芯片CH365的应用层接口库 V1.5
|
|
// 南京沁恒电子有限公司 作者: W.ch 2004.12
|
|
// CH365-DLL V1.5 , Support: IO/MEM/INT
|
|
// 运行环境: Windows 98/ME, Windows 2000/XP
|
|
|
|
#ifndef _CH365_DLL_H
|
|
#define _CH365_DLL_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#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
|
|
|
|
#ifdef ExAllocatePool
|
|
#undef ExAllocatePool // 删除带TAG的内存分配
|
|
#endif
|
|
|
|
#ifndef NTSTATUS
|
|
typedef LONG NTSTATUS; // 返回状态
|
|
#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端口
|
|
union { // 以字或者以字节为单位进行存取
|
|
USHORT mCh365MemAddr; // F0H 存储器接口: A15-A0地址设定寄存器
|
|
struct { // 以字节为单位进行存取
|
|
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 mCh365Speed; // FAH 芯片速度控制寄存器
|
|
UCHAR mCh365IoResv3; // FBH
|
|
UCHAR mCh365IoTime; // FCH 硬件循环计数寄存器
|
|
UCHAR mCh365IoResv4[3]; // FDH
|
|
} mCH365_IO_REG, *mPCH365_IO_REG;
|
|
|
|
typedef struct _CH365_MEM_REG { // CH365芯片的存储器空间
|
|
UCHAR mCh365MemPort[0x8000]; // 0000H-7FFFH,共32768字节为标准的存储器单元
|
|
} mCH365_MEM_REG, *mPCH365_MEM_REG;
|
|
|
|
typedef struct _WIN32_COMMAND { // 定义WIN32命令接口结构
|
|
union {
|
|
ULONG mFunction; // 输入时指定功能代码
|
|
NTSTATUS mStatus; // 输出时返回操作状态
|
|
};
|
|
PVOID mAddress; // 起始地址,返回地址
|
|
ULONG mLength; // 存取长度,返回后续数据的长度
|
|
UCHAR mBuffer[4]; // 数据缓冲区,长度为0至32KB
|
|
} mWIN32_COMMAND, *mPWIN32_COMMAND;
|
|
|
|
// WIN32应用层接口命令
|
|
#define IOCTL_CH365_COMMAND ( FILE_DEVICE_UNKNOWN << 16 | FILE_ANY_ACCESS << 14 | 0x0f36 << 2 | METHOD_BUFFERED ) // 专用接口
|
|
|
|
#define mWIN32_COMMAND_HEAD mOFFSET( mWIN32_COMMAND, mBuffer ) // WIN32命令接口的头长度
|
|
|
|
#define mCH365_MAX_NUMBER 16 // 最多同时连接的CH365数
|
|
|
|
#define mMAX_BUFFER_LENGTH max( sizeof( mCH365_IO_REG ), sizeof( mCH365_MEM_REG ) ) // 数据缓冲区最大长度
|
|
|
|
#define mMAX_COMMAND_LENGTH ( mWIN32_COMMAND_HEAD + mMAX_BUFFER_LENGTH ) // 最大数据长度加上命令结构头的长度
|
|
|
|
#define mCH365_MEM_BASE_AUTO ( (PVOID)0xffffffff ) // 自动设定CH365的存储器基址
|
|
|
|
#define mCH365_INT_TOOL_LINE_AUTO 0xffffffff // 自动检测CH365的中断号
|
|
|
|
|
|
// 寄存器的位定义
|
|
#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 mBitSpeedAct 0x07 // 速度控制,激活状态的脉冲宽度,实际宽度为该值乘以30nS
|
|
#define mBitSpeedInact 0x10 // 速度控制,非激活状态的空闲宽度,1:前45nS/后15nS,0:前15nS/后15nS
|
|
#define mBitSpeedPreft 0x80 // 速度控制,预取状态控制位,1:预取位有效,0:预取位无效
|
|
|
|
|
|
// 应用层接口的功能代码
|
|
#define mFuncNoOperation 0x00000000 // 无操作
|
|
#define mFuncGetVersion 0x00000001 // 获取驱动程序版本号
|
|
#define mFuncGetIoBaseAddr 0x00000004 // 读取I/O端口基址
|
|
#define mFuncSetIoBaseAddr 0x00000005 // 设置I/O端口基址
|
|
#define mFuncGetMemBaseAddr 0x00000006 // 读取存储器基址
|
|
#define mFuncSetMemBaseAddr 0x00000007 // 设置存储器基址,自动设定存储器基址
|
|
#define mFuncGetInterLine 0x00000008 // 读取中断号
|
|
#define mFuncSetInterLine 0x00000009 // 设置中断号,自动检测中断号
|
|
#define mFuncWaitInterrupt 0x0000000a // 等待中断,直到CH365产生中断
|
|
#define mFuncAbortWaitInter 0x0000000b // 放弃等待中断,终止等待
|
|
#define mFuncSetExclusive 0x0000000c // 设置独占使用
|
|
#define mFuncReadIoByte 0x00000010 // 读取输入输出端口,在同一个端口地址以字节为单位连续读取
|
|
#define mFuncReadIoWord 0x00000011 // 读取输入输出端口,在同一个端口地址以字为单位连续读取
|
|
#define mFuncReadIoDword 0x00000012 // 读取输入输出端口,在同一个端口地址以双字为单位连续读取
|
|
#define mFuncReadIoBlock 0x00000013 // 读取输入输出端口,每读取一个字节,端口地址加一
|
|
#define mFuncWriteIoByte 0x00000014 // 写入输入输出端口,在同一个端口地址以字节为单位连续写入
|
|
#define mFuncWriteIoWord 0x00000015 // 写入输入输出端口,在同一个端口地址以字为单位连续写入
|
|
#define mFuncWriteIoDword 0x00000016 // 写入输入输出端口,在同一个端口地址以双字为单位连续写入
|
|
#define mFuncWriteIoBlock 0x00000017 // 写入输入输出端口,每写入一个字节,端口地址加一
|
|
#define mFuncReadMemByte 0x00000018 // 读取存储器/寄存器
|
|
#define mFuncReadMemWord 0x00000019 // 读取存储器/寄存器
|
|
#define mFuncReadMemDword 0x0000001a // 读取存储器/寄存器
|
|
#define mFuncWriteMemByte 0x0000001c // 写入存储器/寄存器
|
|
#define mFuncWriteMemWord 0x0000001d // 写入存储器/寄存器
|
|
#define mFuncWriteMemDword 0x0000001e // 写入存储器/寄存器
|
|
#define mFuncReadConfig 0x00000020 // 读取PCI配置空间
|
|
#define mFuncWriteConfig 0x00000021 // 写入PCI配置空间
|
|
#define mFuncReadBuffer1 0x00000024 // 读取中断命令缓冲区1
|
|
#define mFuncWriteBuffer1 0x00000025 // 写入中断命令缓冲区1
|
|
#define mFuncReadBuffer2 0x00000026 // 读取中断命令缓冲区2
|
|
#define mFuncWriteBuffer2 0x00000027 // 写入中断命令缓冲区2
|
|
|
|
|
|
typedef VOID ( CALLBACK * mPCH365_INT_ROUTINE ) ( VOID ); // 中断服务程序
|
|
|
|
|
|
HANDLE WINAPI CH365OpenDevice( // 打开CH365设备,返回句柄,出错则无效
|
|
BOOL iEnableMemory, // 是否需要支持存储器
|
|
BOOL iEnableInterrupt ); // 是否需要支持中断
|
|
|
|
|
|
VOID WINAPI CH365CloseDevice( ); // 关闭CH365设备
|
|
|
|
|
|
ULONG WINAPI CH365GetVersion( ); // 获得DLL版本号,返回版本号
|
|
|
|
|
|
ULONG WINAPI CH365DriverCommand( // 直接传递命令给驱动程序,出错则返回0,否则返回数据长度
|
|
mPWIN32_COMMAND ioCommand ); // 命令结构的指针
|
|
// 该程序在调用后返回数据长度,并且仍然返回命令结构,如果是读操作,则数据返回在命令结构中,
|
|
// 返回的数据长度在操作失败时为0,操作成功时为整个命令结构的长度,例如读一个字节,则返回mWIN32_COMMAND_HEAD+1,
|
|
// 命令结构在调用前,分别提供:命令功能代码,起始地址(可选),存取数据的长度(可选),
|
|
// 命令结构在调用后,分别返回:操作状态代码,返回的基址(可选),后续数据的长度(可选),
|
|
// 操作状态代码是由WINDOWS定义的代码,可以参考NTSTATUS.H,
|
|
// 返回的基址只适用于下列命令:获取I/O基址,获取存储器基址,获取中断号,对于其它命令则保持输入时的起始地址
|
|
// 后续数据的长度是指读操作返回的数据长度,数据存放在随后的缓冲区中,对于写操作一般为0
|
|
|
|
|
|
ULONG WINAPI CH365GetDrvVersion( ); // 获得驱动程序版本号,返回版本号,出错则返回0
|
|
|
|
|
|
BOOL WINAPI CH365GetIoBaseAddr( // 获取I/O端口的基址
|
|
mPCH365_IO_REG *oIoBaseAddr ); // 保存I/O端口基址的单元地址
|
|
|
|
|
|
BOOL WINAPI CH365SetIoBaseAddr( // 设定I/O端口的基址
|
|
mPCH365_IO_REG iIoBaseAddr ); // 指定I/O端口基址
|
|
|
|
|
|
BOOL WINAPI CH365GetMemBaseAddr( // 获取存储器的基址
|
|
mPCH365_MEM_REG *oMemBaseAddr ); // 保存存储器基址的单元地址
|
|
|
|
|
|
BOOL WINAPI CH365SetMemBaseAddr( // 设定存储器的基址
|
|
mPCH365_MEM_REG iMemBaseAddr ); // 指定存储器基址,为0则关闭存储器,为-1则自动设定
|
|
|
|
|
|
BOOL WINAPI CH365GetIntLine( // 获取中断号
|
|
PULONG oIntLine ); // 保存中断号的单元地址
|
|
|
|
|
|
BOOL WINAPI CH365SetIntLine( // 设定中断号
|
|
ULONG iIntLine ); // 指定中断号,为0则关闭中断,为-1则自动检测并设定
|
|
|
|
|
|
BOOL WINAPI CH365WaitInterrupt( ); // 等待中断事件
|
|
|
|
|
|
BOOL WINAPI CH365AbortWaitInt( ); // 放弃等待中断
|
|
|
|
|
|
BOOL WINAPI CH365SetIntRoutine( // 设定中断服务程序
|
|
mPCH365_INT_ROUTINE iIntRoutine ); // 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序
|
|
|
|
|
|
BOOL WINAPI CH365ReadIntCommand( // 读取中断命令缓冲区
|
|
mPWIN32_COMMAND oCommand, // 指向一个足够大的缓冲区,用于保存读取的命令结构
|
|
ULONG iCmdIndex ); // 中断命令序号,为1或者2
|
|
|
|
|
|
BOOL WINAPI CH365WriteIntCommand( // 写入中断命令缓冲区
|
|
mPWIN32_COMMAND iCommand, // 指向作为中断命令的命令结构
|
|
ULONG iCmdIndex ); // 中断命令序号,为1或者2
|
|
|
|
|
|
BOOL WINAPI CH365ReadIoByte( // 从I/O端口读取一个字节
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365ReadIoWord( // 从I/O端口读取一个字
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
PUSHORT oWord ); // 指向一个字单元,用于保存读取的字数据
|
|
|
|
|
|
BOOL WINAPI CH365ReadIoDword( // 从I/O端口读取一个双字
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
PULONG oDword ); // 指向一个双字单元,用于保存读取的双字数据
|
|
|
|
|
|
BOOL WINAPI CH365WriteIoByte( // 向I/O端口写入一个字节
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
UCHAR iByte ); // 待写入的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365WriteIoWord( // 向I/O端口写入一个字
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
USHORT iWord ); // 待写入的字数据
|
|
|
|
|
|
BOOL WINAPI CH365WriteIoDword( // 向I/O端口写入一个双字
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
ULONG iDword ); // 待写入的双字数据
|
|
|
|
|
|
BOOL WINAPI CH365ReadMemByte( // 从存储器读取一个字节
|
|
PVOID iAddr, // 指定存储器的地址,虚拟地址
|
|
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365ReadMemDword( // 从存储器读取一个双字
|
|
PVOID iAddr, // 指定存储器的地址,虚拟地址
|
|
PULONG oDword ); // 指向一个双字单元,用于保存读取的双字数据
|
|
|
|
|
|
BOOL WINAPI CH365WriteMemByte( // 向存储器写入一个字节
|
|
PVOID iAddr, // 指定存储器的地址,虚拟地址
|
|
UCHAR iByte ); // 待写入的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365WriteMemDword( // 向存储器写入一个双字
|
|
PVOID iAddr, // 指定存储器的地址,虚拟地址
|
|
ULONG iDword ); // 待写入的双字数据
|
|
|
|
|
|
BOOL WINAPI CH365ReadConfig( // 从配置空间读取一个字节数据
|
|
PVOID iOffset, // 指定偏移地址
|
|
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365WriteConfig( // 向配置空间写入一个字节数据
|
|
PVOID iOffset, // 指定偏移地址
|
|
UCHAR iByte ); // 待写入的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365SetA15_A8( // 设置高地址,即设置A15-A8的输出
|
|
UCHAR iA15_A8 ); // 位7-位0对应A15-A8的输出,1为高电平,0为低电平
|
|
|
|
|
|
BOOL WINAPI CH365ReadI2C( // 从I2C接口读取一个字节数据
|
|
UCHAR iDevice, // 低7位指定I2C设备地址
|
|
UCHAR iAddr, // 指定数据单元的地址
|
|
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365WriteI2C( // 向I2C接口写入一个字节数据
|
|
UCHAR iDevice, // 低7位指定I2C设备地址
|
|
UCHAR iAddr, // 指定数据单元的地址
|
|
UCHAR iByte ); // 待写入的字节数据
|
|
|
|
|
|
HANDLE WINAPI CH365mOpenDevice( // 打开CH365设备,返回句柄,出错则无效
|
|
ULONG iIndex, // 指定CH365设备序号,0对应第一个设备
|
|
BOOL iEnableMemory, // 是否需要支持存储器
|
|
BOOL iEnableInterrupt ); // 是否需要支持中断
|
|
|
|
|
|
VOID WINAPI CH365mCloseDevice( // 关闭CH365设备
|
|
ULONG iIndex ); // 指定CH365设备序号
|
|
|
|
|
|
ULONG WINAPI CH365mDriverCommand( // 直接传递命令给驱动程序,出错则返回0,否则返回数据长度
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
mPWIN32_COMMAND ioCommand ); // 命令结构的指针
|
|
// 该程序在调用后返回数据长度,并且仍然返回命令结构,如果是读操作,则数据返回在命令结构中,
|
|
// 返回的数据长度在操作失败时为0,操作成功时为整个命令结构的长度,例如读一个字节,则返回mWIN32_COMMAND_HEAD+1,
|
|
// 命令结构在调用前,分别提供:命令功能代码,起始地址(可选),存取数据的长度(可选),
|
|
// 命令结构在调用后,分别返回:操作状态代码,返回的基址(可选),后续数据的长度(可选),
|
|
// 操作状态代码是由WINDOWS定义的代码,可以参考NTSTATUS.H,
|
|
// 返回的基址只适用于下列命令:获取I/O基址,获取存储器基址,获取中断号,对于其它命令则保持输入时的起始地址
|
|
// 后续数据的长度是指读操作返回的数据长度,数据存放在随后的缓冲区中,对于写操作一般为0
|
|
|
|
|
|
BOOL WINAPI CH365mGetIoBaseAddr( // 获取I/O端口的基址
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
mPCH365_IO_REG *oIoBaseAddr ); // 保存I/O端口基址的单元地址
|
|
|
|
|
|
BOOL WINAPI CH365mSetIoBaseAddr( // 设定I/O端口的基址
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
mPCH365_IO_REG iIoBaseAddr ); // 指定I/O端口基址
|
|
|
|
|
|
BOOL WINAPI CH365mGetMemBaseAddr( // 获取存储器的基址
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
mPCH365_MEM_REG *oMemBaseAddr ); // 保存存储器基址的单元地址
|
|
|
|
|
|
BOOL WINAPI CH365mSetMemBaseAddr( // 设定存储器的基址
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
mPCH365_MEM_REG iMemBaseAddr ); // 指定存储器基址,为0则关闭存储器,为-1则自动设定
|
|
|
|
|
|
BOOL WINAPI CH365mGetIntLine( // 获取中断号
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PULONG oIntLine ); // 保存中断号的单元地址
|
|
|
|
|
|
BOOL WINAPI CH365mSetIntLine( // 设定中断号
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
ULONG iIntLine ); // 指定中断号,为0则关闭中断,为-1则自动检测并设定
|
|
|
|
|
|
BOOL WINAPI CH365mWaitInterrupt( // 等待中断事件
|
|
ULONG iIndex ); // 指定CH365设备序号
|
|
|
|
|
|
BOOL WINAPI CH365mAbortWaitInt( // 放弃等待中断
|
|
ULONG iIndex ); // 指定CH365设备序号
|
|
|
|
|
|
BOOL WINAPI CH365mSetIntRoutine( // 设定中断服务程序
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
mPCH365_INT_ROUTINE iIntRoutine ); // 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序
|
|
|
|
|
|
BOOL WINAPI CH365mReadIntCommand( // 读取中断命令缓冲区
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
mPWIN32_COMMAND oCommand, // 指向一个足够大的缓冲区,用于保存读取的命令结构
|
|
ULONG iCmdIndex ); // 中断命令序号,为1或者2
|
|
|
|
|
|
BOOL WINAPI CH365mWriteIntCommand( // 写入中断命令缓冲区
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
mPWIN32_COMMAND iCommand, // 指向作为中断命令的命令结构
|
|
ULONG iCmdIndex ); // 中断命令序号,为1或者2
|
|
|
|
|
|
BOOL WINAPI CH365mReadIoByte( // 从I/O端口读取一个字节
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365mReadIoWord( // 从I/O端口读取一个字
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
PUSHORT oWord ); // 指向一个字单元,用于保存读取的字数据
|
|
|
|
|
|
BOOL WINAPI CH365mReadIoDword( // 从I/O端口读取一个双字
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
PULONG oDword ); // 指向一个双字单元,用于保存读取的双字数据
|
|
|
|
|
|
BOOL WINAPI CH365mWriteIoByte( // 向I/O端口写入一个字节
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
UCHAR iByte ); // 待写入的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365mWriteIoWord( // 向I/O端口写入一个字
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
USHORT iWord ); // 待写入的字数据
|
|
|
|
|
|
BOOL WINAPI CH365mWriteIoDword( // 向I/O端口写入一个双字
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定I/O端口的地址
|
|
ULONG iDword ); // 待写入的双字数据
|
|
|
|
|
|
BOOL WINAPI CH365mReadMemByte( // 从存储器读取一个字节
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定存储器的地址,虚拟地址
|
|
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365mReadMemDword( // 从存储器读取一个双字
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定存储器的地址,虚拟地址
|
|
PULONG oDword ); // 指向一个双字单元,用于保存读取的双字数据
|
|
|
|
|
|
BOOL WINAPI CH365mWriteMemByte( // 向存储器写入一个字节
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定存储器的地址,虚拟地址
|
|
UCHAR iByte ); // 待写入的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365mWriteMemDword( // 向存储器写入一个双字
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iAddr, // 指定存储器的地址,虚拟地址
|
|
ULONG iDword ); // 待写入的双字数据
|
|
|
|
|
|
BOOL WINAPI CH365mReadConfig( // 从配置空间读取一个字节数据
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iOffset, // 指定偏移地址
|
|
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365mWriteConfig( // 向配置空间写入一个字节数据
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
PVOID iOffset, // 指定偏移地址
|
|
UCHAR iByte ); // 待写入的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365mSetA15_A8( // 设置高地址,即设置A15-A8的输出
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
UCHAR iA15_A8 ); // 位7-位0对应A15-A8的输出,1为高电平,0为低电平
|
|
|
|
|
|
BOOL WINAPI CH365mReadI2C( // 从I2C接口读取一个字节数据
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
UCHAR iDevice, // 低7位指定I2C设备地址
|
|
UCHAR iAddr, // 指定数据单元的地址
|
|
PUCHAR oByte ); // 指向一个字节单元,用于保存读取的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365mWriteI2C( // 向I2C接口写入一个字节数据
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
UCHAR iDevice, // 低7位指定I2C设备地址
|
|
UCHAR iAddr, // 指定数据单元的地址
|
|
UCHAR iByte ); // 待写入的字节数据
|
|
|
|
|
|
BOOL WINAPI CH365DelayUS( // 延时指定微秒
|
|
ULONG iDelay ); // 指定要延时的微秒数,如果延时小于10则误差较大
|
|
|
|
|
|
BOOL WINAPI CH365mAccessBlock( // 读取或者写入数据块
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
ULONG iAccessMode, // 参考下面的说明
|
|
PVOID iAddr, // 指定I/O端口或者存储器的地址
|
|
PVOID ioBuffer, // 指向输入或者输出的缓冲区
|
|
ULONG iLength ); // 数据块长度,也就是读取或者写入的字节数,长度不超过32KB
|
|
// iAccessMode 定义如下
|
|
// #define mFuncReadIoByte 0x00000010 // 读取输入输出端口,在同一个端口地址以字节为单位连续读取,最大长度32KB
|
|
// #define mFuncReadIoWord 0x00000011 // 读取输入输出端口,在同一个端口地址以字为单位连续读取,最大长度32KB
|
|
// #define mFuncReadIoDword 0x00000012 // 读取输入输出端口,在同一个端口地址以双字为单位连续读取,最大长度32KB
|
|
// #define mFuncReadIoBlock 0x00000013 // 读取输入输出端口,每读取一个字节,端口地址加一,最大长度240B(从偏移地址00H读到EFH)
|
|
// #define mFuncWriteIoByte 0x00000014 // 写入输入输出端口,在同一个端口地址以字节为单位连续写入,最大长度32KB
|
|
// #define mFuncWriteIoWord 0x00000015 // 写入输入输出端口,在同一个端口地址以字为单位连续写入,最大长度32KB
|
|
// #define mFuncWriteIoDword 0x00000016 // 写入输入输出端口,在同一个端口地址以双字为单位连续写入,最大长度32KB
|
|
// #define mFuncWriteIoBlock 0x00000017 // 写入输入输出端口,每写入一个字节,端口地址加一,最大长度240B(从偏移地址00H写到EFH)
|
|
// #define mFuncReadMemByte 0x00000018 // 读取存储器/寄存器,以字节为单位连续读,每读取一个字节,地址加一,最大长度32KB(从偏移地址0000H读到7FFFH)
|
|
// #define mFuncReadMemWord 0x00000019 // 读取存储器/寄存器,以字为单位连续读,每读取一个字,地址加二,最大长度32KB(从偏移地址0000H读到7FFFH)
|
|
// #define mFuncReadMemDword 0x0000001a // 读取存储器/寄存器,以双字为单位连续读,每读取一个字节,地址加四,最大长度32KB(从偏移地址0000H读到7FFFH)
|
|
// #define mFuncWriteMemByte 0x0000001c // 写入存储器/寄存器,以字节为单位连续写,每读取一个字节,地址加一,最大长度32KB(从偏移地址0000H写到7FFFH)
|
|
// #define mFuncWriteMemWord 0x0000001d // 写入存储器/寄存器,以字为单位连续写,每读取一个字,地址加二,最大长度32KB(从偏移地址0000H写到7FFFH)
|
|
// #define mFuncWriteMemDword 0x0000001e // 写入存储器/寄存器,以双字为单位连续写,每读取一个双字,地址加四,最大长度32KB(从偏移地址0000H写到7FFFH)
|
|
// 其它方式不支持,上述定义在文件CH365DLL.H中
|
|
|
|
|
|
BOOL WINAPI CH365mSetExclusive( // 设置独占使用当前CH365设备
|
|
ULONG iIndex, // 指定CH365设备序号
|
|
ULONG iExclusive ); // 为0则设备可以共享使用,非0则独占使用
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // _CH365_DLL_H
|