본문 바로가기
코스웨어

2016_03_23_인터럽트1_노태경_업무일지_

by 알 수 없는 사용자 2016. 3. 23.
728x90
반응형

마이크로 컨트롤러 프로그램의 main 함수에는 이벤트 루프 또는 메인 루프라고 불리는 무한 루프가 존재한다

어떤 특정한 사건이 발생하였는지를 반복적으로 검사하고 사건이 발생하였을 때 특정한 동작을 수행하는 방식을 폴링 방식이라고 한다

폴링방식은 정해진 순서에 의해 명령을 반복적으로 처리하므로 프로그램을 작성하고 이해하기 쉬운 장점이 있다.

이벤트 루프는 순차적으로 명령을 실행하므로 UART 시리얼 통신을 통해문자를수신하고 이를 비교하는 도중에 버튼의 상태를 읽어 올 수 없으므로 문자 비교가 진행 중인 경우 버튼이 눌러지면 해당 LED에 불이 켜지지 않는 경우가 발생할 수 있다.

2개 이상의 작업이 동시에 진행될 떄 하나의 작업은 다른 작업에 의해 실행이 지연되거나 실행할 수 없는 경우가 생긴다

즉 폴링 방식인 이벤트루프로 동작할 때 순차적으로 처리하다가 갑자기 다른 요청이 들어오면 실행이 지연되거나 실행할 수 없다는 의미이다.



인터럽트 하드웨어 인터럽트 < 내부 외부 이터럽트로 나뉨

소프트웨어 인터럽트


이 때문에 등장한 것이 인터럽트이다.

정상적인 동작을 멈추고 비정상적인 사건부터 해결하려고 하는 것을 인터럽트라고 하며 이를 우선수위가 높다라고 이야기한다.

인터럽트는 하드웨어 인터럽트와 소프트웨어 인터럽트로 나눌 수 있다.

하드웨어 인터럽트는 특정 하드웨어가 발생시키는 인터럽트로 전용의 인터럽트 신호선이 중앙 처리 장치에 직접 연결되어 있다.

반면 소프트웨어 인터럽트는 운영체제를 가지는 컴퓨터 시스템에서 커널(운영체제 핵심 가장중요한 부분에 기본적인 서비스, 운영체게 주소 관리 및 다른 사용자들에게 고루 나누어주는 메모리관리자를 가지고 있다) 을 통해 발생시키는 인터럽트를 말한다.


마이크로 컨트롤러는 일반적인 운영체제를 가지지 않으므로 하나의 프로세서만 실행되므로 마이크로 컨트롤러에서의 인터럽트는 하드웨어 인터럽트에 속한다.


하드웨어 인터럽트는 내부 인터럽트와 외부 인터럽트로 나눌 수 있다.


내부 인터럽트 : AD변환이 완료되었을 때, UART 시리얼 통신을 통해 수신된 데이터가 존재할 때 발생하는 인터럽트

외부입터럽트 : 범용 입출력 핀에 가해지는 입력의 변화에 의해 발생하는 인터럽트를 말한다.


인터럽트란 마이크로 컨트롤러가 즉시 특정 작업을 처리하도록 요구하는 이벤트를 말한다.

마이크로컨트롤러는 현재 진행 중인 작업을 멈추고 인터럽트가 요청한 작업을 수행하기 위해 인터럽트 처리 루틴으로 이동한다.

ISR이 종료되면 마이크로 컨트롤러는 수행을 멈춘 곳으로 되돌아가 중지된 작업을 계속한다. 인터럽트는 정상적인 프로그램의 흐름을 뒤바꾸는 역할을 한다.

인터럽트 벡터 테이블 주소가 있다.

데이터 시트에서 가능한 모든 인터럽트의 종류를 나타낸 것이 인터럽트 벡터테이블이라는 이름이 붙어 있다.

인터럽트가 발생하면 ISR에서 처리가 이루어지는데 이 ISR이 위치하는 메모리 주소를 인터럽트 벡터라고 하며 인터렙트 벡터를 모아 놓은 표를 인터럽트 벡터테이블이라고 한다.


인터럽트 핀에 가해지는 전압이 VCC에서 GND 또는 그 반대로 변하는 경우 발생한다 범용 입출력 핀에서 풀업 저항을 버튼을 연결하였다고 생각해 보자 버튼을 누르면 VCC에서 GND로 핀에 가해지는 전압이 바뀌고 인터럽트가 발생한다. 인터럽트가 발생하면 인터럽트 벡터 테이블에서 해당 인터럽트를 처리할 ISR의 주소를 찾는다 . 인터럽트 벡터 테이블은 프로그램 메모리 0x00 번지에서 0x0032 저장 되어 있으며 그 내용으로 ISR의 주소가 저장 되어 있다.




인터럽트 처리
1. 인터럽트가 발생하면 ISR을 호출한다.
2. 전역적인 인터럽트 활성화 비트가 세트(SERG 활성화비틑 7번 비트 상태 레지스터는 가장 최근에 산술 논리 연산 장치 수행된 연산 결과를 반영
하는 레지스터이다.
인터럽트별로 존재하는 개별 인터럽트 활성 비트가 세트되어 있어야 한다.

전역 인터럽트 활성화 비트는 상태 레지스터의 7번 비트로 상태 레지스터는 가장 최근에 산술 논리 연산 장치에서 수행된 연산의 결과를 반영
하는 레지스터이다. 상태 레지스터의 구조는 다음과 같다

7  6  5  4  3  2  1  0
I  T  H  S  V  N  Z  C
RW RW RW RW RW RW RW RW


SREG레지스터 구조

비트번호  비트이름
7번        I         GLOBAL INTERRUPT ENABLE 전역적인 인터럽트 발생을 허용한다
               
6번        T         Bit Copu Storage 비트 복사를 위한 BLD BST 명령에서 사용한다 BST 명령에 의해 비트 값을 비트 T에 저장할 수 있으며
                     BLD 명령에 비트 T의 내용을 읽어 올 수 있다.

5          H         Half Cary Flag 산술 연산에서의 보조 캐리 발생을 나타낸다. 보조 캐리는 바이트 단위
   연산에서 하위 니블로 발생하는 캐리를 말한다

4          S          sign 비트 부호 비트로 음수 블래그와 2의 보수 오버플로 플래그의 배타적 논리조합으로 설정된다

3          V          2's complement overflow flag 2의 보수를 이용한 연산에서 자리 올림이 발생하였음을 나타낸다

2          N          네가티브 플래그 산술연산이나 논리 연산에서 결과가 음수임을 나타낸다
1          Z          제로 플래그 산술 연산이나 논리 연산에서 결과가 영임을 나타낸다
0          C          carry Flag 산술 연산이나 논리 연산에서 캐리가 발생하였음을 나타낸다



상태 레지스터의 I 비트를 세트 또는 클리어 하기 위해서는 sei 또는 cli 함수를 사용 할 수 있다.
sei 함수는 전역적으로 인터럽트를 허용하는 Set Interrupt 함수 이며
Cli 함수는 전역적으로 인터럽트를 금지하는 Clear Interrupt 함수이다

전역적으로 인터럽트가 허용되어도 인터럽트트 발생하지 않으며 인터럽트에 따라 개별적으로 인터럽트를 허용 해주어야 한다.
AC 변환에서 변환이 완료 되면 이를 알려주는 인터럽트를 허용하기 위해 ADCSRA 레지스터의 ADIE 비트를 설정해 주어야 한다는



용어 설명 (커널)

[컴퓨터 운영체계의 가장 중요한 핵심으로써 운영체계의 다른 모든 부분에 여러 가지 기본적인 서비스를 제공한다. 커널은 셸(shell)과 대비될 수 있는데, 셸은 운영체계의 가장 바깥부분에 위치하고 있으면서, 사용자 명령어에 대한 처리를 담당한다.

일반적으로 커널에는 종료된 입출력연산 등 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 인터럽트 처리기와 어떤 프로그램들이 어떤 순서로 커널의 처리시간을 공유할 것인지를 결정하는 스케줄러, 그리고 스케줄이 끝나면 실제로 각 프로세스들에게 컴퓨터의 사용권을 부여하는 수퍼바이저(supervisor) 등이 포함되어 있다.

또한 커널은 메모리나 저장장치 내에서 운영체계의 주소공간을 관리하고, 이들을 모든 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 고루 나누어주는 메모리관리자를 가지고 있다. 커널의 서비스는 운영체계의 다른 부분이나, 흔히 시스템 호출이라고 알려진 일련의 프로그램 인터페이스들을 통해 요청된다


[네이버 지식백과] 커널 [kernel] (NEW 경제용어사전, 2006. 4. 7., 미래와경영)]






728x90