// 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