CH395Q,中断脚INT#及读中断状态全00异常问题

????CH395CMDReset(); //复位

? ? rt_thread_mdelay(200);

? ? tmp8 = CH395CMDCheckExist(0x57); //测试命令----正常0xA8


? ? tmp8 = CH395CMDGetVer(); //版本号----0x47


? ? tmp8 = CH395CMDInitCH395(); //初始化----0x00

? ? rt_thread_mdelay(200);

? ? //-------------------------------------------------

? ? while(1)

? ? {

? ? ? ? if(CH395CMDGetPHYStatus() == PHY_DISCONN) rt_thread_mdelay(200);

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? break; //---正常通过,中断脚正常发生

? ? ? ? }

? ? }

? ? rt_thread_mdelay(1000);

? ? //-------------------------------------------------


????CH395DHCPEnable(1); //DHCP使能,------执行完这里就不正常了,中断脚瞬间就变低了???

=================================================================


问题描述:

上电后,前面初始都正常,到DHCP使能时,中断脚瞬间就变低了,读中断状态为00,且中断脚不会变高,导致后面各种操作无法进行。

疑问与求助:

CH395Q(0x47)INT#脚会误报中断吗?就算误报中断,读出的状态也不应该是全00,就算是全00INT#中断脚也应该置高的。希望厂家大神给予协助解决。如何才能正常中断,如何正常读出中断状态,如何才能让INT#正常拉高?

您好,对于您的问题,395Q的47版本并没有产生INT#脚中断误报的情况,在使用CMD_GET_GLOB_INT_STATUS命令后395会将INT#引脚置为高电平,可以检查一下是否是硬件原因导致INT#脚异常拉低恢复不了。


已有同事和您跟进解决问题,后续有其他问题也可通过邮箱交流(lq@wch.cn)


误中断的问题原因找到了,是和另一个硬件中断源冲突,错开就可以中断了


我换了49版本的,发现另外几个UDP接收中断问题:

a、接收包时INT脚会出现三次中断信号,第一次在我处理其间(命令:0x29,0x30,0x3B,0x3C,就是读全局中断状态,读Socket中断状态,读接收长度,再读取数据,用时220uS)数据收接正常,但在这220uS内会多出两次中断信号来,INT还会变高,不知是啥中断?再去执行中断程序时已经滞后了,再读出中断状态分别为(全局中断状态10+Socket中断字00)和(全局中断字00),可能不是当时中断时的状态了

b、如果有数据接收中断发生,不去及时取出数据0x3C,INT#会不停地发出中断信号,不是CH395Q收到一个包触发一次中断吗?

c、目地IP设成192.168.1.255广播IP,能广播但就接收不到数据了(无中断信号)?设成255.255.255.255广播IP或对方单播IP就可以收到。

d、目地IP设成localIP192.168.1.96,收不到其它非96如192.168.1.100的电脑的广播数据了(电脑dstIP=255.255.255.255或192.168.1.255时)


您好,对于您的问题

1.中断在程序中会不断的刷新,在spi接口读的时候,同时会刷新一次INT引脚,但是中断码不会多报,不影响正常使用。

2.如果不及时取出数据,是会一直报接收缓冲区非空的中断。

3.广播需要设置成目的ip为255.255.255.255。

4.可以采用两个socket,一个作为广播使用,一个作为单播使用,做广播的socket负责接收电脑的广播数据并将对端的ip、端口等信息给单播的socket进行通信。

后续有其他问题可以邮箱联系(lq@wch.cn)


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