문제 설명
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 습관화 필요