Presentation is loading. Please wait.

Presentation is loading. Please wait.

마이크로 시스템 lecture8. Interrupt Greet class 선 덕 한.

Similar presentations


Presentation on theme: "마이크로 시스템 lecture8. Interrupt Greet class 선 덕 한."— Presentation transcript:

1 마이크로 시스템 lecture8. Interrupt Greet class 선 덕 한

2 강의 목표 인터럽트의 개요를 알아보고, 이것을 바탕으로 8051의 인터럽트 사용법을
이해한다. 또한 이를 제어하기 위한 프로그램 작성법을 살펴보고, 몇 가지 실험을 통해 인터럽트의 동작 방법을 완벽하게 이해 할 수 있도록 한다.

3 Interrupt Service Routine(ISR) or Interrupt Handler
프로그램이 수행되고 있는 동안에 어떤 조건이 발생하여, 수행중인 프로그램을 일시적으로 중지시키게 만드는 조건이나 사건의 발생. 처리 프로그램 Interrupt Service Routine(ISR) or Interrupt Handler 서비스 루틴 프로그램 실행  인터럽트 발생  서비스루틴으로 점프  처리

4 프로그램에 의한 입출력방식의 단점 인터럽트에 의한 입출력 방식 예측할 수 없는 비동기적으로 발생하는 사건에 효율적으로
처리하기 어렵다. 실시간 응용에 적합하지 않다. 마이크로프로세서의 처리 능력을 충분히 활용하지 못한다. Solution 인터럽트에 의한 입출력 방식

5 인터럽트에 의한 입출력 방식의 장 단점 CPU의 효율적 사용 프로그램이 쉬워짐 <- 인터럽트 서비스 루틴 이용
시스템이 복잡해짐 프로그램 실행이 중단될 때 그 시점의 상태를 저장해두어야 함 두 개 이상의 장치가 연결된 경우 서비스를 요청한 장치의 정확한 판별과 우선 순위를 부여하여야 함

6 2. 인터럽트 처리 인터럽트가 발생하여 CPU에 의해서 받아들여졌을 때, 주 프로그램은 중단되고,
이때 다음의 동작들이 발생된다. 현재 명령어의 수행을 끝마친다. 스택(Stack)에 PC를 저장한다. 현재 인터럽트 상태를 내부적으로 저장한다. (주 프로그램의 상태 저장) 다른 인터럽트가 받아들여지지 않는다. 즉, 블로킹된다. ISR의 벡터 주소가 PC에 적재된다. (벡터 주소: 인터럽트 발생시 PC에 적재되는 값) ISR이 수행된다. 저장된 주 프로그램의 상태를 복원 인터럽트를 Enable(언블로킹) Stack에 저장된 현재 실행하는 프로그램 주소값을 PC에 적재

7 3. 인터럽트의 종류 발생원인에 따른 분류 하드웨어 인터럽트 Mask 가능 여부에 따른 분류
내부 인터럽트 외부 인터럽트 소프트웨어 인터럽트 – 특정 code에 의한 인터럽트 Mask 가능 여부에 따른 분류 Maskable Interrupt Non-maskable Interrupt (ex : Reset..) Interrupt 확인 방식에 따른 분류 Polling 방식의 인터럽트 Vector 방식의 인터럽트

8 □ 내부 인터럽트 Data abort 인터럽트 정의되지 않은 명령 잘못된 연산에 의해 □ 하드웨어 인터럽트 타이머/카운터 인터럽트 외부 핀에 의한 인터럽트 DMA 컨트롤러 관련 인터럽트 직렬 통신 포트 관련 인터럽트

9 4. 8051 인터럽트 두 개의 외부 인터럽트, 두 개의 타이머 인터럽트, 직렬 포트 인터럽트 이렇게
총 5개의 인터럽트 소스가 있다. □ 외부 인터럽트(INT0, INT1) 외부 인터럽트 소스로 하강 에지 트리거 검출 모드와, 레벨 검출 모드가 있다. 에지 트리거 모드 : 서비스 루틴 진입시 IEx(Interrupt Edge Flag) 클리어 레벨 검출 모드 : IEx 클리어 되지 않음. □ 타이머 인터럽트(TF0, TF1) 인터럽트 요구 플래그 (TFX Timer overflow flag)는 서비스 루틴 진입시 자동으로 클리어 된다. □ 직렬 통신 인터럽트(RI or TI) 인터럽트 서비스 루틴에서 TI(Transmit Interrupt flag)인지 RI(Receive Interrupt flag)인지를 판단해서 소프트웨어에 의해 클리어 시킬 필요가 있다.

10 인터럽트 플래그 벡터 주소 RI or TI TF2 or EXF2
인터럽트 플래그 벡터 주소 시스템 리셋 RST 0000H 외부0 IE0 0003H 타이머0 TF0 000BH 외부1 IE1 0013H 타이머1 TF1 001BH 직렬 포트 RI or TI 0023H 타이머2 TF2 or EXF2 002BH Fig 인터럽트 벡터

11 5. 인터럽트 제어 레지스터 IE(Interrupt Enable Register) : 인터럽트 사용 유무 결정(허가)

12 IP(Interrupt Priority Register) : 인터럽트 우선 순위 결정
우선순위 인터럽트 내용 외부 인터럽트0 타이머0 외부 인터럽트1 타이머1 RI +TI 직렬 포트 인터럽트 비트 심볼 비트 주소 기능 설명(1=높은 레벨, 0=낮은 레벨) IP.7 - 사용하지 않음 IP.6 IE.5 PT2 0BDH 타이머2 인터럽트에 대한 우선순위(8052) IE.4 PS 0BCH 직렬 포트 인터럽트에 대한 우선순위 IE.3 PT1 0BBH 타이머1 인터럽트에 대한 우선순위 IE.2 PX1 0BAH 외부1 인터럽트에 대한 우선순위 IE.1 PT0 0B9H 타이머0 인터럽트에 대한 우선순위 IE.0 PX0 0B8H 외부0 인터럽트에 대한 우선순위

13 TCON Register(하위 4비트) : 외부 인터럽트의 모드(에지, 레벨 검출) 결정
심볼 비트 주소 기능 설명(1=높은 레벨, 0=낮은 레벨) TCON.3 IE1 08BH 외부 인터럽트 에지 플래그 (에지 트리거의 경우만 =L에서 1로 셋) TCON.2 IT1 08AH 외부 인터럽트 타입 제어 비트 (1: 에지 트리거, 0:레벨입력) TCON.1 IE0 089H TCON.0 IT0 088H Fig 5.1 Edge Trigger 유지 기간

14 회로도 (타이머 인터럽트를 이용한 특정 주파수 발생 회로)

15 프로그램 #include <htc.h> #include <intrpt.h>
static volatile bit 0xb4; interrupt void ExtInt0_ISR(void); // 인터럽트 벡터 루틴 선언 interrupt void ExtInt0_ISR(void) { LED0 = !(LED0); } void Timer_init(void) TMOD = 0x02; // Timer0 = Mode2 TH0 = -50; // 50uSec 타이머 0를 설정 -> 0xCE ET0 = 1; // 타이머0 인터럽트 처리 EA = 1; // 모든 인터럽트 허가 TR0 = 1; // Timer0 Run void main(void) ROM_VECTOR(TIMER0, ExtInt0_ISR); Timer_init(); while(1) {

16 Timer 인터럽트를 이용해서 정확한 시계 프로그램을 작성하시오.
조건 - FND, LCD 둘 중 하나의 Display 이용 - 10ms를 1초로 간주

17 외부 인터럽트 제어

18 프로그램 #include <htc.h> #include <intrpt.h>
unsigned int Direction; interrupt void EXT0_int_ISR(void); void Delay(unsigned char del); void Ext_init(void); void PORT_init(void) { P1 = 0xFE; Direction = 0; Ext_init(); Delay(50); } interrupt void EXT0_int_ISR(void) if(Direction) Direction= 0; else Direction = 1; void Ext_init(void) IE = 0x81;

19 void Delay(unsigned char del)
{ while(del--); } void main(void) char temp_bit, temp_P2; ROM_VECTOR(EXTINT0, EXT0_int_ISR); PORT_init(); P2 = 0xFE; while(1) if(Direction){ if(P27 == 0) temp_bit = 0x00; else temp_bit = 0x01; temp_P2 = P2; temp_P2 = (temp_P2<<1)|temp_bit; P2 = temp_P2 ; Delay(50); else{ if(P20 == 0) temp_bit = 0x80; temp_P2 = (temp_P2>>1)|temp_bit;

20 외부 인터럽트(스위치 입력)를 이용해서 시계 프로그램의 시간을 변경 할 수 있도록 프로그램 하시오.


Download ppt "마이크로 시스템 lecture8. Interrupt Greet class 선 덕 한."

Similar presentations


Ads by Google