我使用C#调用DLL函数,使用CH341GetStatus可以读出数据,操作引脚电平可以看到数据变化,但使用CH341SetOutput修改数据时却始终无效,通常返回TRUE有时返回FALSE但芯片引脚的电平始终没有变化,再使用CH341GetStatus读出数据还和第一次读出的一样。CH341Set_D5_D0也同样无效。 请问这种问题应该如何解决?
//enable // 位0为1说明iSetDataOut的位15-位8有效,否则忽略 // 位1为1说明iSetDirOut的位15-位8有效,否则忽略 // 位2为1说明iSetDataOut的7-位0有效,否则忽略 // 位3为1说明iSetDirOut的位7-位0有效,否则忽略 // 位4为1说明iSetDataOut的位23-位16有效,否则忽略
//set_dir_out // 设置I/O方向,某位清0则对应引脚为输入,某位置1则对应引脚为输出,并口方式下默认值为0x000FC000,参考下面的位说明
//set_data_out // 输出数据,如果I/O方向为输出,那么某位清0时对应引脚输出低电平,某位置1时对应引脚输出高电平,参考下面的位说明
// 位7-位0对应CH341的D7-D0引脚 // 位8对应CH341的ERR#引脚, 位9对应CH341的PEMP引脚, 位10对应CH341的INT#引脚, 位11对应CH341的SLCT引脚 // 位13对应CH341的WAIT#引脚, 位14对应CH341的DATAS#/READ#引脚,位15对应CH341的ADDRS#/ADDR/ALE引脚 // 以下引脚只能输出,不考虑I/O方向: 位16对应CH341的RESET#引脚, 位17对应CH341的WRITE#引脚, 位18对应CH341的SCL引脚, 位29对应CH341的SDA引脚
void set_output() //已经测试 { unsigned long enable,set_dir_out,set_data_out; enable = 0x0000000C; //数据/方向位7-位0有效 set_dir_out = 0x000FC0FF; //D0-D7设置为输出 set_data_out = 0x000FC000; //D0-D7输出为低电平 if(CH341SetOutput(index_app, enable, set_dir_out, set_data_out)) { printf("CH341SetOutput : success\n"); } else { printf("CH341SetOutput : failed\n"); } sel_command(); }