📄 ch365modl.bas
字号:
Attribute VB_Name = "Module1"
Option Explicit
' PCI总线接口芯片CH365的应用层接口库 V1.5
Type mPCI_CONFIG ' 定义PCI配置空间数据结构
mPcVendorId As Integer ' 00H 供应商标识
mPcDeviceId As Integer ' 02H 设备标识
mPcCommandReg As Integer ' 04H 命令寄存器
mPcStatusReg As Integer ' 06H 状态寄存器
mPcRevisionId As Byte ' 08H 修改标识
mPcProgramIf As Byte ' 09H 寄存器级编程接口
mPcSubClass As Byte ' 0AH 子类代码
mPcBaseClass As Byte ' 0BH 基本分类代码
mPcCacheLine As Byte ' 0CH 缓存行长度
mPcLatenTimer As Byte ' 0DH 延迟计数器
mPcHeaderType As Byte ' 0EH 头标类型
mPcBistReg As Byte ' 0FH 内含自测试寄存器
mPcBaseAddr0 As Long ' 10H 基址寄存器0
mPcBaseAddr1 As Long ' 14H 基址寄存器1
mPcBaseAddr2 As Long ' 18H 基址寄存器2
mPcBaseAddr3 As Long ' 1CH 基址寄存器3
mPcBaseAddr4 As Long ' 20H 基址寄存器4
mPcBaseAddr5 As Long ' 24H 基址寄存器5
mPcCardCis As Long ' 28H
mPcSubSysVen As Integer ' 2CH 子系统供应商标识
mPcSubSysDev As Integer ' 2EH 子系统设备标识
mPcExpansRom As Long ' 30H 扩展ROM基址寄存器
mPcCapPtr As Byte ' 34H
mPcReserved1(3) As Byte ' 35H
mPcReserved2 As Long ' 38H
mPcInterLine As Byte ' 3CH 中断线寄存器
mPcInterPin As Byte ' 3DH 中断引脚寄存器
mPcMinGrant As Byte ' 3EH
mPcMaxLatency As Byte ' 3FH
End Type
Type mPCI_EXP_ROM ' PCI扩展ROM的数据结构
mPerRomSig(4) As Byte ' 00H PCI扩展ROM签名字符串'PCIR'
mPerVendorId As Integer ' 04H 供应商标识
mPerDeviceId As Integer ' 06H 设备标识
mPerVpdPtr As Integer ' 08H 重要产品数据指针
mPerStrucLen As Integer ' 0AH PCI扩展ROM数据结构的长度
mPerRevision As Byte ' 0CH PCI扩展ROM数据结构的修改版本
mPerProgramIf As Byte ' 0DH 寄存器级编程接口
mPerSubClass As Byte ' 0EH 子类代码
mPerBaseClass As Byte ' 0FH 基本分类代码
mPerImageLen As Integer ' 10H 映像长度
mPerImageRev As Integer ' 12H 映像中代码/数据的修改版本
mPerCodeType As Byte ' 14H 代码类型
mPerIndicator As Byte ' 15H 映像指示标志
mPerReserved As Integer ' 16H
End Type
Type mCH365_CFG_REG ' CH365芯片的配置寄存器
mCh365CfgPci As mPCI_CONFIG ' 00H-3FH,共64字节为标准PCI配置空间
mCh365CfgCtrl As Byte ' 40H 芯片控制寄存器,高5位只读
mCh365CfgDin As Byte ' 41H 8位总线输入端口,只读
mCh365CfgState As Byte ' 42H 芯片状态寄存器,只读
mCh365CfgResv As Byte ' 43H
End Type
Type mCH365_IO_REG ' CH365芯片的I/O空间
mCh365IoPort(&HF0) As Byte ' 00H-EFH,共240字节为标准的I/O端口
' 以字或者以字节为单位进行存取
mCh365MemAddr As Integer ' F0H 存储器接口: A15-A0地址设定寄存器
mCh365IoResv2 As Byte ' F2H
mCh365MemData As Byte ' F3H 存储器接口: 存储器数据存取寄存器
mCh365I2cData As Byte ' F4H I2C串行接口: I2C数据存取寄存器
mCh365I2cCtrl As Byte ' F5H I2C串行接口: I2C控制和状态寄存器
mCh365I2cAddr As Byte ' F6H I2C串行接口: I2C地址设定寄存器
mCh365I2cDev As Byte ' F7H I2C串行接口: I2C设备地址和命令寄存器
mCh365IoCtrl As Byte ' F8H 芯片控制寄存器,高5位只读
mCh365IoBuf As Byte ' F9H 本地数据输入缓存寄存器
mCh365Speed As Byte ' FAH 芯片速度控制寄存器
mCh365IoResv3 As Byte ' FBH
mCh365IoTime As Byte ' FCH 硬件循环计数寄存器
mCh365IoResv4(3) As Byte ' FDH
End Type
Type mCH365_MEM_REG ' CH365芯片的存储器空间
mCh365MemPort(0 To &H7FFF) As Byte ' 0000H-7FFFH,共32768字节为标准的存储器单元
End Type
Type mWIN32_COMMAND ' 定义WIN32命令接口结构
mFunction As Long ' 输入时指定功能代码
mAddress As Variant ' 起始地址,返回地址
mLength As Long ' 存取长度,返回后续数据的长度
mBuffer(4) As Long ' 数据缓冲区,长度为0至32KB
End Type
Declare Function CH365OpenDevice Lib "CH365DLL.DLL" (ByVal iEnableMemory As Boolean, ByVal iEnableInterrupt As Boolean) As Long
' CH365OpenDevice 打开CH365设备,返回句柄,出错则无效
' iEnableMemory 是否需要支持存储器
' iEnableInterrupt 是否需要支持中断
Declare Function CH365CloseDevice Lib "CH365DLL.DLL" () ' 关闭CH365设备
Declare Function CH365GetVersion Lib "CH365DLL.DLL" () ' 获得DLL版本号,返回版本号
Declare Function CH365DriverCommand Lib "CH365DLL.DLL" (ByRef ioCommand As mWIN32_COMMAND) As Long ' 直接传递命令给驱动程序,出错则返回0,否则返回数据长度
' 该程序在调用后返回数据长度,并且仍然返回命令结构,如果是读操作,则数据返回在命令结构中,
' 返回的数据长度在操作失败时为0,操作成功时为整个命令结构的长度,例如读一个字节,则返回mWIN32_COMMAND_HEAD+1,
' 命令结构在调用前,分别提供:命令功能代码,起始地址(可选),存取数据的长度(可选),
' 命令结构在调用后,分别返回:操作状态代码,返回的基址(可选),后续数据的长度(可选),
' 操作状态代码是由WINDOWS定义的代码,可以参考NTSTATUS.H,
' 返回的基址只适用于下列命令:获取I/O基址,获取存储器基址,获取中断号,对于其它命令则保持输入时的起始地址
' 后续数据的长度是指读操作返回的数据长度,数据存放在随后的缓冲区中,对于写操作一般为0
Declare Function CH365GetDrvVersion Lib "CH365DLL.DLL" () As Long ' 获得驱动程序版本号,返回版本号,出错则返回0
Declare Function CH365GetIoBaseAddr Lib "CH365DLL.DLL" (ByRef oIoBaseAddr As mCH365_IO_REG) As Boolean
' CH365GetIoBaseAddr 获取I/O端口的基址
' oIoBaseAddr 保存I/O端口基址的单元地址
Declare Function CH365SetIoBaseAddr Lib "CH365DLL.DLL" (ByVal iIoBaseAddr As mCH365_IO_REG) As Boolean
' CH365SetIoBaseAddr 设定I/O端口的基址
' iIoBaseAddr 指定I/O端口基址
Declare Function CH365GetMemBaseAddr Lib "CH365DLL.DLL" (ByRef oMemBaseAddr As mCH365_MEM_REG) As Boolean
' CH365GetMemBaseAddr 获取存储器的基址
' oMemBaseAddr 保存存储器基址的单元地址
Declare Function CH365SetMemBaseAddr Lib "CH365DLL.DLL" (ByVal iMemBaseAddr As mCH365_MEM_REG) As Boolean
' CH365SetMemBaseAddr 设定存储器的基址
' iMemBaseAddr 指定存储器基址,为0则关闭存储器,为-1则自动设定
Declare Function CH365GetIntLine Lib "CH365DLL.DLL" (ByRef oIntLine As Long) As Boolean
' CH365GetIntLine 获取中断号
' oIntLine 保存中断号的单元地址
Declare Function CH365SetIntLine Lib "CH365DLL.DLL" (ByVal iIntLine As Long) As Boolean
' CH365SetIntLine 设定中断号
' iIntLine 指定中断号,为0则关闭中断,为-1则自动检测并设定
Declare Function CH365WaitInterrupt Lib "CH365DLL.DLL" () As Boolean ' 等待中断事件
Declare Function CH365AbortWaitInt Lib "CH365DLL.DLL" () As Boolean ' 放弃等待中断
Declare Function CH365SetIntRoutine Lib "CH365DLL.DLL" (ByVal iIntRoutine As Long) As Boolean
' CH365SetIntRoutine 设定中断服务程序
' mPCH365_INT_ROUTINE iIntRoutine 指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序
Declare Function CH365ReadIntCommand Lib "CH365DLL.DLL" (ByRef oCommand As mWIN32_COMMAND, ByVal iCmdIndex As Long) As Boolean
' CH365ReadIntCommand 读取中断命令缓冲区
' oCommand 指向一个足够大的缓冲区,用于保存读取的命令结构
' iCmdIndex 中断命令序号,为1或者2
Declare Function CH365WriteIntCommand Lib "CH365DLL.DLL" (ByRef iCommand As mWIN32_COMMAND, ByVal iCmdIndex As Long) As Boolean
' CH365WriteIntCommand 写入中断命令缓冲区
' iCommand 指向作为中断命令的命令结构
' iCmdIndex 中断命令序号,为1或者2
Declare Function CH365ReadIoByte Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByRef oByte As Byte) As Boolean
' CH365ReadIoByte 从I/O端口读取一个字节
' iAddr 指定I/O端口的地址
' oByte 指向一个字节单元,用于保存读取的字节数据
Declare Function CH365ReadIoWord Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByRef oWord As Integer) As Boolean
' CH365ReadIoWord 从I/O端口读取一个字
' iAddr 指定I/O端口的地址
' oWord 指向一个字单元,用于保存读取的字数据
Declare Function CH365ReadIoDword Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByRef oDword As Long) As Boolean
' CH365ReadIoDword 从I/O端口读取一个双字
' iAddr 指定I/O端口的地址
' oDword 指向一个双字单元,用于保存读取的双字数据
Declare Function CH365WriteIoByte Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByVal iByte As Byte) As Boolean
'CH365WriteIoByte 向I/O端口写入一个字节
' iAddr 指定I/O端口的地址
' iByte 待写入的字节数据
Declare Function CH365WriteIoWord Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByVal iWord As Integer) As Boolean
'CH365WriteIoWord 向I/O端口写入一个字
' iAddr 指定I/O端口的地址
' iWord 待写入的字数据
Declare Function CH365WriteIoDword Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByVal iDword As Long) As Boolean
' CH365WriteIoDword 向I/O端口写入一个双字
' iAddr 指定I/O端口的地址
' iDword 待写入的双字数据
Declare Function CH365ReadMemByte Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByRef oByte As Byte) As Boolean
' CH365ReadMemByte 从存储器读取一个字节
' iAddr 指定存储器的地址,虚拟地址
' oByte 指向一个字节单元,用于保存读取的字节数据
Declare Function CH365ReadMemDword Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByRef oDword As Long) As Boolean
' CH365ReadMemDword 从存储器读取一个双字
' iAddr 指定存储器的地址,虚拟地址
' oDword 指向一个双字单元,用于保存读取的双字数据
Declare Function CH365WriteMemByte Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByVal iByte As Byte) As Boolean
' CH365WriteMemByte 向存储器写入一个字节
' iAddr 指定存储器的地址,虚拟地址
' iByte 待写入的字节数据
Declare Function CH365WriteMemDword Lib "CH365DLL.DLL" (ByVal iAddr As Any, ByVal iDword As Long) As Boolean
' CH365WriteMemDword 向存储器写入一个双字
' iAddr 指定存储器的地址,虚拟地址
' iDword 待写入的双字数据
Declare Function CH365ReadConfig Lib "CH365DLL.DLL" (ByVal iOffset As Any, ByRef oByte As Byte) As Boolean
' CH365ReadConfig 从配置空间读取一个字节数据
' iOffset 指定偏移地址
' oByte 指向一个字节单元,用于保存读取的字节数据
Declare Function CH365WriteConfig Lib "CH365DLL.DLL" (ByVal iOffset As Any, ByVal iByte As Byte) As Boolean
' CH365WriteConfig 向配置空间写入一个字节数据
' iOffset 指定偏移地址
' iByte 待写入的字节数据
Declare Function CH365SetA15_A8 Lib "CH365DLL.DLL" (ByVal iA15_A8 As Byte) As Boolean
' CH365SetA15_A8 设置高地址,即设置A15-A8的输出
' iA15_A8 位7-位0对应A15-A8的输出,1为高电平,0为低电平
Declare Function CH365ReadI2C Lib "CH365DLL.DLL" (ByVal iDevice As Byte, ByVal iAddr As Byte, ByRef oByte As Byte) As Boolean
' CH365ReadI2C 从I2C接口读取一个字节数据
' iDevice 低7位指定I2C设备地址
' iAddr 指定数据单元的地址
' oByte 指向一个字节单元,用于保存读取的字节数据
Declare Function CH365WriteI2C Lib "CH365DLL.DLL" (ByVal iDevice As Byte, ByVal iAddr As Byte, ByVal oByte As Byte) As Boolean
' CH365WriteI2C 向I2C接口写入一个字节数据
' iDevice 低7位指定I2C设备地址
' iAddr 指定数据单元的地址
' iByte 待写入的字节数据
Declare Function CH365mOpenDevice Lib "CH365DLL.DLL" (ByVal iIndex As Long, ByVal iEnableMemory As Boolean, ByVal iEnableInterrupt As Boolean) As Long
' CH365mOpenDevice 打开CH365设备,返回句柄,出错则无效
' iIndex 指定CH365设备序号,0对应第一个设备
' iEnableMemory 是否需要支持存储器
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -