마이크로프로세서 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이 되면 인터럽트 우선순위 순서대로 실행하게 됩니다.
'생활, 정보' 카테고리의 다른 글
윈도우 8.1 종료버튼 만들기 (0) | 2014.10.02 |
---|---|
마이크로프로세서 ATmega128 AVR 의 외부 인터럽트 (0) | 2014.08.25 |
ATmega 128 AVR 인터럽트(interrupt) (0) | 2014.08.20 |
윈도우8 [windows8] 윈도우키 활용하기 (0) | 2014.08.18 |
AVR ATmega128 마이크로콘트롤러 외부 핀기능 (0) | 2014.08.13 |