문제 설명
// main.c #2
void Main(void)
{
Sys_Init();
Uart_Printf("KEY Input Toggling #1\n");
// KEY[1:0], GPB[7:6]을 GPIO 입력으로 선언
for(;;)
{
// KEY0가 눌릴때마다 LED0의 값을 Toggling
}
}
정답 코드
/* Key에 의한 LED Toggling */
#if 1
void Main(void)
{
Sys_Init();
Uart_Printf("KEY Input Toggling #1\n");
Macro_Write_Block(GPIOB->CRL, 0xff, 0x44, 24);
for(;;)
{
if(Macro_Check_Bit_Clear(GPIOB->IDR, 6))
{
Macro_Invert_Bit(GPIOB->ODR, 8);
}
}
}
#endif
/* Key Released 상태 대기에 의한 LED Toggling */
#if 0
void Main(void)
{
Sys_Init();
Uart_Printf("KEY Input Toggling #2\n");
Macro_Write_Block(GPIOB->CRL, 0xff, 0x44, 24);
for(;;)
{
if(Macro_Check_Bit_Clear(GPIOB->IDR, 6))
{
Macro_Invert_Bit(GPIOB->ODR, 8);
while(!Macro_Check_Bit_Set(GPIOB->IDR, 6));
}
}
}
#endif
/* Inter-Lock을 적용한 Key에 의한 LED Toggling */
#if 0
void Main(void)
{
int interlock = 1;
Sys_Init();
Uart_Printf("KEY Input Toggling #3\n");
Macro_Write_Block(GPIOB->CRL, 0xff, 0x44, 24);
for(;;)
{
if((interlock != 0) && Macro_Check_Bit_Clear(GPIOB->IDR, 6))
{
Macro_Invert_Bit(GPIOB->ODR, 8);
interlock = 0;
}
else if((interlock == 0) && Macro_Check_Bit_Set(GPIOB->IDR, 6))
{
interlock = 1;
}
}
}
#endif
메모
printf 내부의 \n 습관화 필요