WIZnet Developer Forum

w5200 수신 체크를 폴링으로 할 경우 최소 시간 간격?

안녕하세요? 바로전에 W5200 수신 인터럽트 관련하여 문의 드렸는데요
레지스터 이것저것 설정하여 테스트를 해보았는데도
nINT 핀이 Low 떨어지게 만드는게 안되더라구요 … 예제 소스들을 봐도 인터럽트 레지스터를 폴링으로 체크하는
것 뿐인 것 같더라구요…
(이건 답글 기다리겠습니다 분명 방법이 있겠지요…)

그래서 일단 급한대로 폴링으로 체크하되 체크하는 루틴을 타이머 인터럽트에서 수행하도록 하였습니다.
현재 50usec 타이머인터럽트에서

           if ( (len = getSn_RX_RSR(SOCK_SNMP))>0 )
	{
		request_msg.len= UDPRecv(SOCK_SNMP, (uint8 *)&request_msg.buffer[0], len, svr_addr, &svr_port);
	}
	else
	{
		request_msg.len = 0;
	}
	if (request_msg.len > 0)
	{
		dumpCode("\r\n[Request]\r\n", "\r\n", request_msg.buffer, request_msg.len);

		request_msg.index = 0;
		response_msg.index = 0;
		errorStatus = errorIndex = 0;

		if (parseSNMPMessage() != -1)
		{

			UDPSend(SOCK_SNMP, response_msg.buffer, response_msg.index, svr_addr, svr_port);
	
		}

		dumpCode("\r\n[Response]\r\n", "\r\n", response_msg.buffer, response_msg.index);
	}

이 구문을 수행하여 체크하도록 하였는데요…

일단 MIB Browser 에서 명령 보내고 수신되는 건 확인이 됩니다. 짧은 메세지구요…
이게 구조를 잘 모르겠어서 그러는데
이렇게 50usec로 체크할 경우 데이터를 놓치는 현상이 발생할 수 있을까요?
없다면 이대로 사용해도 괜찮겠지만 만약 가능성이 있다면 위 문의글처럼 인터럽트로 사용을 해야할 것 같아서요…

일단 W5200 에서 한번 받아 데이터를 갖고 있다가
Main MCU(ST IC)에서 가져오는 것이니 W5200 수신 버퍼만 넘치지 않는다면 가능할 것 같은데요…

50usec 로 체크할 경우 문제가 있을까요?
있다면 어느정도 시간이면 가능할까요 ??

답변 부탁드립니다. 위의 인터럽트 문의글도 꼭 !! 답변 부탁드려요 …감사합니다!

인터럽트 방식이 MCU의 자원을 아껴쓸 수 있다는 것은 사실이지만

아무리 인터럽트 방식이라 하더라도 정해진 시간에 주어진 일을 못한다면 실패인거죠.

예를 들면 인터럽트 이벤트로 주어진 일을 하던 도중 또 인터럽트가 걸리는 상황에서는 데이터처리라던지 일을 제대로 못할 가능성이 많습니다.

그리고 수신체크를 폴링으로 할 경우 최소 시간 간격은 MCU에서 정할 수는 없는 일입니다. 왜냐면 주는 쪽 마음이기 때문입니다.

만약 naemaum4u님이 코딩한 것처럼 데이터를 주는 쪽에서 50usec로 일정하게 데이터를 주고 MCU는 50usec 안에 일처리를 충분히 할 수 있다면

전혀 문제가 안되겠죠. 하지만 50usec마다 데이터를 주는데 데이터 처리에 100usec가 걸리면 언젠가 버퍼는 넘칠 것이고 데이터는 사라지겠죠.

인터럽트방식을 쓰더라도 똑같습니다.

그리고 W5200의 인터럽트는 데이터 시트를 보시는 것이 더욱 도움이 될 것 같습니다. 수신하는 경우에만 인터럽트를 발생시킨다던지 하는 상세한

설명이 나와 있으니까요.

^^ 그럼 도움이 되셨으면 좋겠네요.

수고하세요.

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.