회원가입 ID/PW 찾기

하드웨어 설계에 관련한 공개 강좌를 게재하는 공간입니다.
운영진에 의해 강좌글은 편집되며, 공익을 위한 게시글은 '하드웨어 강좌'란으로 이동될 수 있습니다.

콘텐츠 수 7

제6장. 인터럽트

8051 어셈블리 강좌(by 허인교수님) 구매수 0 조회 수 3910 2012.04.07 19:16:13
판매자 아크마 판매 납포인트 무료 평점 1.0점 / 총 1명 참여

6. 인터럽트

 

 

1. 인터럽트 란?

ㅇ 인터럽트란, 주프로그램 수행 중에 주프로그램을 일시적으로 중지시키는 조건이나 사건의 발생을 말함

 

ㅇ 인터럽트는 주프로그램에서 비동기적으로 발생하는 event(사건)에 대한 반응

   주프로그램은 언제 인터럽트가 발생할지 알 수 없다.

 

ㅇ 인터럽트를 처리하는 프로그램을

  - 인터럽트 서비스 루틴(interrupt service routine ; ISR)

    또는 인터럽트 핸들러(interrupt handler)

  - ISR은 인터럽트에 대한 응답으로 수행한다.

 

ㅇ 인터럽트가 발생할 때 주프로그램은 일시적으로 수행을 정지하고 ISR로 분기

   , ISR이 실행되고 연산이 수행된 후,

      "인터럽트로부터 복귀(return from interrupt)" 명령으로 복귀

  

Main program

 Time 

 

(a) Program execution without interrupt

ISR

ISR

     

Main

 

Main

                                    

Main

 

(b) Program execution with interrupt

 

 

2. 8051 인터럽트의 구성

8051 5가지의 인터럽트 소스

  - 2개의 외부 인터럽트

  - 2개의 타이머 인터럽트

  - 시리얼 포트 인터럽트.

 

 

 

2.1 인터럽트의 가능과 불가능

ㅇ 인터럽트를 가능하게 하고 또는 불가능하게 하는 것은 IE(Interrupt Enable) 레지스터의 조절에 의해 결정

비트    심볼             기능 설명(1 = 가능, 0 = 불가능)

IE.7     EA       전역적 인터럽트 가능/불가능

IE.6     -         사용하지 않음

IE.5     ET2      타이머/카운터2 인터럽트 가능/불가능(8052)

IE.4     ES       시리얼 포트 인터럽트 가능/불가능

IE.3     ET1      타이머/카운터1 인터럽트 가능/불가능

IE.2     EX1      외부1 인터럽트 가능/불가능

IE.1     ET0      타이머/카운터0 인터럽트 가능/불가능

IE.0     EX0      외부0 인터럽트 가능/불가능

 

  - IE 레지스터는 비트 주소 가능한 레지스터이므로 해당 비트별로 인터럽트를 enable 하는 방법

        SETB ET1   ; 타이머/카운터1 인터럽트 가능 

        SETB EA    ; 전역적 인터럽트 가능 비트를 세트

  -  IE 레지스터 전체를 enable하는 방법

        MOV IE, #1001000B

 

2.2 인터럽트 우선순위

 

2개 이상의 인터럽트가 동시에 발생하거나 또는 한 인터럽트가 서비스 받고 있는 동안 다른 인터럽트가 발생했다면 인터럽트를 순서를 결정하는 방법은 2가지

 

ㅇ 프로그램에 의해 순서를 변경할 수 있는 인터럽트 우선순위(Interrupt Priority)

비트    심볼          기능 설명(1 = 높은 순위, 0 = 낮은 순위)

IP.7     -         사용하지 않음

IP.6     -         사용하지 않음

IP.5     PT2      타이머/카운터2 인터럽트에 대한 우선순위(8052)

IP.4     PS       시리얼 포트 인터럽트에 대한 우선순위

IP.3     PT1      타이머/카운터1 인터럽트에 대한 우선순위

IP.2     PX1      외부1 인터럽트에 대한 우선순위

IP.1     PT0      타이머/카운터0 인터럽트에 대한 우선순위

IP.0     PX0      외부0 인터럽트에 대한 우선순위

  - IP 레지스터는 비트 주소 지정이 가능한 레지스터

  - 우선순위를 변경하고자 하는 플래그를 1로 하면 된다.

  - 폴링 순서는 외부0, 타이머/카운터0, 외부1, 타이머/카운터1, 시리얼 포트, 타이머/카운터2 순으로 되어있으나 IP.41로 셋하면 시리얼 포트가 가장 우선순위가      높고, 이후 폴링 순서대로 된다.

 

2.3 폴링 순서(Polling Sequence)

ㅇ 폴링 순서는 외부0, 타이머/카운터0, 외부1, 타이머/카운터1, 시리얼 포트, 타이머/카운터2

 

ㅇ 만약 같은 우선순위를 가진 2개의 인터럽트가 동시에 발생한다면 고정된 폴링 순서가 어떤 것이 먼저 서비스를 받을지 결정한다.

clip_image001[4].jpg

b7

b6

b5

b4

b3

b2

b1

b0

 

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

ㅇ 타이머/카운터 제어 레지스터(TCON, Timer/counter CONtrol register) b3b0

  - 인터럽트에 해당되는 flag로써 

    IE0 : 인터럽트 에지0 플래그 (외부 인터럽트가 들어오면 하드웨어적으로 세트, 인터럽트 인지 후 자동 클리어)

    IT0 : 인터럽트 타입0 플래그 (외부 인터럽트를 활성화하는 하강에지/하위 레벨을 지정하는 플래그, 소프트웨어적으로 세트/클리어)

    IE1 : 인터럽트 에지1 플래그

    IT1 : 인터럽트 타입1 플래그

 

3. 인터럽트 처리

ㅇ 인터럽트가 발생하고 CPU에 의해서 받아들여졌을 때, 주프로그램은 중단된다. 그 때 다음의 행동들이 발생된다.

   현재 명령어의 수행을 끝마친다.

   스택에 PC를 저장한다.

   현재 인터럽트가 받아들여지지는 않는다. blocking 된다.

   ISR의 벡터 주소가 PC에 적재된다.

   ISR이 수행된다.

 

ㅇ 인터럽트가 받아들여졌을 때 PC에 적재되는 값을 인터럽트 벡터(인터럽트 엔트리 포인트)라 부른다. 인터럽트 벡터는 인터럽트 소스에 대한 ISR의 시작 주소이다.

인터럽트                  플래그           인터럽트 벡터 주소

시스템 리셋                RST                  0000H

외부0                      IE0                   0003H

타이머/카운터0             TF0                  000BH 

외부1                      IE1                   0013H

타이머/카운터1             TF1                  001BH

시리얼 포트                RI or TI              0023H

타이머/카운터2             TF2 or EXF2         002BH

 

ㅇ 각각의 인터럽트 벡터 사이에는 8바이트의 코드 공간이 있다. 따라서 ISR 8바이트 이내이면 아래와 같이 프로그램 할 수 있다.

 

            ORG 0000H     ; 리셋 엔트리 포인트

            JMP MAIN

            ORG 000BH     ; 타이머/카운터0 엔트리 포인트

    T0ISR:  ː              ; 타이머/카운터0 ISR 시작

             ː

            RETI           ; 주 프로그램으로 복귀

     MAIN: ː              ; 주 프로그램

             ː

          

ㅇ 만약 ISR 8바이트 이상이면 아래와 같이 프로그램을 하여야 한다.

 

            ORG 0000H     ; 리셋 엔트리 포인트

            JMP MAIN

            ORG 000BH     ; 타이머/카운터0 엔트리 포인트

            JMP T0ISR

            ORG 0030H     ; 인터럽트 벡터들을 지난 부분에서 시작

     MAIN: ː              ; 주 프로그램

            ː

     T0ISR: ː             ; 타이머/카운터0 ISR 시작

            ː

            RETI          ; 주 프로그램으로 복귀

    

ㅇ 외부0,1, 타이머/카운터0,1은 인터럽트가 발생하면 IE0, IE1, TF0, TF1은 하드웨어에 의해서 자동적으로 클리어 된다.

     시리얼 포트 및 타이머/카운터2는 자동적으로 클리어 되지 않으므로 소프트웨어적으로 클리어 시켜야 된다. 

 

 


위 내용은 청강대학교 허인 교수님의 고마운 공유정신 발휘로 마이컴박스에 게시 및 수정 업데이트됩니다.
허인 교수님 및 마이컴박스(개정부분)의 동의 없이 무단 복재 및 전재, 재배포 금지합니다.

모르는 것이 무엇인지 스스로 정리하고 질문하는 습관을 가집시다.
무성의/광범위하거나 직접 해보지 않고 올리는 질문은 서로를 피곤하게 합니다.
질문쪽지는 사절이오니 게시판에 글을 남겨주세요. 그래야 다같이 공유할 수 있으니까요.

첨부

profile
컴쟁이 2012.06.24 00:03
이미지가 잘안보이네요... 내용은 잘보고 갑니다...
profile
YuRiAl 2015.07.02 21:24
잘봤습니다.
profile
lmqwlkeqwwe 2016.08.26 15:42
감사합니다
profile
tenna 2016.12.14 15:54
감사합니다.
profile
11시22분 2019.04.17 15:16
감사합니다
search

8051 어셈블리 강좌(by 허인교수님) : (7)
■ 제3장. 명령어 2019-04-17 14:58
ETC
  • 매일 아침, 매일 밤 태어나 비참하게 되는 자 있고, 매일 아침, 매일 밤 태어나 즐거워지는 이 있다.
    - W.블레이크
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.