---
title: "W5300 인터럽트 관련 질문 입니다(두번째..ㅜ)"
url: "https://maker.wiznet.io/forum/13852"
markdown_url: "https://maker.wiznet.io/forum/13852/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "Heerack Ryu"
created: "2020-05-25T08:23:40+09:00"
last_activity: "2020-05-29T01:46:28+09:00"
language: "ko"
views: 764
replies: 2
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# W5300 인터럽트 관련 질문 입니다(두번째..ㅜ)

## Question

Asked by Heerack Ryu on 2020-05-25 in Ethernet Chips.

지난번에 공통 레지스터와 소켓 레지스터의 혼동으로 인터럽트가 안걸려서 삽질 했던 사람입니다 ㅎㅎ;

이번 질문은

제공해주신 프로그램

Socket.c(h), w5300.c(h)에 함수가 잘 만들어져 있어서 굉장히 잘 쓰고 있습니다.

그런데

Socket.c에 " int32_t send(uint8_t sn, uint8_t * buf, uint16_t len) " 함수 경우

Sn_IMR 레지스터에 Sn_IR_SENDOK Bit를 1로 Set하지 않으면 한번만 동작합니다.

send() 함수를 살펴본 결과

![bbaa](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/b/b7d4ba1fb63d1d804913e01c9b2874a0ef7965d4.png)

위의 조건 때문에 최초 한번만 실행되는거 같습니다.

**저는 제공된 프로그램을 수정하지 않고**

계속 send 함수가 정상적으로 동작시키고 싶은데…

아직까지 좋은 아이디어가 안떠오릅니다…

조언 부탁드립니다.

## Replies

### Reply 1 by bangbh, 2020-05-27

Sn_IMR은 인터럽트 마스크입니다. 초기 인터럽트 설정후 변경할 필요가 없습니다.
이 후 해당 인터럽트가 발생시 Sn_IR로 인터럽트 종류 확인이 가능한데 인터럽트 확인 후 해당 비트를 클리어해주시면 됩니다.
간단하게 설명해드리면

1. 초기 설정

- SIMR 설정(인터럽트를 발생시킬 소켓 설정), Sn_IMR 설정(인터럽트 종류 설정)

1. 인터럽트 발생시

- SIR로 인터럽트 발생 소켓 번호 확인 & Sn_IR로 인터럽트 종류 확인

- 인터럽트 시퀀스 수행

1. 인터럽트 시퀀스 종료후

- SIR 및 Sn_IR 클리어

감사합니다.

### Reply 2 by Heerack Ryu, 2020-05-29 (in reply to reply 1)

감사합니다. 알려주신 방법으로 시험 진행해보겠습니다

(- -) (_ _)

---

Source: https://maker.wiznet.io/forum/13852
