공부/STM32

🔧 STM32F429ZI 이진계산기 코드 리뷰: 펜딩 비트, ISR, 인터럽트

projectlim 2024. 10. 10. 17:43
728x90
반응형
SMALL

 

오늘은 제가 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에게 작업을 중단하고 우선순위가 높은 작업을 처리하도록 신호를 보내는 시스템입니다.

인터럽트 처리 절차:

  1. 인터럽트 발생
    하드웨어 장치나 소프트웨어가 인터럽트 요청을 발생시킵니다.
  2. 펜딩 비트 설정
    CPU는 이 인터럽트 요청을 수신하고, 펜딩 비트를 설정합니다.
  3. ISR 실행
    CPU는 현재 작업을 중단하고, 해당 인터럽트에 할당된 ISR을 실행합니다.
  4. 펜딩 비트 클리어
    ISR이 완료되면, 펜딩 비트를 클리어하여 다음 인터럽트에 대비합니다.

인터럽트 시스템 처리 절차 설명

인터럽트 발생 하드웨어 또는 소프트웨어가 인터럽트를 발생시킵니다.
펜딩 비트 설정 CPU가 인터럽트 요청을 수신하고 펜딩 비트를 설정합니다.
ISR 실행 CPU가 ISR을 실행하여 인터럽트를 처리합니다.
펜딩 비트 클리어 ISR 실행 후 펜딩 비트를 클리어하여 인터럽트를 처리 완료합니다.

💡 중요한 점!
인터럽트는 시스템의 응답성을 높여주고, 실시간 처리가 가능하게 합니다. 인터럽트 시스템은 펜딩 비트를 통해 CPU에 신호를 전달하고, ISR을 통해 빠르게 작업을 처리하는 방식으로 작동합니다.


🎉 마무리

이번 포스팅에서는 펜딩 비트, ISR, 인터럽트 시스템에 대해 다뤘습니다. 각 개념들이 어떻게 서로 연결되어, 효율적이고 실시간으로 이벤트를 처리할 수 있게 되는지 살펴보았는데요! 🔧

핵심 포인트 요약!

  • 펜딩 비트: 인터럽트가 발생했음을 알려주는 플래그.
  • ISR: 인터럽트 발생 시 실행되는 특별한 함수.
  • 인터럽트 시스템: 하드웨어나 소프트웨어의 요청에 따라 CPU가 작업을 중단하고 ISR을 실행.

💬 이 포스팅이 도움이 되셨나요? 궁금한 점이나 추가적인 의견은 댓글로 남겨주세요! 😊

728x90
반응형
LIST