18
5주차 주차 AVR AVR의 인터럽트 인터럽트 제어 제어 레지스터 레지스터 및 관련 관련 실습 실습 Next-Generation Networks Lab.

55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

  • Upload
    lethuy

  • View
    223

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

55주차주차AVRAVR의의 인터럽트인터럽트 제어제어 레지스터레지스터 및및 관련관련 실습실습

Next-Generation Networks Lab.

Page 2: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

3. 레지스터 설정

외부 인터럽트 레지스터

레지스터 설명레지스터 설명

MCUCRMCU Control Register

SREGStatus Register

EICRAExternal Interrupt Control Register A외부 인터럽트 3~0의 인터럽트 센스 컨트롤 설정

EICRBExternal Interrupt Control Register B외부 인터럽트 7~4의 인터럽트 센스 컨트롤 설정

External Interrupt Mask RegisterEIMSK

External Interrupt Mask Register 개별 인터럽트 허용 유무를 설정

EIFRExternal Interrupt Flag Register

20

EIFRp g g

개별 인터럽트의 상태를 나타냄

Page 3: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

MCUCR

IVSEL: Interrupt Vector Select IVCE: Interrupt Vector Change Enable

SREGIVCE: Interrupt Vector Change Enable

21

Page 4: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

전체 인터럽트의 설정/해제 방법

asm(“SEI”);

SREG 0 80

asm(“CLI”);

SREG 0 00SREG = 0x80;

sei(); // set interrupt

SREG = 0x00;

cli(); // clear interrupt

22

Page 5: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

EICRA

EICRB

23

Page 6: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

ISC Interrupt Sense Control

24

Page 7: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

EIFR

EIMSK

INT4 INT3 INT2 INT1 INT0

25

Page 8: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

ATmega128의 외부 인터럽트 핀

26

Page 9: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

외부외부 인터럽트인터럽트 관련관련 내부내부 회로회로

인터럽트감지회로

ISC01 ISC00 INT0 I-bit

EICRA EIMSK SREG

감지회로

Pi 2ISR

Pin 25 (INT0_vector)

INT1

Pin 26ISR

(INT1 t )인터럽트 감지회로

INT1

27

(INT1_vector)

Page 10: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

예제예제

예제 7.3

포트 A의 7-segment에 초시계를 구현한다 포트 A의 7 segment에 초시계를 구현한다.

PE6에 연결된 Tact SW를 누르면 상승에지에서 초시계가 ’38’ 으로 초기화된다.

Port A

CPU B d7-segment

CPU Boardg

(Decoder)

Tact Switch

Port E6

28

Tact Switch

Page 11: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

예제예제 77--3 Tact SW 3 Tact SW INT6, INT6, 상승에지상승에지 감지감지

typedef unsigned char INT8;typedef unsigned int INT16;

//MCUCR |= 0x00;EICRB |= 0x30; // INT6 risingEIMSK |= 0x40; // INT6 enable

#define F_CPU 1000000UL

#include <avr/io.h>

EIMSK | 0x40; // INT6 enableEIFR |= 0x00; // Flag clearSREG |= 0x80; //sei();

/#include <util/delay.h>#include <avr/interrupt.h>

while(1){

for(i=0; i<6; i++)INT8 i, j ;

ISR(INT6_vect) // INT6 interrupt function

{for(j=0; j<10; j++){

{ i=3; j=8; }

int main (void){

PORTA = (i << 4) | j;_delay_ms(1000);

}}{

DDRA = 0xFF; // 7-segmentDDRE = 0x00; // PE6 --> Tact SW// DDRE | (0<<DDRE6);

}}return 0;}// DDRE |= (0<<DDRE6); }

29

Page 12: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

예제예제

예제 7.4 포트 A의 7-segment에 초시계를 구현한다.

Tact 스위치 SW4를 CPU 보드의 PD1에 연결한다. 그리고, Tact SW를 누르면

상승에지에서 초시계가 ’38’ 으로 초기화된다.

Port A

CPU B d7-segment

CPU Boardg

(Decoder)

Tact Switch

Port D1

30

Tact Switch

Page 13: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

예제예제 77--4 Tact SW 4 Tact SW INT1, INT1, 상승에지상승에지 감지감지

typedef unsigned char INT8;typedef unsigned int INT16;

//MCUCR |= 0x00;EICRA |= 0x0C; // INT1 risingEIMSK |= 0x02; // INT1 enable

#define F_CPU 1000000UL

#include <avr/io.h>

EIMSK | 0x02; // INT1 enableEIFR |= 0x00; // Flag clearSREG |= 0x80; //sei();

/#include <util/delay.h>#include <avr/interrupt.h>

while(1){

for(i=0; i<6; i++)INT8 i, j ;

ISR(INT1_vect) // INT1 interrupt function

{for(j=0; j<10; j++){

{ i=3; j=8; }

int main (void){

PORTA = (i << 4) | j;_delay_ms(1000);

}}{

DDRA = 0xFF; // 7-segmentDDRD = 0x00; // PD1 --> Tact SW// DDRD | (0<<DDRD1);

}}return 0;}// DDRD |= (0<<DDRD1); }

31

Page 14: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

예제예제

예제 7.5 포트 A의 7-segment에 초시계를 구현한다.

Tact 스위치 SW3을 CPU 보드의 PE4에 연결한다. 그리고, SW3을 누르면 하강

에지에서 초시계가 ’00’ 으로 초기화된다.

동시에 Tact 스위치 SW4를 CPU 보드의 PD1에 연결한다 그리고 SW4를 누르 동시에 Tact 스위치 SW4를 CPU 보드의 PD1에 연결한다. 그리고, SW4를 누르

면 상승에지에서 초시계가 ’38’로 초기화된다.

P t A

7 t

Port A

CPU Board7-segment(Decoder)

Port E4Port D1

32

Tact SwitchPort D1

Page 15: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

예제예제 77--5 5 Tact SW Tact SW INT4, INT1INT4, INT1

typedef unsigned char INT8;typedef unsigned int INT16;

DDRD = 0x00; // Tact SWDDRE = 0x00; // Tact SWEICRA |= 0x0C; // INT1 rising

#define F_CPU 1000000UL

#include <avr/io.h>

EICRA | 0x0C; // INT1 rising EICRB |= 0x02; // INT4 falling EIMSK |= 0x12; // INT1, INT4 enableEIFR |= 0x00; // Flag clear/

#include <util/delay.h>#include <avr/interrupt.h>

| ; // gSREG |= 0x80; //sei(); while(1){

INT8 i, j ;

ISR(INT4_vect) // INT4 interrupt function

for(i=0; i<6; i++){

for(j=0; j<10; j++){ i=0; j=0; }

ISR(INT1_vect) // INT1 interrupt function{ i 3 j 8 }

{PORTA = (i << 4) | j;_delay_ms(1000);

}{ i=3; j=8; }

int main (void){

}}

}return 0;{

DDRA = 0xFF; // 7-segmentreturn 0;}

33

Page 16: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

예제예제

예제 7-6 포트 A의 7-segment에 초시계를 구현한다.

PD1에 IR-LED를 연결하고, PD0에 IR센서를 연결한다. IR-LED를 쏘고 있는 정

상적인 경우에는 IR센서에 신호가 계속 감지된다. 그러다가, IR센서에 신호가

감지되지 않으면 초시계를 ’00’ 으로 초기화한다감지되지 않으면 초시계를 ’00’ 으로 초기화한다.

Port A

CPU B d7-segment

CPU Boardg

(Decoder)

IR 센서

Port D0

34

IR 센서

Page 17: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

적외선적외선 센서센서 회로도회로도

35

Page 18: 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터 ...contents.kocw.net/KOCW/document/2015/shinhan/leesangrok/... · 2016-09-09 · 55주차주차 AVRAVR의의인터럽트인터럽트제어제어레지스터레지스터및및관련관련실습실습

예제예제 77--6 IR6 IR--Sensor Sensor INT0INT0

typedef unsigned char INT8;typedef unsigned int INT16;

//MCUCR |= 0x00;EICRA |= 0x02; // INT0 fallingEIMSK |= 0x01; // INT0 enable

#define F_CPU 1000000UL

#include <avr/io.h>

EIMSK | 0x01; // INT0 enableEIFR |= 0x00; // Flag clearSREG |= 0x80; //sei();

/#include <util/delay.h>#include <avr/interrupt.h>

while(1){

for(i=0; i<6; i++)INT8 i, j ;

ISR(INT7_vect) // INT7 interrupt function

{for(j=0; j<10; j++){

{ i=0; j=0; }

int main (void){

PORTA = (i << 4) | j;_delay_ms(1000);

}}{

DDRA |= 0xFF; // 7-segmentDDRD |= 0x20; // 0000 0010

// PD1 >IR LED PD0 >IR Sensor

}}return 0;}// PD1-->IR-LED, PD0-->IR-Sensor }

36