nINT is not activated on event


I work with WIZ820io board and SAM3S uC to have an ethernet connection to my device. To be clear: communication works fine, but I want to achieve an event driven mode working not to poll W5200 in any loop.

So I noticed one problem: nINT pin remains high on an interrupt of a configured socket event: tcp connect, data received, disconnect.

Everything in registers seems to be set correctly (mask), since I read IR2 and Sn_IR registers in while(true) and specific bits are being set correctly (on connect, data reception and disconnect). All lines SPI and nINT I connected to DAQ Logic analyzer and everything is ok besides nINT line which stays high (nINT was measured directly on WIZ802io board to eliminate connectors problem).

GPIO interrupt in uC is configured correctly (input, pull-up), when I short that pin to GND application jumps to the interrupt handler.

My interrupt masks configuration (socket 1):

setSn_IMR(1, (uint8_t) (Sn_IR_CON | Sn_IR_RECV | Sn_IR_DISCON));

Reading in while, which confirms correct bit settings:

SOCKET s = 1;
	uint8_t val = getIR2();
	if(IR_SOCK(s) == val)
		val = getSn_IR(s);			//app gets here on event
		setSn_IR(s, 0);				//clear intterrupt		
	loopback_tcps(s, 5000);

Am I missing something or it is just hardware problem (I don’t have a second board to compare)?



I found a similar topic: … rd=&SF_AO=

If the topic mentioned above is true, that’s unfair to describe a functionality like that in a datasheet and then answer at the forum that is not working.


Hi, pulamati.

You can handle interrupt routine.

The answer has a mistake.

You mean interrupt routine never have occurred??? or just one??

You should clear all Sn_IR by set 1 not 0 then INTn is set as high.

I think since interrupt occurred, another interrupt doesn’t occur because you don’t clear Sn_IR.

Best regards.