8051 > 4.인터럽트

TODAY578 TOTAL153,519
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


BASIC4MCU | 8051 | 4.인터럽트

페이지 정보

작성자 키트 작성일2017-09-12 10:44 조회219회 댓글0건

본문

	

4.인터럽트

 

1. 인터럽트란?

 

 인터럽트라는 것은 현재 실행 중인 프로그램을 일시적으로중단해서, 긴급을 요하는 다른 프로그램으로 제어를 옮기는 방법으로, 인터럽트가 발생하면,그 인터럽트에 대한 서비스 프로그램은, 전부 새로운 번지부터 시작하게 된다.

 

2. 인터럽트 구조

  

 8051에는 인터럽트를 발생하는 하드웨어 구조가 5종류 있다.

 다음은 인터럽트 서비스 프로그램의 시작 번지를 정리한 것이다.

 

          인터럽트 원인

시작 번지

        외부 인터럽트 0

        타이머/카운터 0

        외부 인터럽트 1

        타이머/카운터 1

        시리얼 포트

0003H

000BH

0013H

001BH

0023H

 

 이런 인터럽트를 발생하는 하드웨어 구조는 특수기능 레지스터군에있는 타이머를 제어하는데 사용하는 TCON(Timer CONtrol) 레지스터, 데이터 통신에 사용하는 SCON(Serial CONtrol) 레지스터중에 인터럽트 요청 플래그를 셋시켜서, CPU에게 인터럽트 요청한다는 것을 알린다.

 

TCON 과 SCON레지스터 비교

        <TCON>                                                               <SCON>

7

6

5

4

3

2

1

0

 

7

6

5

4

3

2

1

0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

 

SM0

SM1

SM2

REN

TB8

rb8

T1

R1

 

   IE0(external interrupt 0 edge flag)

  TF0(timer 0 overflow flag)

  IE1(external interrupt 1 edge flag)

  TF1(timer 1 overflow flag)     

  TI(transmit interrupt flag)

  RI(receive interrupt flag)  

 

 CPU에서는 인터럽트 인에이블 레지스터(IE)중에 대응되는 비트가 셋되어 있으면, 인터럽트를 받는다는 것을 의미하므로, 인터럽트 우선순위 레지스터를 조사해서 인터럽트 우선 순위를 확인하고 인터럽트를 받게 된다. 인터럽트 처리 루틴으로 들어가면, 자동적으로 해당되는 인터럽트 플래그는 클리어 되고( 단, R1, T1은 클리어 되지 않는다), 인터럽트 처리 루틴을 시작한다.

 

 

 (1) IE(interrupt enable)레지스터  

    인터럽트 인에이블 제지스터는 6개의 플래그로 구성되어 있으며, 비트단위로 액세스가 가능하다. 그 중 5개의 플래그는, 5개의 인터럽트 요청에 대해서,인터업트 인에이블 또는 디스에이블을 제어한다. 남은 한 개의 플래그(EA: Enable All)는 개개의 인터업트 인에이블/디스에이블을 제어하는 것이 아니고, CPU가 인터럽트 자체를 받을 것인가. 받지 않을 것인가를 제어하는데 사용한다.

 

7

6

5

4

3

2

1

0

 EA

-

ET2

ES

ET1

EX1

ET0

EX0

 

    EA(enable all interrupt) : 리셋, 모든 인터럽트 디스에이블

    ET2(enable timer 2 interrupt) : 8052인 경우에 사용

    ES(enable serial interrupt) : RI, TI 인터럽트

    ET1(enable timer 1 interrupt) : 타이머/카운터1 인터럽트

    EX1(enable external 1 interrupt) : 외부인터럽트1  

    ET0(enable timer 0 interrupt) : 타이머/카운터0 인터럽트

    EX0(enable external 0 interrupt) : 외부인터럽트0

 리세 때에는 모두 0으로 되어 있다.

 

 

 

 (2) IP(interrupt priority control) 레지스터(인터럽트의 우선 순위 제어)

   인터럽트 우선순의 제어 레지스터의 각 비트를 셋 또는 클리어 시키면, 그에 대응되는 인터럽트 요구에 대해서, 높은 레벨 혹은 낮은 레벨의 둘 중의 하나의 인터럽트 우선순위가 결정된다. 즉, 현재 낮은 레벨로 설정이 되어 있는 인터럽트 서비스 중에, 높은 레벨 우선순위를 갖은 인터럽트 요구가 발생하며, CPU는 낮은 레벨의 인터럽트 서비스를 중단하고, 높은 레벨의 인터럽트 서비스를 시작한다.

 

7

6

5

4

3

2

1

0

-

-

PT2

PS

PT1

PX1

PT0

PX0

 

    PT2(enable timer 2 interrupt) : 8052에서 사용

    PS(serial port priority control) : 시리얼 포트의 우선순위 제어

    PT1(timer 1 priority control) : 타이머/카운터 1의 인터럽트 우선순위 제어

    PX1(external interrupt 1 priority control) : 외부 인터럽트 1의 우선순위 제어

    PT0(timer 0 priority control) : 타이머/카운터 0 인터럽트 우선순위 제어

    PX0(external interrupt priority control) : 외부 인터럽트 0의 우선순위 제어

    리셋 : 모두 "0"로 되어서 낮은 레벨의 인터럽트가 된다.

 

 (3) 인터럽트의 하드웨어적인 구조와 처리 루틴

  

  ① 인터럽트를 요구하는 하드웨어가 대응되는 인터럽트 요청 플래그를 셋시키고 CPU에게 인터럽트

     요청을 알린다.

  ② CPU의 하드웨어는 현재 실행중인 10번째 클럭에 동기되어 있는 ALE신호의 하강 모서리 근처에서,

     내부적으로 인터럽트 요구를 래치 한다. (인터럽트 요구 샘플은, 각 사이클의 10번째 샘플링하기

     때문에, 즉 1사이클 명령 실행 중에서는 10번째 클럭, 2사이클 명령에서는 10번째와 22번째에서 샘

     플링한다.)

  ③ 래치된 인터럽트 요구는 인터럽트 인에이블 레지스터(IE)와 인터럽트 우선순위 레지스터를 참조해

     서, 전 조건을 만족하고 있는지를 확인하게 된다.

  ④ CPU는 인터럽트 레벨에 대응되는 내부 인터럽트 처리 중이라는 것을 가르키는 플립플롭을 셋시키

     고, 그 인터럽트 처리 프로그램을 부르기 이한 서브루틴 콜(CALL)명령을 자동적으로 실행한다.

  ⑤ 이 CALL 명령은 현재 실행 중인 프로그램 카운터(PC)를 스택에 저장하고 대응되는 인터럽트 요구

     플래그는 클리어 된다.

  ⑥ 다음에 인터럽트 처리 루틴이 실행되고, 인터럽트 처리 루틴 마지막에 RETI 명령을 실행하지 않으면

     안된다.

  ⑦ RETI 명령을 실행하면, 프로그램 제어는 다시 원래 프로그램으로 돌아가게 된다. RETI 명령은, 또 처

     리중인 인터럽트 레벨을 가르키는 내부 플립플롭을 리셋(0)시킨다.

  

  IE0, IE1, TF0, TF1의 4개의 인터럽트 요청 플래그는, 프로그램이 인터럽트 처리 루틴으로 옮기는 단계에서 자동적으로 클리어(0)된다. 그러나 TI, RI의 시리얼 포트의 인터럽트 요청 플래그는, 자동으로 클리어되지 않기 때문에, 사용자가 인터럽트 처리 루틴에서 클리어시켜야 한다.

 

 

3. 외부 인터럽트

  

7

6

5

4

3

2

1

0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

  

<TCON의 하위 4 비트의 기능>

 ① IT0(interrupt 0 type control)

   1 일 경우 : INT0는 입력 펄스의 하강모서리 인터럽트

   0 일 경우 : 입력 펄스의 "L" 레벨에서 인터럽트

 ② IT1(interrupt 1 type control)

   1 일 경우 : INT1는 입력 펄스의 하강모서리 인터럽트

   0 일 경우 : 입력 펄스의 "L" 레벨에서 인터럽트

  IE0, IE1은 외부 인터럽트 요구 플래그로서, 각각에 대응하는 INT1, INT0이 CPU가 샘플링할 때에는

   "L"레벨로 되어 있어야 하고, 더욱 IT0, IT1이 에지트리거 모드로 되어 있으면 셋된다. IE0, IE1은 IT0,

    IT1의 입력단자가 레벨 입력 모드로 프로그램 되어 있으면, 일체 영향을 받지 않으며, 인터럽트에도

   영향을 주지 않는다.

 

 (1) 에지트리거 인터럽트 입력(입력 신호의 하강 모서리에서 인터럽트 발생)

   INT의 입력 신호가 최저 12클럭 주기 동안 "L"레벨 유지해야 한다.

   CPU 클럭 T10, T22, T34, T46(즉 12 클럭)의 하강 모서리에서 IE0, IE1으로 래치(샘플링)하며 INT의

  입력 신호가 "L"일 때 IE0, IE1은 셋된다.

 

 (2) "L" 레벨 인터럽트 입력(입력 신호의 "L"레벨에서 인터럽트 발생)

   T10, T22, T34, T46 스테이트의 ALE 신호 하강 모서리에서 샘플링된다.

   입력신호를 CPU가 샘플링할 때 "L" 레벨이 현재 실행중인 명령을 끝날 때까지 세어서, 14개의 클럭

   사이클 이전에 발생되어 있으면, 실행중인 명령을 끝내고나서 인터럽트 처리 루틴으로 들어간다.

 

 

4. 인터럽트 우선순위 및 동작 타이밍

 

우선순위

인터럽트 원인

1

2

3

4

5

외부 인터럽트 0

타이머/카운터 0

외부 인터럽트 1

타이머/카운터 1

시리얼 인터럽트

 

                   동시에 인터럽트를 요청하면 외부 인터럽트 0가 제일 높다.

 

 인터럽트 우선순위를 결정하는 것은 IP레지스터가 한다. 즉, 인터럽트 요구에 대응하는 비트를 1로 셋 시키면 높은 레벨이 되고, 0이면 낮은 레벨이 된다.

 

7

6

5

4

3

2

1

0

-

-

PT2

PS

PT1

PX1

PT0

PX0

 

설명은 위에서 설명하였으므로 넘어 가겠다.

 

 (1) 다중 인터럽트

   낮은 레벨 인터럽트 처리 중 높은 레벨 인터럽트 요구시

    ①CPU는 낮은 레벨 인터럽트 처리 프로그램내어서 현재 실행중인 명령을 끝낸다.

    ②이 명령의 다음에 있는 명령의 시작번지를 스택에 저장

    ③높은 레벨의 인터럽트 처리 루틴 프로그램 실행

    ④높은 레벨의 인터럽트 처리 루틴 마지막에 RETI 명령을 만나면 높은 레벨 인터럽트 끝낸다.

    ⑤다시 원래의 낮은 레벨 인터럽트 처리 루틴으로 돌아간다.

 

 (2) 인터럽트 동작 타이밍

  실행 중인 명령이 끝나는 시점부터 세어서 14클럭 사이클 이상 전에, 인터럽트 요청이 있게 되면, 그 명령이 끝난 후 인터럽트 서비스 루틴 CALL을 실행하게 된다.(파이프 라인 레지스터를 사용함으로써 다음 명령을 미리 읽을수 있다.)'

 

http://jungtaemin.cafe24.com/bbs/view.php?id=8051_board&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=8

 

댓글 0

조회수 219

등록된 댓글이 없습니다.

8051HOME > 8051/PIC > 8051 목록

게시물 검색

Privacy Policy
                   MCU BASIC ⓒ 2017 모바일버전으로보기