회원가입 ID/PW 찾기

1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.

콘텐츠 수 739

4.인터럽트

마이크로프로세서 구매수 0 2010.06.25 10:26:19
판매자 양치기광녀 판매 납포인트 무료 평점 0점 / 총 0명 참여

4.인터럽트

 

1. 인터럽트란?

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

 

2. 인터럽트 구조

  

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

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

 

          인터럽트 원인

시작 번지

        외부 인터럽트 0

        타이머/카운터 0

        외부 인터럽트 1

        타이머/카운터 1

        시리얼 포트

0003H

000BH

0013H

001BH

0023H

 

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

 

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

  

 ① 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://www.jungtaemin.com/study.html?PHPSESSID=5d9ce605a6274b90aee7bcf9346d0ae4


profile
컴쟁이 2012.07.21 00:07
자료 잘 볼께요...
profile
시나브로69 2016.07.16 16:32

좋은 자료 감사합니다.

search
List of Articles
번호 분류 제목 평점 포인트 판매자 등록일 구매수 조회 수
공지 공공의 목적으로 공유하고자 하는 소프트웨어는 '소프트웨어 자료실'에 업로드를 요청드립니다.
공지 구매후 평점 댓글을 남겨주시면 구매포인트의 20%를 돌려드립니다.
739 마이크로프로세서 AVR RTOS template [2] 무료 아크마 2017-08-26 0 178
738 마이크로프로세서 AVR ISP 결선도(프린터 포트/LPT) [1] 무료 아크마 2017-08-26 0 246
737 마이크로프로세서 STM32 시리즈 MCU graphical configuration tool [5] 무료 코찌코찌 2013-12-11 0 408
736 마이크로프로세서 Avr Studio에 형변환 연산자가 있나요? [2] 무료 트리비 2016-11-12 0 123
735 마이크로프로세서 PIC CC-C메뉴얼 [2] 무료 크히히힝 2016-08-12 0 176
734 마이크로프로세서 PIC MCU를 처음 접해보는데.. [1] 무료 크히히힝 2016-08-04 0 189
733 마이크로프로세서 mplab ide 8.92 설치! [2] 무료 회사간공대생 2016-08-04 0 559
732 마이크로프로세서 8051 [5] 무료 크크크크크1 2016-06-08 0 126
731 마이크로프로세서 stm32f103 demo board example [2] 무료 seele 2015-09-04 0 557
730 마이크로프로세서 stm32f103자료입니다. [3] 무료 seele 2015-09-04 0 765
729 마이크로프로세서 따끈한 MPLAB X IDE 한글 메뉴얼입니다. [25] 무료 om 2015-08-10 0 2951
728 마이크로프로세서 네오스 즐겨찾기 to 텍스트 VB6 [3] 무료 네오스f91e9 2015-07-31 0 188
727 마이크로프로세서 네오스 AVR soft usart code 생성기 VB6 [1] 무료 네오스f91e9 2015-07-30 0 216
726 마이크로프로세서 네오스 GPS 시뮬레이터 VB6 [3] 무료 네오스f91e9 2015-07-30 0 240
725 마이크로프로세서 네오스 AVR ISP 케이블 짝짓기 VB6 [1] 무료 네오스f91e9 2015-07-30 0 258
724 마이크로프로세서 네오스 LRC 계산기 VB6 [3] 무료 네오스f91e9 2015-07-30 0 562
723 마이크로프로세서 네오스 사인 테이블 생성기 VB6 [2] 무료 네오스f91e9 2015-07-30 0 243
722 마이크로프로세서 네오스 스위치 코드 메이커 VB6 무료 네오스f91e9 2015-07-30 0 224
721 마이크로프로세서 네오스 주석변경 툴 A, B VB6 무료 네오스f91e9 2015-07-30 0 218
720 마이크로프로세서 네오스 계산기 VB6 [2] 무료 네오스f91e9 2015-07-30 0 249
  • 우리의 인내가 우리의 힘보다 더 많은 것을 성취할 것이다.
    - 버크
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.