550 likes | 1k Views
8051 인터럽트 인터페이스. 순천향 대학교 정보기술공학부 이상정. 인터럽트 개념. CPU 내부 또는 외부의 요구에 의해서 정상적인 프로그램의 실행 순서를 변경하여 보다 시급한 작업 ( 인터럽트서비스 루틴 ) 을 먼저 수행한 후에 다시 원래의 프로그램으로 복귀하는 것 인터럽트는 주변장치의 서비스 요청에 CPU 가 가장 빠르게 대응할 수 있는 방법 . 주변장치측으로 부터의 발생 시기를 예측하기 어려운 비동기적인 일 (event, 사건 ) 을 CPU 가 빠르게 처리 .
E N D
8051인터럽트 인터페이스 순천향 대학교 정보기술공학부 이상정
인터럽트 개념 • CPU 내부 또는 외부의 요구에 의해서 정상적인 프로그램의 실행 순서를 변경하여 보다 시급한 작업(인터럽트서비스 루틴)을 먼저 수행한 후에 다시 원래의 프로그램으로 복귀하는 것 • 인터럽트는 주변장치의 서비스 요청에 CPU가 가장 빠르게 대응할 수 있는 방법. • 주변장치측으로 부터의 발생 시기를 예측하기 어려운 비동기적인 일(event, 사건)을 CPU가 빠르게 처리. • 서로 비동기적으로 동작하는 CPU(매우 고속으로 동작)와 주변장치(비교적 저속으로 동작) 사이에서 효율적으로 일을 수행하는 중요한 수단. 순천향대학교 정보기술공학부 이 상 정 2
인터럽트 개념 순천향대학교 정보기술공학부 이 상 정 3
인터럽트의 종류 • 인터럽트 발생 원인에 따른 분류 • 하드웨어 인터럽트 • 내부 인터럽트 • 외부 인터럽트 • 소프트웨어 인터럽트 • 인터럽트 발생시 마이크로프로세서의 반응 방식에 따른 분류 • 차단 가능 인터럽트(maskable interrupt) • 차단 불가능 인터럽트(non-maskable interrupt) • 인터럽트를 요구한 외부 하드웨어를 확인하는 방법에 따른 분류 • 조사형 인터럽트(polled interrupt) • 벡터형 인터럽트(vectored interrupt) 순천향대학교 정보기술공학부 이 상 정 4
인터럽트의 우선순위 제어 • 인터럽트 우선순위(priority) 제어의 필요성 • 2개 이상의 주변장치가 동시에 신호를 보내 인터럽트를 요청하는 경우 • 하나의 인터럽트가 서비스되고 있는 동안에 또다른 인터럽트가 요청되는 경우 • 조사형 인터럽트의 경우 • CPU가 각 주변장치를 소프트웨어적으로 차례로 폴링하는 순서에 의하여 인터럽트의 우선순위가 결정 • 필요할 때마다 소프트웨어를 수정하여 손쉽게 우선순위를 변경하는 것이 가능 • 인터럽트 제어기를 사용하는 벡터형 인터럽트의 경우 • 하드웨어 인터럽트 인터페이스가 우선순위 결정 • 인터럽트 마스크 레지스터 또는 인터럽트 허용 레지스터를 가지고 있어서 인터럽트 허용 여부를 설정 • 인터럽트 우선순위 제어 레지스터로 우선순위를 지정 순천향대학교 정보기술공학부 이 상 정 5
인터럽트의 처리 과정 순천향대학교 정보기술공학부 이 상 정 6
80C32에서의 인터럽트 종류 • 80C32에서는 8가지의 인터럽트 소스와 6가지의 인터럽트 벡터 • 이 모든 인터럽트들은 SFR의 레지스터에 인터럽트 요청 사실을 표시하는 플랙 비트를 가지고 있다. • 따라서, 인터럽트가 허용되지 않은 상태에서도 이 비트들을 폴링(polling)하면 인터럽트 요청 사실을 확인할 수 있고, 이 비트들을 소프트웨어적으로 세트시킴으로써 인위적으로 인터럽트를 발생시킬 수도 있다. 순천향대학교 정보기술공학부 이 상 정 7
80C32에서의 인터럽트 종류 순천향대학교 정보기술공학부 이 상 정 8
80C32에서의 인터럽트 종류 순천향대학교 정보기술공학부 이 상 정 9
외부 인터럽트 INT0’ INT1’ • TCON(Timer CONtrol) 레지스터로 제어 순천향대학교 정보기술공학부 이 상 정 10
TCON 레지스터 • TCON 레지스터 • IT0 IT1 = 0 이면 레벨 트리거(level trigger)설정 • IT0 IT1= 1 이면 하강 에지(falling edge)에 의한 에지 트리거(edge trigger) 방식 • 인터럽트 에지 플랙IE0및 IE1은 인터럽트가 발생되면 세트되고 해당 인터럽트 서비스 루틴이 호출되어 처리가 시작되면 자동으로 클리어 • 레벨 트리거인 경우에는 IE0 IE1에 영향을 주지 않음 • SFR 88H 번지에 매핑되어 비트 단위 제어 가능 순천향대학교 정보기술공학부 이 상 정 11
TCON 레지스터 • 예 • CLR TCON.0 ; level trigger for INT0CLR IT0 • SETB TCON.0 ; edge trigger for INT0SETB IT0 • CLR TCON.2 ; level trigger for INT1CLR IT1 • SETB TCON.2 ; edge trigger for INT1SETB IT1 순천향대학교 정보기술공학부 이 상 정 12
인터럽트의 샘플링 및 허용 • 80C32에서 모든 인터럽트 플랙은 각 머신 사이클의 S5P2(p.56)에서 한차례씩 샘플링된다. • 다만, 예외적으로 타이머 2의 TF2 플랙만은 각 머신 사이클의 S2P2에서 샘플링 • 검출된 인터럽트의 허용 여부는 IE(Interrupt Enable) 레지스터로 설정 • 각 인터럽트는 비트 0-5를 사용하여 개별적으로 허용 여부를 설정 • 비트 7인 EA(Enable All)비트를 사용하여 전체적으로 허용 여부를 설정한 순천향대학교 정보기술공학부 이 상 정 13
IE(Interrupt Enable) 레지스터 순천향대학교 정보기술공학부 이 상 정 14
IE 레지스터 • SFR A8번지에 매핑되어 비트 단위 제어 가능 • 예 • 어떤 인터럽트도 허용하지 않음CLR EA ; CLR IE.7 • 외부 인터럽트 0(INT0) 및 직렬포트 인터럽트 허용SETB EA ; SETB IE.7SETB EX0 ; SETB IE.0SETB ES ; SETB IE.4MOV IE, #10010001B 순천향대학교 정보기술공학부 이 상 정 15
인터럽트의 우선순위 제어 • 80C32에서는 인터럽트 우선순위 제어 레지스터 IP(Interrupt Priority Register)와 IPH(Interrupt Priority High Register)를 사용하여 4단계의 인터럽트 우선순위 레벨을 설정 순천향대학교 정보기술공학부 이 상 정 16
인터럽트의 우선순위 제어 • 낮은 레벨로 설정된 인터럽트가 처리되고 있는 동안에 이보다 높은 레벨의 인터럽트가 발생할 수 있다. • 그러나, 현재 처리되고 있는 것과 동일한 우선순위 레벨의 인터럽트나 이보다 낮은 레벨의 인터럽트는 발생될 수 없다. • 서로 다른 우선순위 레벨을 가지는 인터럽트들이 2개 이상 동시에 요청되면 가장 높은 순위의 인터럽트가 먼저 허용되어 처리된다. 순천향대학교 정보기술공학부 이 상 정 17
IP 레지스터 • SFR 주소 B8H로 비트 단위 처리 가능 순천향대학교 정보기술공학부 이 상 정 18
IPH 레지스터 • SFR 주소 B7H로 비트 단위로 처리 안됨 순천향대학교 정보기술공학부 이 상 정 19
IP, IPH 레지스터 • 예 • INT0 레벨 3 우선순위 세트 SETB PX0MOV 0B7H, #1 // SETB PX0H • INT1 레벨 2 우선순위 세트 CLR PX1MOV 0B7H, #4 // SETB PX1H 순천향대학교 정보기술공학부 이 상 정 21
1. INT0 인터럽트 프로그램 예 • 외부 인터럽트 소스 INT0에 하강에지의 인터럽트를 가할 때 마다 병렬포트 P0 값이 반전되고 메모리 30H 번지의 내용이 증가하는 프로그램 • 시뮬레이터에서 내부 주변장치 제어 방법 • Peripherals메뉴 • 서브메뉴InterruptsI/O-Ports -> Port 0,1,2,3Serial Timer -> Timer 0, 1, 2 순천향대학교 정보기술공학부 이 상 정 22
1. INT0 인터럽트 프로그램 예 • 시뮬레이션에서 외부 인터럽트 인가 방법 • INT0 외부 핀은 병렬포트 3의 2 번째 비트(P3.2)에 연결 • INT1 외부 핀은 병렬포트 3의 3 번째 비트(P3.3)에 연결 • 따라서 메뉴에서 병렬포트 3을 선택하여 해당 비트의 값을 세팅하면 인터럽트 효과 순천향대학교 정보기술공학부 이 상 정 23
1. INT0 인터럽트 프로그램 예 • 인터럽트 허용 및 우선순위, 에지트리거 • 인터럽트 허용IE 레지스터의 IE.7(EA)와 IE.0 세트 • 인터럽트 우선순위IP, IPH 레지스터의 비트 0을 1로 세트하여 최고의 우선순위 부여(IPH 레지스터는 비트 단위 세트 안됨) • TCON의 비트 0 세트하여 에지 트리리거 동작 세트 SETB IP.0 ; set highest interrupt priority MOV 0B7H, #1 ; IPH bit 0 set, cannot set a bit SETB EA ; enable global bit IE.7 SETB IE.0 ; enable interupt for INT0 SETB TCON.0 ; edge trigger for INT0 순천향대학교 정보기술공학부 이 상 정 24
1. INT0 인터럽트 프로그램 예 CSEG AT 8000H ; Initialize interrupt control for INT0 SETB IP.0 ; set highest interrupt priority MOV 0B7H, #1 ; IPH bit 0 set, cannot set a bit SETB EA ; enable global bit IE.7 SETB IE.0 ; enable interupt for INT0 SETB TCON.0 ; edge trigger for INT0 ; initial output of LED data MOV P0, #0 CLR 30H 순천향대학교 정보기술공학부 이 상 정 25
1. INT0 인터럽트 프로그램 예 ; main routin LOOP: JMP LOOP ; infinite loop ; interrupt service routine, ; toggle P0, Increment 30H INT0_ISR: XRL P0,#0FFH INC 30H RETI CSEG AT 0003H ; INT0 interrupt vectoring from 0003H JMP INT0_ISR END 순천향대학교 정보기술공학부 이 상 정 26
C51 인터럽트 서비스 루틴 함수 • 인터럽트 서비스 루틴 함수void function_name(void) [interrupt n][using n] {………….} • 인수나 리턴값은 지정할 수 없음 • interrupt n 으로 벡터번호 지정 • using n으로 레지스터 뱅크 지정 • 예unsigned int cnt, sec;void timer0(void) interrupt 1 using 2{ if (++cnt == 4000) { sec++; cnt = 0; }} 순천향대학교 정보기술공학부 이 상 정 43
2. INT0 인터럽트 C 프로그램 예 • 외부 인터럽트 소스 INT0에 하강에지의 인터럽트를 가할 때 마다 병렬포트 P0 값이 반전되고 메모리 30H 번지의 내용이 증가하는 C 프로그램 • REG52.H파일에 SFR 등이 정의 순천향대학교 정보기술공학부 이 상 정 44
2. INT0 인터럽트 C 프로그램 예 #include <REG52.H> sfr IPH = 0xB7; /* define IPH register */ unsigned char count _at_ 0x30; void extint0(void) interrupt 0 { P0 ^= 0xff; /* toggle parallel port 0 */ ++count; /* increment M[30H] */ } 순천향대학교 정보기술공학부 이 상 정 45
2. INT0 인터럽트 C 프로그램 예 main() { /* set highest interrupt priority 3 */ IP = 1; IPH = 1; /* interrupt enable */ IE = 0x81; /* INT0 edge trigger */ TCON = 1; /* initialize memory, parallel port */ count = 0; P0 = 0; /* infinite loop */ while (1) ; } 순천향대학교 정보기술공학부 이 상 정 46