본문 바로가기
Stm32/개인 학습

Interrupt(EXTI)

by [Akashic Records] 개발의선지자 2024. 6. 8.

※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.

    오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.

    아래 글은 STM32F429ZI datasheet와 Reference manual를 기준으로 작성되었습니다.

    (임베디드 시스템 개발자에게 datasheet와 Reference manua을 지도와 나침판과 다름없이 존재)

 

Interrupt 개념 : 프로세스에서  프로그램 실행시 ,

특정 입출력 장치에서 예외 상황이 발생한 경우 해당 장치가 수행하던 일을 중단시키고 프로세스에게 예외 상황에 대해 알려 처리하도록 하는 것

 

STM32 ARM CHIP에서 일반적인 인터럽트 처리과정은 아래와 같다.

 

1. 현재 진행 프로세스 중지

2. 벡터 테이블 분기(벡터 테이블에는 처리 인터럽트 핸들러 주소 저장되어 있음)

3. 인터럽트 핸들러(IRQ) 분기  핸들러 처리 모드로 변경

4. 현재 레지스터 상태를 stack 메모리 저장

5. 처리 ISR 인터럽트 처리(여러 인터럽트들 처리 시 우선순위에 따라 처리)  

6. 인터럽트 핸들러 되돌아 온후, stack 메모리에 저장되어 있던 원래 레지스터 상태로 복귀

 

STM32보드 ARM CHIP은 다양한 인터럽트 처리 기능들을 지원한다. 해당 포스트에서는 EXTI(외부 인터럽트)에 대해 다루도록 한다. 

 

EXTI(External Interrupt) : MCU 외부에 있는 IC나 모듈과 같은 HW 장치로부터 인터럽트를 받이들이고, 처리하기 위해

사용되는 인터럽트 컨트롤러이다 

아래 그림과 같이 총 16개의 EXTI 라인이 있으며 7개의 IRQ 로 처리된다.예를 들어,

PA0 , PA1, PA2는 다른 인터럽트 라인에서 처리되지만, PA0, PB0, PC0는 같은 인터럽트 라인으로 처리된다.

5~9번 그리고 10~15번 EXTI 는 EXTI9_5_IRQ 와 EXTI15_10_IRQ 를 함께 사용하기 때문에 인터럽트 핸들러 내부에서 어떤 인터럽트 소스에서 발생하였는지 구분할 필요가 있다.

EXTI는 아래 그림과 같은 과정을 통해 처리된다.

 

1. NVIC 초기화

2. GPIO 초기화

3. EDGE 생성

4. EXTI 인터럽트 핸들러 분기

5. EXTI 콜백 함수 호출

HAL 드라이버 함수 

원형 역할 및 매개변수
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) 외부 인터럽트 등록 
인터럽트가 호출되면 해당 핀의 상태를 Clear해준 뒤 Callback 함수를 호출한다.
GPIO_Pin : 외부 인터럽트 동작되는 핀번호
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 인터럽트 콜백 함수 
GPIO_Pin : 외부 인터럽트 동작되는 핀번호

'Stm32 > 개인 학습' 카테고리의 다른 글

Timer[3] - PWM  (0) 2024.06.19
Timer[2] - 타이머 인터럽트  (0) 2024.06.13
TIMER [1]  (0) 2024.05.09
GPIO(3) 입력 제어  (0) 2024.05.09
GPIO(1)  (0) 2024.04.26