본문 바로가기

개발환경/Keil

타이머 설정 - NUC029SGE

MCU는 NUC029SGE를 사용하였고 관련 데이터 시트는 아래 첨부했습니다.

TRM_NUC029xGE_Series_EN_Rev1.04.pdf
9.91MB

 

코드 분석

static void sSysTimer_Init(void)
{
    /* Enable TIMER0 module clock */
	CLK_EnableModuleClock(TMR0_MODULE);
	/* Select TIMER module clock source */
	CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HIRC, MODULE_NoMsk);

	TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000);
	TIMER_EnableInt(TIMER0);

	/* Enable Timer0 NVIC */
	NVIC_EnableIRQ(TMR0_IRQn);
}

 

1) CLK_EnableModuleClock(TMR0_MODULE);

범용 타이머0 모듈의 Clock을 활성화시키겠다.

NUC029SGETMR0~TMR3까지 4개의 범용 타이머가 있다. 여기서는 이 타이머 중 TMR0을 활성화시켰다.

 

2) CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HIRC, MODULE_NoMsk);

CLK_SetModuleClock(Module index, Clock source, Divider);

CLK_SetModuleClock 함수 설명

타이머0 모듈을 HIRC Clock source로 설정하고, clock divider0으로 설정하겠다.

 

clock divider

클럭 분배기로 낮은 주파수가 필요할 때 사용한다.

 

3) TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000);

uint32_t TIMER_Open(TIMER_T *timer, uint32_t u32Mode, uint32_t u32Freq)

TIMER_Open 함수 설명

타이머0 모듈을 TIMER_PERIODIC_MODE로 설정하고 주파수는 1000Hz로 하겠다.

1000Hz1초에 1000(주기)이므로 1ms1(주기) 돈다.

따라서 이 함수는 1ms을 주기로 동작하는 타이머가 된다.

 

4) TIMER_EnableInt(TIMER0);

타이머0 인터럽트를 활성화하겠다.

 

5) NVIC_EnableIRQ(TMR0_IRQn);

NVIC 인터럽트 컨트롤러에 타이머0 IRQ를 활성화하겠다.

 

IRQ(Interrupt ReQuest)

인터럽트

 

NVIC(Nested Vectored Interrupt Controller)

중첩 벡터형 인터럽트 제어기로 모든 인터럽트 예외에 대한 우선 순위를 결정하고 처리한다.

 

결론

타이머0ClockHIRC, 1ms1주기를 갖는 주기적 모드로 설정한다.

타이머0의 인터럽트를 NVIC 인터럽트 컨트롤러에 활성화한다.

, 타이머01ms에 한번씩 인터럽트를 발생시킨다.

 

'개발환경 > Keil' 카테고리의 다른 글

ADC 설정 - NUC029SGE  (1) 2023.11.18
UART 설정 - NUC029SGE  (1) 2023.11.18
Clock 설정 - NUC029SGE  (0) 2023.11.18