MCU - 인터럽트 (3)
MCU - 인터럽트 (2)
https://coderdocument.tistory.com/entry/MCU-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8-2
외부 인터럽트
앞 장에서 서술한 ( 인터럽트 조건 발생 시에만 관련 플래그 트리거 )에 해당하는 종류이다.
이는 입력 펄스의 변화를 감지하여 인터럽트가 발생한다.
입력 펄스의 인터럽트 설정
1. 입력 펄스의 edge 트리거 방식
- 상승 에지 발생 : level이 low에서 high로 변경될 때
- 하강 에지 발생 : level이 high에서 low로 변경될 때
- 에지 발생 (상승, 하강) : level이 변경될 때
2. 입력 펄스의 level 트리거 방식
- HIGH 입력 : level이 high일 때
- LOW 입력 : level이 low일 때
동작이 필요없을 때 슬립 모드로 에너지를 아끼고, 동작이 필요할 때 이를 해제하기 위해 사용하는 경우가 존재한다.
슬립 모드가 해제되고 나서 동작이 정상적으로 인식되기 전에 인터럽트가 사라진다면 슬립모드에서는 벗어나지만 ISR은 발생하지 않는다.
비동기적으로 인터럽트를 지원하지 않는 외부 인터럽트의 경우, 에지 트리거방식으로 설정하면 해당 인터럽트로는 슬립 모드를 벗어날 수 없다. (I/O 클락에 따라 인터럽트 발생 여부를 판단하기 때문)
주의
입력 펄스를 인식하는 경우, 스위치가 눌릴 때 단시간에 접점이 탈부착되는 과정을 여러 번 반복하는 현상(Chattering/bouncing 현상)이 발생할 수 있다. software 적으로 여러번 인식되지 않도록 하는 처리가 필요할 수 있다.
인터럽트 관련 레지스터를 체크하는 순서
1. 인터럽트 트리거 방식을 결정하는 레지스터 세팅
- 인터럽트가 발생할 조건 설정, 어떤 조건에서 인터럽트를 발생시킬지 결정한다.
2. 인터럽트 마스크 레지스터 세팅
- 사용할 인터럽트 허가, 인터럽트를 발생 시킬 ISR의 종류를 결정한다.
3. 전체 인터럽트 허가 레지스터 세팅
- 전체 인터럽트 허가, 인터럽트 동작 시작 허가
- 이 비트가 1로 설정되었을 때, 비로소 인터럽트가 발생했는지 체크하게 된다.
4. 플래그 레지스터 확인
- 인터럽트 발생 여부 확인, 인터럽트가 발생했을 때 1로 세팅되고 이를 인지하여 ISR을 실행하게 된다.
ISR이 수행되는 중에 인터럽트가 발생한다면
인터럽트가 발생하지 않도록 하기 위해서는 3번의 전체 인터럽트 허가 비트를 클리어해주고 ISR이 종료될 때, 다시 1로 세팅해주면 된다.