Home > Study > C Language > ARM System Programming > [ex40] #2 인터락 방식의 버튼 입력 기반 LED 토글 실습

[ex40] #2 인터락 방식의 버튼 입력 기반 LED 토글 실습
Study Language

문제 설명


PA3 핀에 연결된 버튼 입력을 감지하여, 버튼이 눌릴 때마다 PA2에 연결된 LED의 상태를 반전시키는 프로그램을 작성하라.

  • 버튼 입력은 풀업 설정된 PA3 핀을 통해 읽음
  • LED는 PA2 핀에 연결되어 있으며, 버튼이 눌릴 때마다 토글됨
  • 디바운싱 효과를 위해 인터락(interlock) 방식 사용

정답 코드


#include "device_driver.h"

static void Sys_Init(void)
{
	Clock_Init();
	LED_Init();
	Uart_Init(115200);
}

void Main(void)
{
   Sys_Init();
   Uart_Printf("PA3 Switch Input Toggling for LED on PA2\n");
   Macro_Write_Block(GPIOA->CRL, 0xF, 0x8, 12);
   Macro_Write_Block(GPIOA->CRL, 0xF, 0x6, 8); 
   Macro_Set_Bit(GPIOA->ODR, 3);

   int interlock = 0;

   for (;;)
   {
      if ((interlock == 0) && Macro_Check_Bit_Clear(GPIOA->IDR, 3))
      {
         Macro_Invert_Bit(GPIOA->ODR, 2);  
         interlock = 1;
      }
      else if ((interlock == 1) && Macro_Check_Bit_Set(GPIOA->IDR, 3))
      {
         interlock = 0;  
      }
   }
}

메모


printf 내부의 \n 습관화 필요