Home > Study > C Language > ARM System Programming > [ex13] SYSTICK_TIMER_LAB

[ex13] SYSTICK_TIMER_LAB
Study Language

문제 설명


// systick.c
#include "device_driver.h"

void SysTick_Run(unsigned int msec)
{
	// Timer 설정 : 인터럽트 발생 안함, clock source는 HCLK/8, Timer 정지

	// 주어진 msec 값 만큼의 msec를 count하는 초기값 설정 (LOAD)

	// VAL 레지스터 값 초기화(0) 및 COUNTFLAG Clear

	// Timer Start (시작이 되면 자동으로 LOAD의 값을 VAL로 가져간다)

}

int SysTick_Check_Timeout(void)
{
	// Timer의 Timeout이 발생하면 참(1)리턴, 아니면 거짓(0) 리턴

}

unsigned int SysTick_Get_Time(void)
{
	// Timer의 현재 count 값 리턴

}

unsigned int SysTick_Get_Load_Time(void)
{
	// Timer에 설정된 초기값을 리턴

}

void SysTick_Stop(void)
{
	// Timer Stop

}

정답 코드


#include "device_driver.h"

void SysTick_Run(unsigned int msec)
{
	SysTick->CTRL = (0<<2)+(0<<1)+(0<<0);
	SysTick->LOAD = (unsigned int)((HCLK/(8.*1000.))*msec+0.5);
	SysTick->VAL = 0;
	Macro_Set_Bit(SysTick->CTRL, 0);
}

int SysTick_Check_Timeout(void)
{
	return ((SysTick->CTRL >> 16) & 0x1);
}

unsigned int SysTick_Get_Time(void)
{
	return SysTick->VAL;
}

unsigned int SysTick_Get_Load_Time(void)
{
	return SysTick->LOAD;
}

void SysTick_Stop(void)
{
	SysTick->CTRL = 0<<0;
}

메모


printf 내부의 \n 습관화 필요