'인터럽트의 종류'에 해당되는 글 1건

  1. 2014.08.22 ATmeaga128 AVR 인터럽트 처리 동작
생활, 정보2014. 8. 22. 00:14

마이크로프로세서 ATmega128 interrupt 처리 동작

Atmega128에는 리셋을 포함하여 모두 35종의 리셋 및 인터럽트 벡터를 가지고 있습니다.

이들은 여러가지의 인터럽트 마스크 레지스터를 통하여 각각 개별적으로 허용 여부를 설정할수 있으

며, 상태 레지스터 SREG의 글러벌 인터럽트 허용비트를 이용하여 전체적인 인터럽트 허용 여부를 설

정할수 있습니다. 

ATmega128의 인터럽트 종류

외부인터럽트 8개+ 타이머0 관련 2개+ 타이머1 관련 5개+ 타이머2 관련 2개+ 타이머3 관련 5개+

USART0관련 3개 + USART1관련 3개 + 기타 6개=총 34개의 인터럽트로 이루어져 있으며, 이들은

모두 외부 인터럽트에 해당되며 차단 가능합니다.

[리셋 및 인터럽트 벡터]

 우선순위

벡터번지

인터럽트 소스

인터럽트 발생 조건

0

0x0000

리셋

외부핀,POWER-ON리셋, BOD리셋,워치독리셋,JTAG AVR리셋

1

0x0002

INT0

외부 인터럽트 요청0

2

0x0004

INT1

외부 인터럽트 요청1

3

0x0006

INT2

외부 인터럽트 요청2

4

0x0008

INT3

외부 인터럽트 요청3

5

0x000A

INT4

외부 인터럽트 요청4

6

0x000C

INT5

외부 인터럽트 요청5

7

0x000E

INT6

외부 인터럽트 요청6

8

0x0010

INT7

외부 인터럽트 요청7

9

0x0012

TIMER2 COMP

타이머/카운터2 비교

10

0x0014

TIMER2 OVF

타이머/카운터2 오버플러워

11

0x0016

TIMER1 CAPT

타이머/카운터1 캡처

12

0x0018

TIMER1 COMPA

타이머/카운터1 비교A

13

0x001A

TIMER1 COMPB

타이머/카운터1 비교B

14

0x001C

TIMER1 OVF

타이머/카운터1 오버플로워

15

0x001E

TIMER0 COMP

타이머/카운터0 비교

16

0x0020

TIMER0 OVF

타이머/카운터0  오버플로워

17

0x0022

SPI, STC

SPI시리얼 통신 송신완료

18

0x0024

USART0, RX

USART0, 수신완료

19

0x0026

USART0, UDRE

USART0 데이터 레지스터 비어 있음

20

0x0028

USART0, TX

USART0, 송신완료

21

0x002A

ADC

ADC 변환 완료

22

0x002C

EE READY

EEPROM 준비완료

23

0x002E

ANALOG COMP

아나로그 비교기

24

0x0030

TIMER1 COMPC

타이머/카운터1 비교C

25

0x0032

TIMER3 CAPT

타이머/카운터3 캡처

26

0x0034

TIMER3 COMPA

타이머/카운터3 비교A

27

0x0036

TIMER3 COMPB

타이머/카운터3 비교B

28

0x0038

TIMER3 COMPC

타이머/카운터3 비교C

29

0x003A

TIMER3 OVF

타이머3 오버플로워

30

0x003C

USART1, RX

USART1, 수신완료

31

0x003E

USART1, UDRE

USART1 데이터 레지스터 비어 있음

32

0x0040

USART1, TX

USART1, 송신완료

33

0x0042

TW1

2선 직렬 통신 인터페이스

 34

 0x0044

 SPM READY  저장 프로그램 메모리 준비 완료

 인터럽트(Interrupt)의 동작

 인터럽트를 가능하게 하려면 각각의 인터럽트 인에이블(enable) 허용 비트가 1로 셋되어 있고 상태

 레지스터의 전체 인터럽트 인에이블 허용비트(enable bit)가 1로 셋(set) 되어 있어야 합니다.

인터럽트가 발생하면 인터럽트 서비스 루틴이 실행되면서 SREG레지스터의  전체 인터럽트 인에이블

허용 비트(I-bit)는 0으로 클리어 되어 모든 인터럽트는 불가능한 상태가 됩니다. 따라서 인터럽트

서비스 루틴이 실행되는 동안 다른 인터럽트가 발생되도록 다중 인터럽트를 가능하게 하려면 SREG

레지스터의 I-bit 를 1로 set 해주어 야 합니다.

인터럽트가 발생하면 해당하는 인터럽트 플레그(flag)가 셋 됩니다. 프로그램 카운터는 해당하는 인터

럽트 벡터로 점프하여 인터럽트를 실행하며, 이때(하드웨어적으로) 해당하는 인터럽트 플러그는 클리

어 됩니다. 인터럽트 프레그는 해당하는 비트에 1을 써서 클리어시킬 수도 있습니다.

인터럽트 Enable bit가 0인 상태에서 인터럽트가 발생하며 인터럽트 플레그는 1이 되고 인터럽트가

가능(enable) 상태가 될때까지 대기하게 됩니다.

인터럽트가 인에이블 상태이고 전체 인터럽트가 불능인 상태에서 하나이상의 인터럽트가 발생하면

해당하는 인터럽트 플레그들은 1로 셋되고 전체 인터럽트 인에이블 비트가 1이 될때까지 대기하며,

전체 인터럽트 인에이블 비트가 1이 되면 인터럽트 우선순위 순서대로 실행하게 됩니다.

Posted by it is