회원가입 ID/PW 찾기

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

콘텐츠 수 1,041

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%를 돌려드립니다.
861 마이크로프로세서 오실로스코프 PC와 연동 [6] 무료 kebin 2010-07-21 0 4840
860 마이크로프로세서 시리얼 모니터링 프로그램 [5] 무료 kebin 2010-07-21 0 6155
859 마이크로프로세서 [펌] 04. AVR 8비트 타이머 & 카운터.pdf [13] 무료 우량감자 2010-07-16 0 4286
858 마이크로프로세서 [펌] 03. AVR ATmega128 PORT.pdf [16] 무료 우량감자 2010-07-16 0 4372
857 마이크로프로세서 [펌] 01. 마이크로 컨트롤러 개론.pdf [11] 무료 우량감자 2010-07-16 0 3754
856 마이크로프로세서 AVR 초심자를 위한 개발환경 구축 요약자료 [7] 무료 우량감자 2010-07-16 0 3549
855 마이크로프로세서 초음파센서 테스트 프로그램(AVRGCC) [4] 무료 dodo 2010-07-16 0 4524
854 마이크로프로세서 AVR 용 부트로더 프로그램 [2] 무료 dodo 2010-07-16 0 3509
853 마이크로프로세서 스텝모터 가감속테이블!! [11] 무료 흑마늘 2010-07-15 0 5524
852 마이크로프로세서 MSPF1611 기능정리! [2] 무료 흑마늘 2010-07-15 0 4940
851 마이크로프로세서 MSP430F149 예제! [3] 무료 흑마늘 2010-07-15 0 5152
850 마이크로프로세서 MSP430F44x 예제! [2] 무료 흑마늘 2010-07-15 0 4546
849 마이크로프로세서 MSP430F21x2 예제! [2] 무료 흑마늘 2010-07-15 0 4665
848 마이크로프로세서 요즘 제가 유용하게 사용하고 있는 시리얼 프로그램 입니다. [3] 무료 우보만리 2010-07-14 0 4058
847 마이크로프로세서 오실로스코프 사용법입니다. [9] 무료 모도보도 2010-07-13 0 4933
846 마이크로프로세서 터치스크린에 대한 자료입니다, [8] 무료 모도보도 2010-07-13 0 4494
845 마이크로프로세서 가입기념 ^^ GLCD 한글사용 라이브러리 입니다.- WIN AVR [10] 무료 모도보도 2010-07-09 0 6576
844 Software & IDEs [Win32api/게임 ] 갤러그 [4] 무료 밍구리 2010-07-02 0 3576
843 마이크로프로세서 이게강좌인지 자료인지하여간 일반포트로 서보모터제어하기입니다... [2] 무료 9219jaks 2010-06-30 0 4583
842 마이크로프로세서 AVR로 BusLCD 제어하기 [11] 무료 나다고나다고 2010-06-30 0 3875
  • 인생은 반복된 생활이다. 좋은 일을 반복하면 좋은 인생을, 나쁜 일을 반복하면 불행한 인생을 보내는 것이다.
    - W.NL.영안
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.