오늘은 제가 STM32F429ZI를 활용해 만든 이진계산기 프로젝트의 일부 코드에 대해 리뷰를 해보려고 합니다.
이번 포스팅에서는 펜딩 비트, 인터럽트 서비스 루틴(ISR), 인터럽트 시스템에 대해 집중적으로 설명할 거예요! 🚀
📌 코드의 핵심: EXTI14 인터럽트 처리
이 코드는 EXTI14 인터럽트를 처리하는 부분인데, 핵심적인 개념은 펜딩 비트와 ISR입니다. 먼저 코드와 함께 중요한 부분을 살펴볼게요!
else if (EXTI->PR & 0x4000) // EXTI14 Interrupt Pending(발생) 여부?
{
EXTI->PR |= 0x4000; // Pending bit Clear (clear를 안하면 인터럽트 수행후 다시 인터럽트 발생)
if (SW6_Flag == 0) // 인터럽트 (EXTI14) 발생 FRAM을 모두 ‘0’으로 clear
{
LCD_SetTextColor(RGB_RED); // 글자색 : RED
LCD_DrawChar(15, 50, '0');
LCD_DrawChar(45, 50, '0');
LCD_DrawChar(75, 50, '0');
LCD_DrawChar(105, 50, '0');
U = 0, D = 0, L = 0, R = 0;
L_key = U, R_key = R, U_key = U, D_key = D;
Fram_Write(525, L_key); // FRAM(525)번지에 저장
Fram_Write(526, R_key); // FRAM(526)번지에 저장
Fram_Write(527, U_key); // FRAM(527)번지에 저장
Fram_Write(528, D_key); // FRAM(528)번지에 저장
}
}
🔍 1. 펜딩 비트 (Pending Bit)
펜딩 비트는 인터럽트가 발생했음을 알려주는 중요한 플래그입니다. 이 비트가 설정되면, CPU는 **인터럽트 서비스 루틴 (ISR)**을 호출하여 해당 인터럽트를 처리하게 됩니다.
펜딩 비트의 역할 설명
인터럽트 요청 수신 | 하드웨어 또는 소프트웨어가 인터럽트 요청을 보내면 설정됩니다. |
ISR 실행 신호 | 펜딩 비트가 설정되면 CPU는 현재 작업을 중단하고 ISR을 실행합니다. |
클리어하지 않으면 반복 | 펜딩 비트를 클리어하지 않으면, 동일한 인터럽트가 계속 발생하게 됩니다. |
💡 중요한 점!
- 펜딩 비트는 인터럽트가 발생했음을 알리는 신호입니다.
- 펜딩 비트를 클리어하지 않으면, 인터럽트가 반복적으로 발생하여 시스템에 부담을 줄 수 있습니다. 이를 방지하려면, ISR을 실행하고 나서 펜딩 비트를 반드시 클리어해야 합니다! ✅
⚡ 2. 인터럽트 서비스 루틴 (ISR)
ISR은 인터럽트가 발생했을 때 자동으로 실행되는 특수한 함수입니다. 이 함수는 이벤트가 발생했을 때 시스템이 신속하게 반응할 수 있도록 도와줍니다.
ISR의 특징 설명
짧고 간단해야 함 | ISR은 빠르게 실행되어야 하므로, 가능한 한 짧고 효율적이어야 합니다. |
펜딩 비트 클리어 | ISR 후에는 펜딩 비트를 클리어하여, 동일한 인터럽트가 반복되지 않도록 합니다. |
실시간 반응 | ISR을 통해 실시간으로 이벤트 처리가 가능해집니다. |
💡 중요한 점!
ISR을 실행한 후에는 반드시 펜딩 비트를 클리어하여, 동일한 인터럽트가 반복되지 않도록 해야 합니다. 코드에서 보면, EXTI->PR |= 0x4000; 라는 라인이 펜딩 비트를 클리어하는 역할을 합니다.
🔄 3. 인터럽트 시스템
인터럽트 시스템은 하드웨어 장치나 소프트웨어 프로세스가 CPU에게 작업을 중단하고 우선순위가 높은 작업을 처리하도록 신호를 보내는 시스템입니다.
인터럽트 처리 절차:
- 인터럽트 발생
하드웨어 장치나 소프트웨어가 인터럽트 요청을 발생시킵니다. - 펜딩 비트 설정
CPU는 이 인터럽트 요청을 수신하고, 펜딩 비트를 설정합니다. - ISR 실행
CPU는 현재 작업을 중단하고, 해당 인터럽트에 할당된 ISR을 실행합니다. - 펜딩 비트 클리어
ISR이 완료되면, 펜딩 비트를 클리어하여 다음 인터럽트에 대비합니다.
인터럽트 시스템 처리 절차 설명
인터럽트 발생 | 하드웨어 또는 소프트웨어가 인터럽트를 발생시킵니다. |
펜딩 비트 설정 | CPU가 인터럽트 요청을 수신하고 펜딩 비트를 설정합니다. |
ISR 실행 | CPU가 ISR을 실행하여 인터럽트를 처리합니다. |
펜딩 비트 클리어 | ISR 실행 후 펜딩 비트를 클리어하여 인터럽트를 처리 완료합니다. |
💡 중요한 점!
인터럽트는 시스템의 응답성을 높여주고, 실시간 처리가 가능하게 합니다. 인터럽트 시스템은 펜딩 비트를 통해 CPU에 신호를 전달하고, ISR을 통해 빠르게 작업을 처리하는 방식으로 작동합니다.
🎉 마무리
이번 포스팅에서는 펜딩 비트, ISR, 인터럽트 시스템에 대해 다뤘습니다. 각 개념들이 어떻게 서로 연결되어, 효율적이고 실시간으로 이벤트를 처리할 수 있게 되는지 살펴보았는데요! 🔧
핵심 포인트 요약!
- 펜딩 비트: 인터럽트가 발생했음을 알려주는 플래그.
- ISR: 인터럽트 발생 시 실행되는 특별한 함수.
- 인터럽트 시스템: 하드웨어나 소프트웨어의 요청에 따라 CPU가 작업을 중단하고 ISR을 실행.
💬 이 포스팅이 도움이 되셨나요? 궁금한 점이나 추가적인 의견은 댓글로 남겨주세요! 😊
'공부 > STM32' 카테고리의 다른 글
🌟 STM32CubeMX 활용 가이드 🌟 (0) | 2025.03.08 |
---|---|
🛠️ 임베디드 시스템이란? 무엇이 다를까? 🤔 (3) | 2025.03.08 |
🛠️ Interrupt 우선순위 및 생성 방법 🛠️ (0) | 2025.03.06 |
⚡️ Falling Edge vs Interrupt: 차이점과 개념 이해하기 ⚡️ (0) | 2025.03.06 |
🌟TMCM/TMCL을 아십니까? (0) | 2024.10.11 |