문제 설명
// timer.c
void TIM4_Repeat_Interrupt_Enable(int en, int time)
{
if(en)
{
Macro_Set_Bit(RCC->APB1ENR, 2);
TIM4->CR1 = (1<<4)|(0<<3);
TIM4->PSC = (unsigned int)(TIMXCLK/(double)TIM4_FREQ + 0.5)-1;
TIM4->ARR = TIME4_PLS_OF_1ms * time;
Macro_Set_Bit(TIM4->EGR,0);
// TIM4->SR 레지스터에서 Timer Pending Clear
// NVIC에서 30번 인터럽트 Pending Clear => NVIC용 Macro 사용
// TIM4->DIER 레지스터에서 Timer 인터럽트 허용
// NVIC에서 30번 인터럽트를 허용으로 설정 => NVIC용 Macro 사용
// TIM4 Start
}
else
{
NVIC_DisableIRQ(30);
Macro_Clear_Bit(TIM4->CR1, 0);
Macro_Clear_Bit(TIM4->DIER, 0);
}
}
정답 코드
void TIM4_Repeat_Interrupt_Enable(int en, int time)
{
if(en)
{
Macro_Set_Bit(RCC->APB1ENR, 2);
TIM4->CR1 = (1<<4)|(0<<3);
TIM4->PSC = (unsigned int)(TIMXCLK/(double)TIM4_FREQ + 0.5)-1;
TIM4->ARR = TIME4_PLS_OF_1ms * time;
Macro_Set_Bit(TIM4->EGR,0);
Macro_Clear_Bit(TIM4->SR, 0);
NVIC_ClearPendingIRQ(30);
Macro_Set_Bit(TIM4->DIER, 0);
NVIC_EnableIRQ(30);
Macro_Set_Bit(TIM4->CR1, 0);
}
else
{
NVIC_DisableIRQ(30);
Macro_Clear_Bit(TIM4->CR1, 0);
Macro_Clear_Bit(TIM4->DIER, 0);
}
}
메모
printf 내부의 \n 습관화 필요