인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

Similar documents
슬라이드 1

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

lecture4(6.범용IO).hwp

ATmega128

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - 08-MP-4-interrupt

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]

슬라이드 1

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

정보보안 개론과 실습:네트워크

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

K&R2 Reference Manual 번역본

AVR Atmega128

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - es-arduino-lecture-03

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

2주차: 입출력 제어 복습

슬라이드 1

PowerPoint 프레젠테이션

Chapter #01 Subject

Section 03 트랜지스터를이용한스위칭동작 16/45 트랜지스터의직류특성 활성 직류상황에서전류 I C 는전류 I B 보다 h FE 배만큼더많은전류가흐름» 베이스와이미터가순방향으로바이어스» 컬렉터와베이스가역방향으로바이어스 차단 만일 I B 가 0[A] 이면컬렉터전류

Microsoft PowerPoint - ccs33_bios_com1_semaphore.ppt [호환 모드]

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

PowerPoint 프레젠테이션

KEY 디바이스 드라이버

PowerPoint 프레젠테이션

<30302E20BEC6C6AEB8E120BDBAC6A9B5F0BFC020BFACBDC0B9AEC1A620C7D8B4E42E687770>

C & System

PowerPoint 프레젠테이션

Microsoft PowerPoint - polling.pptx

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD

Microsoft PowerPoint - ccs33_bios_PRD.ppt [호환 모드]

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터

Microsoft Word - logic2005.doc

Microsoft PowerPoint - 제3장 GPIO 입출력 제어 (HBE-MCU-Multi AVR)

2009년2학기 임베디드시스템 응용

API 매뉴얼

C프로-3장c03逞풚

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

I/O (GPIO) 제어 I/0 제어 ATmega128의 I/O 구성및특징 I/O PORT 구성 8비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT A ~PORT F) 6개 5비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT G) 1개 I/O PORT 특징

2. Deferred Interrupt Processing A. Binary Semaphores를이용한동기 (Synchronization) i. Binary Semaphores는 Interrupt가발생하였을때특정한 를 Unblock 하는데사용할수있다. 이러한기능은 In

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap10-함수의활용.pptx

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Microsoft Word doc

PowerPoint 프레젠테이션

IoT FND8 7-SEGMENT api

Page 2 of 21 Absolute Maximum Ratings Absolute Maximum Rating 값을초과하는조건에서 DTPML을동작시킬경우치명적인손상을 가할수있습니다. Parameter Symbol Conditions min Typ Max Unit Sup

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

MPLAB C18 C

[8051] 강의자료.PDF

슬라이드 1

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

WATAVR128_manual.hwp

PowerPoint 프레젠테이션

Microsoft PowerPoint - 08-MP-8-ADC

C언어 및 실습 C Language and Practice

1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - additional01.ppt [호환 모드]

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

금오공대 컴퓨터공학전공 강의자료

PowerPoint 프레젠테이션

슬라이드 1

02장.배열과 클래스

목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을

282서비스업관리-마트

목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기

BMP 파일 처리

EWAVR 5.1x 프로젝트 옵션 설정(1_2) 2. Project -> > Option -> > General Option -> > Output / Library Configuration Library Configuration 은 사용하게 될 Library file을

Microsoft PowerPoint - [2009] 02.pptx

KXATUHEFFPYO.hwp

Microsoft PowerPoint - IOControl [호환 모드]

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

중간고사

C++ Programming

Microsoft PowerPoint os2.ppt [호환 모드]

03장.스택.key

Microsoft PowerPoint - chap12-고급기능.pptx

Index

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63>

CANTUS Evaluation Board Ap. Note

Microsoft PowerPoint - chap06-2pointer.ppt

슬라이드 1

PowerPoint 프레젠테이션

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Transcription:

ATmega128 인터럽트 1 제 04 강 인터럽트 (Interrupt) 인터럽트개요외부인터럽트참고 ) FND 회로실습및과제

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

인터럽트 ( 계속 ) ATmega128 인터럽트 3 * 인터럽트벡터 (P.104 표 7.1 참조 ) : 35 개

인터럽트 ( 계속 ) * 인터럽트허용 / 금지메커니즘 ATmega128 인터럽트 4

인터럽트 ( 계속 ) ATmega128 인터럽트 5 * SREG(Status Register) 의 I 비트제어함수 : 헤더파일 : avr/interrupt.h, : I(global Interrupt enable flag bit) sei(); cli(); // 전체인터럽트허용, SREG.I=1 // 전체인터럽트금지, SREG.I=0

인터럽트 ( 계속 ) * ISR(Interrupt Service Routine) 정의 #include <avr/interrupt.h> ISR(vector) { : // 여기에 vector 인터럽트에대한 // 서비스코드를작성... : * Nonpreemption( 비선점 ) Mechanism : SREG 의 I 플래그는 ISR 실행과동시에클리어, ISR 종료와동시에셋됨 ATmega128 인터럽트 6

인터럽트 ( 계속 ) ATmega128 인터럽트 7 * 인터럽트벡터에대한매크로정의 (p.107 참조 )

외부인터럽트 * 외부인터럽트 (INTn) 입력원 : PORTD 의하위니블, PORTE 의상위니블 ATmega128 인터럽트 8 : 해당핀을입력용으로방향설정 (Reset 시 default 로입력임 )

외부인터럽트 ( 계속 ) ATmega128 인터럽트 9 * EICRA(External interrupt control register A) : 인터럽트신호감지방법설정레지스터 : INT0, INT1, INT2, INT3( 각인터럽트당 2비트씩 )

외부인터럽트 ( 계속 ) ATmega128 인터럽트 10 * EICRB(External interrupt control register B) : INT4, INT5, INT6, INT7( 각인터럽트당 2 비트씩 )

외부인터럽트 ( 계속 ) ATmega128 인터럽트 11 * EIMSK(External Interrupt mask register) : 개별적인인터럽트허용 / 금지설정 : 인터럽트허용시 1, 금지시 0

외부인터럽트 ( 계속 ) * EIFR(External interrupt Flag register) : 인터럽트요청시 set, ISR 수행시자동 clear : 해당플래그에 1을기록하면, 플래그리셋 : 레벨트리거모드에서는항시 0 상태유지 ATmega128 인터럽트 12

FND 회로 * FND 회로 (p.128 회로수정본 ) ATmega128 인터럽트 13

FND 회로 ( 계속 ) * 각세그먼트와대응되는비트패턴 ATmega128 인터럽트 14 예 ) "CPU" 패턴 7 6 5 4 3 2 1 0 a b c d e f g dp 문자 a b c d e f g dp Hexa 'C' 0 1 1 0 0 0 1 1 63H 'P' 0 0 1 1 0 0 0 1 31H 'U' 1 0 0 0 0 0 1 1 83H

실습과제 ATmega128 인터럽트 15 [ 실습 1] 외부인터럽트 I ( p.120 소스참조 ) : INT0 요청시마다 LED 출력패턴이동 : 하강에지트리거방식, 디바운싱처리 : PORTA:DotMatrix Cols, PORTC:Rows, PORTD:s/w회로 // INT0 ISR ISR(INT0_vect) { static int i=0; // 라이프사이클동안 1 번만실행 if(++i==8) // 증가값이 8이면 0으로리셋 i=0; PORTA = pattern[i]; // i번째패턴 LED를켠다. msec_delay(debouncing_delay); // 디바운싱 while(~pind & 0x01) ; // 스위치해제를기다림 msec_delay(debouncing_delay); // 디바운싱 EIFR = (1<<INTF0); // 채터링에의한영향제거보장, INTF0 을리셋

int main() { DDRA = 0xFF; // 포트A를출력포트로설정 PORTA = pattern[0]; // 처음패턴으로 LED를켠다. DDRC=0xFF; PORTC = 0xFF; ATmega128 인터럽트 16 DDRD = 0xF0; // PORTD의하위니블을입력용 (INT0,1,2,3) EICRA = (1<<ISC01) (0<<ISC00) ; // 하강모서리트리거, 10 EIMSK = (1<<INT0); // INT0비트세트 (INT0 허용 ) sei(); // 전역인터럽트허용 while(1); // 무한루프, NORMAL 상태의동작 return 0; * 트리거모드를변경하여보자..

실습과제 [ 실습 2] 외부인터럽트 II ATmega128 인터럽트 17 : [ 실습1] 의수정판 1) ISR에서는패턴인덱스만변경, 패턴출력은 main() 에서... ( 패턴인덱스변수를전역변수로선언, p.124 소스참조 ) static int index; // 전역변수로선언 컴파일시문제있다!!!!! 최적화수준을바꾸어보자... ( 문제의이유는 p.126 참조 ) : "project-configuration options" 창의 Optimization 항 -O0 으로변경후컴파일... (-O0 : 최적화고려않음!!)

ATmega128 인터럽트 18 2) 해결책 : volatile 지시어 static volatile int index; 으로선언하고컴파일하면... 결론 : 전역변수이면서, ISR 과기타의일반함수에서공용으로 사용하는변수는 volatile 지시어를사용하는것이바람직!!!

실습과제 ATmega128 인터럽트 19 [ 과제 1] 외부인터럽트 I : 입출력관련과제 (Pooling 방식 ) 를인터럽트방식으로... : INT0 요청시상향, INT1 요청시하향의패턴출력

실습과제 ATmega128 인터럽트 20 [ 과제 2] 외부인터럽트 II : INT0 : up counting, INT1 : down counting : 7-segment 모듈제어 : 인터럽트요청시마다모듈에 1자리카운팅값표시

실습과제 ATmega128 인터럽트 21 [ 과제 3] 외부인터럽트 III : Normal 상태, INT0, INT1 각각에대한출력패턴을각자정의하고구현 : 지금까지의여러모듈들을사용하여...

실습과제 ATmega128 인터럽트 22 [ 과제 4] 중간고사 ( 프로그램문제 ) 완성후검토 : 다수개소스파일상황 ( 아래소스참조 ) : INT0요청시패턴인덱스 +1, INT1-1, INT2 +2 // file1.c ========================================= #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define DEBOUNCING_DELAY 20 void msec_delay(int n); extern void displaypattern(); int LEDindex = 0; unsigned char LEDpattern[8]={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80; ISR(INT0_vect) { if(ledindex++==8) LEDindex=0; msec_delay(debouncing_delay); 4 스위치해제를기다림 msec_delay(debouncing_delay); 5 인터럽트플래그 INT0를리셋 // INT0 인터럽트서비스루틴 // 디바운싱 // 디바운싱

ATmega128 인터럽트 23 6 패턴이 1 씩감소되는인터럽트서비스루틴작성 // INT1 인터럽트서비스루틴 7 패턴이 2 씩증가되는인터럽트서비스루틴작성 // INT2 인터럽트서비스루틴 int main() { DDRA = 0xFF; DDRC = 0xF0; PORTC = 0x01; PORTA = ~LEDpattern[0]; 1 INT0, INT1, INT2 모두하강모서리에서인터럽트가발생하도록설정 2 INT0, INT1, INT2 을모두허용하도록설정 3 전역인터럽트허용 while(1) { displaypattern(); // 무한루프 void msec_delay(int n) {// msec 단위시간지연함수 for(; n <0; n--) _delay_ms(1); // file2.c ========================================= #include <avr/io.h> unsigned char LEDpattern[8]; int LEDindex; void displaypattern() { PORTC = 0x01 << LEDindex; PORTA = ~LEDpattern[LEDindex];

실습과제 [ 과제 5] 땅따먹기게임 ( 순발력게임 ) ATmega128 인터럽트 24 : using DotMatrix & s/w module 1) 9개패턴 (all OFF, all ON,...) 2) INT0 index+1 player1, INT1 index-1 player2 3) 카운트다운시작패턴보이기 4) 기타... -경계선에서승자 / 패자결정후, 결과출력패턴보이기 -임의버튼눌리면게임재개...

실습과제 [ 과제 6] 주사위게임 ATmega128 인터럽트 25 : using FND & s/w module 1) INT0 player1, INT1 player2 2) Normal상태에서눈에해당하는숫자패턴을표시 ( 알아볼수없을정도로빠르게...) 3) INT0, INT1 누른순간의숫자값을 5회깜박임 4) 기타.. -승자결정후, 벌칙번호출력

ATmega128 인터럽트 26 // [ 과제 5] 땅따먹기게임 ( 미완, 급조 ) //================================= // [game1] //================================= #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define DEBOUNCING_DELAY20 void msec_delay(int n); void displaypattern(); void countdown(); void showwinner(int win); volatile int Winner; volatile int LEDindex = 4; unsigned char LEDpattern[9]={0xFF, 0b11111110, 0b11111100, 0b11111000, 0b11110000, 0b11100000, 0b11000000,0b10000000, 0b00000000; ISR(INT0_vect) { if(++ledindex==9) Winner = 2; //LEDindex=0; displaypattern(); // INT0 인터럽트서비스루틴 // // msec_delay(debouncing_delay); while(~pind & 0x01) ; // msec_delay(debouncing_delay); EIFR = (1<<INTF0); ISR(INT1_vect) { if(--ledindex == -1) Winner = 1; //LEDindex=8; displaypattern(); // INT1 인터럽트서비스루틴

ATmega128 인터럽트 27 // msec_delay(debouncing_delay); // while(~pind & 0x02) ; // msec_delay(debouncing_delay); EIFR = (1<<INTF1); int main() { DDRA = 0xFF; DDRC = 0xFF; PORTC = 0x01; PORTA = ~LEDpattern[0]; EICRA = 0b00101010; //(1<<ISC01) (0<<ISC00) ; EIMSK = (7<<INT0); // countdown(); sei(); while(1) { if(winner!=0) { cli(); showwinner(winner); // 전역인터럽트허용 // 무한루프 void msec_delay(int n) { for(; n > 0; n--) _delay_ms(1); // msec 단위시간지연함수 void countdown() {

ATmega128 인터럽트 28 PORTA = 0x00; PORTC = 0b00001111; msec_delay(10000); PORTC = 0b00111100; msec_delay(10000); PORTC = 0xF0; msec_delay(10000); void showwinner(int win) { if(win==1) { PORTA = 0x00; PORTC = 0b00111100; msec_delay(10000); PORTC = ~PINC; msec_delay(10000); else { PORTA = 0x00; PORTC = 0b00011000; msec_delay(10000); PORTC = ~PINC; msec_delay(10000); void displaypattern() { PORTC = 0xFF; //01 << LEDindex; PORTA = ~LEDpattern[LEDindex];