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

Slides:



Advertisements
Similar presentations
2 3 t h K o r e a O p e r a t i n g S y s t e m S e m i n a r 8259A 를 아는가 ??? 2 3 t h K o r e a O p e r a t i n g S y s t e m S e m i n a r.
Advertisements

8051 Serial 통신 Mode 0 : 동기 통신 Mode 1,2,3 : 비동기 통신
마이크로콘트롤러 설계 – 4 Timer 실습 2 – T1, T3
6 인터럽트.
컴퓨터와 인터넷.
8051타이머/카운터 순천향대학교 정보기술공학부 이상정.
3. 명령어 집합 구조 순천향대학교 정보기술공학부 이상정.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
AVR 실습.
인터럽트 종류 인터럽트 요구시 I/O장치 인식 방법
AVR - Chapter 11 황 지 연.
Lecture #2 제2장 CPU의 구조와 기능(1).
6 폴링과 인터럽트를 이용한 장치 인터페이스 마이크로컨트롤러 AVR ATmega128.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
13. 인터럽트 제어 - 스마트 폰으로 제어하는 아두이노 -.
UNIT 15 Timer & Watch Dog 로봇 SW 교육원 조용수.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
10장. 인터럽트 Lecture #10.
TMS320F2812의 GPIO의 이해.
12장. 제어 장치 다루는 내용 CPU속의 제어장치 마이크로 연산 제어장치의 동작.
어셈블리 문법 보강 4월 10일.
컴퓨터시스템 구조 Computer System Architecture.
제 3장 컴퓨터 시스템의 구조.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
07. 디바이스 드라이버의 초기화와 종료 김진홍
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
DK-128 ADC 실습 아이티즌 기술연구소
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
타이머카운터 사용법 휴먼네트웍스 기술연구소
4. LAN의 배선체계 (3장. LAN: Local Area Network)
PSW : PROGRAM STATUS WORD
타이머/카운트 정리 정보통신•컴퓨터 공학부 송명규
ATmega128 FND 실습 휴먼네트웍스 기술연구소
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
DK-128 FND 실습 아이티즌 기술연구소 김태성 연구원
Microprocessor I/O Port & CLCD Noh Jin-Seok.
10장 컴퓨터 기반 데이터 획득 응용 프로그램 LabVIEW 사용법
과제#4 내용 정성훈.
타이머 8051 타이머 타이머 설정 및 모드
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
플립플롭, 카운터, 레지스터 순서회로 플립플롭 카운터 레지스터.
컴퓨터시스템 구조 Computer System Architecture.
DK-128 FND 실습 아이티즌 기술연구소
오브젝트 순서회로 IT CookBook, VHDL을 이용한 디지털 회로 입문.
Moving Walk 17조 장철훈 장황재 이연호.
논리회로 설계 및 실험 5주차.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
2. 컴퓨터 시스템의 동작 명령어 구성 연산 종류와 기능에 따라 오퍼랜드 부분을 다양하게 활용 가능.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
마이크로소프트 박종호.
제4강 처리장치 1.
13장 CTC and DMA Slide 1 (of 10).
ARM Development Suite v1.2
UNIT 25 SPI 로봇 SW 교육원 조용수.
ATmega128의 특징 아이티즌 기술연구소
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
DK-128 개발환경 설정 아이티즌 기술연구소
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
DK-128 직렬통신 실습 아이티즌 기술연구소
AT MEGA 128 기초와 응용 I 기본적인 구조.
논리회로 설계 및 실험 4주차.
시리얼 UART 정리 정보통신•컴퓨터 공학부 송명규
TVM ver 최종보고서
System Security Operating System.
AdcRead API 함수 분석 마이크로프로세서.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
Progress Seminar 양승만.
2. 프로세스 B 안우진 - 운영체제 -.
Presentation transcript:

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

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

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

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

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

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

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

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

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)인지를 판단해서 소프트웨어에 의해 클리어 시킬 필요가 있다.

인터럽트 플래그 벡터 주소 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 4.1 8051 인터럽트 벡터

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

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 인터럽트에 대한 우선순위

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 유지 기간

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

프로그램 #include <htc.h> #include <intrpt.h> static volatile bit LED0 @ 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) {

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

외부 인터럽트 제어

프로그램 #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;

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;

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