[ETC]Sys Tick

SysTick?

STM32F051R8T6은 다양한 기능을 가진 타이머가 8개가 존재하며 이것들은 서로 독립적으로 동작을 한다.

일단 FND 제어때 쓰려고 하는 것인 만큼  설명이 필요한 타이머에 대한 포스팅은 일단 나중에 하기로 하고

간단하게 사용할 수 있는 24비트 타이머를 알아보자.

 

SysTick 타이머의 장점은 STK_RVR(SysTick_LOAD, 0xE000E014)에 클럭 소스를 입력 하면 STK_CVR(SysTick_VAL, 0xE000E018)이 다운카운터로 동작하고 “0”이되면 STK_CSR.B16(STK_CTRL 의 16비트 자리, 0x00010000)가 “1”이 되며 인터럽트 서비스 루틴으로 호출된다.

이때 STK_CVR은  STK_RVR로 리로드 되어   초기화등 신경을 크게 안써도 되어 비교적 간단히 타이머를 구현할 수 있다.

SysTick Timer 사용법

1.SysTick Interrupt를 Enable

2. STK_RVR Register에 클럭 소스 입력

3.STK_CVR Register “0”으로 초기화

4.STK_CSR.B0

             0=SysTick Timer Disable

             1=SysTick Timer Enable 

5.STK_CSR.B1

              0=STK_CVR이 0일 때 인터럽트를  루틴을 실행하지 않는다.

              1=STK_CVR이 0일 때 인터럽트를  루틴을 실행한다.

6.STK_CSR.B2

               0=클럭 소스를 외부

               1=STK_CVR이 0일 때 인터럽트를  루틴을 실행한다.

이정도만 설정하면 클럭 소스로 입력한 수치가 다운카운터가 되어 “0”이되면

STK_CSR.B16(SysTick Interrupt Flag)이 세트되면서 SysTick 인터럽트로 진입하고  STK_RVR값이 리로드되며 위 과정을 반복하는 구조다.

클럭소스는 다음과 같다.

value = fclock [Mhz] * desired_period [s]

80000 = 8000000 * 0.01

STM32f051 Discovery라면 시스템클럭이 8Mhz * 10ms하면 80000이 된다 이를 STK_RVR로 설정하면 10ms마다 인터럽트 루틴이 호출된다.

Leave a Reply

Your email address will not be published. Required fields are marked *