CH341DLL.BAS INT#(中断)怎么调用

CH341DLL.BAS,为VB6.0开发所使用的CH341基础库,从DLL文件看,中断入口函数为:CH341SetIntRoutine。
但整个函数的调用并没有详细说明。
哪位大侠有用过此功能呢?
INT#是否得先初始化,然后怎么调用?
请指教,谢谢!

您好,使用此中断功能时,仅需要应用程序注册中断服务函数即可。无需额外初始化动作,注册成功后,INT有低电平有效信号时,会自动触发中断服务函数。


我是用VB6.0进行开发,根据DLL文件描述:

Declare Function CH341SetIntRoutine Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iIntRoutine As Long) As Boolean

'设定中断服务程序

' 指定CH341设备序号

'指定中断服务程序,为NULL则取消中断服务,否则在中断时调用该程序

'  sub  mPCH341_INT_ROUTINE  (              中断服务程序

'             ULONG           iStatus )     中断状态数据,见下行

' 位7-位0对应CH341的D7-D0引脚

' 位8对应CH341的ERR#引脚, 位9对应CH341的PEMP引脚, 位10对应CH341的INT#引脚, 位11对应CH341的SLCT引脚

我只知这是一个中断路由函数,但上述的中断服务程序与这路由函数之前怎么调用,我想不出来。
可以举例说明吗?谢谢!

另外,从规格书描述,INT#是上升沿有效,不是低电平有效,能否帮忙确认下,谢谢!


我修改了程序,目前只要INT#引脚有电平变化,都会进入中断。
但这与规格书描述不符合,不知问题在哪?
另外,进入中断后,怎么确认是哪个信号引起的中断呢?


您好,关于如上问题,INT#脚使用不依赖于其他硬件信号,中断触发仅需要给INT#脚有效的上升沿信号即可。

关于中断状态的说明,是芯片额外支持中断到来的时候主动上报一次有关IO口的电平状态。(该状态可用可不用) 



CH341DLL.BAS看,中断服务程序感觉不像VB6.0的语法,而规格书的的描述看,也不像VB6.0

image.png

我现在想不出用VB6.0怎么编写中断服务函数,能否给力点,直接给个VB6.0的中断服务程序案例,非常感谢!


您好,可联系我司技术人员沟通下使用细节,联系方式已私信。


谢谢!

现描述下我的应用及问题(使用VB6.0开发平台,DLL文件为:CH341DLL.BAS):

1) INT#作为外部触发信号,当来一个上升沿时触发,进入中断服务程序。

    这个中断服务程序的入口从DLL文件看是CH341SetIntRoutine。

   目前我调用了这个函数,可以进入中断,但不管是上升沿或下降沿,都可进入中断。

   但进入中断后,我无法判定是上升沿进入或下降沿进入,要怎么判断呢?

2)在中断服务程序中,我采用CH341GetStatus获取状态,但这个状态与规格书描述的好像不大一样。

   在INT#接地时,读出来的数据为 8449023,而INT#悬空(有内部上拉),读出来的值为08450047。

   根据规格书描述,INT#对应的是bit11,但上述两个数据的bit11都为0,即一样。

3)假设我不用CH341GetStatus获取状态,改用CH341ReadInter获取中断状态,则读出来的数据又不一样。

   当INT#接地时,读出来的数据为3071,当INT#悬空(有内部上拉),读出来的值为4095,但这两个数据的bit11也一样,都  

  为0.

4)CH341GetStatus与CH341ReadInter在使用上有什么差异呢

以上烦请帮忙解答,谢谢!



您好,

如沟通,关于如上问题说明如下:

1、芯片仅支持上升沿触发中断,当注册中断服务函数后,中断事件来临会自动调用中断服务函数,并且中断触发时会返回iStatus状态。此变量中可以直接读取芯片的IO口电平状态(1为高电平,0为低电平);

2、使用CH341GetStatus、CH341ReadInter、CH341GetInput等主动获取的GPIO状态和中断服务函数返回的iStatus均可用于指示IO口输入电平状态,其区别是:CH341GetStatus和CH341GetInput获取GPIO状态支持的IO更多,其余2种仅低12位可用(BIT0-BIT11);

3、已提供完整VB测试例程给您,可同比测试验证;


谢谢支持!
非常给力,已经大概怎么中断怎么进入,状态怎么获取了。
非常感谢1


只有登录才能回复,可以选择微信账号登录