December 5, 2021

Blogna Kang U-2 Man

STM32, Embedded System, Microcontroller, ARM Cortex-M, RTOS, FreeRTOS

ARM Cortex-M3: TIMER SYSTICK

3 min read

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم

Timer Systick merupakan timer 24 bit yang menjadi bagian dari core Cortex-M3. Timer ini merupakan timer yang mencacah mundur (down counter), artinya ketika nilai cacahan mencapai nol, akan kembali mencacah dari nilai awal yang diambil dari register reload.

Timer Systick biasa digunakan sebagai timer yang menyediakan fungsi pewaktuan pada sistem yang menggunakan RTOS, yang akan membangkitkan eksepsi secara periodik agar kernel OS melakukan konteks switch. Selain itu bisa juga digunakan di fungsi yang menyediakan fungsi tunda (delay).

Timer Systick bisa mengambil sumber clock internal (sama dengan clock yang dipakai oleh core) atau clock eksternal. Mungkin sebagian besar prosesor ARM Cortex-M3 tidak menyediakan clock eksternal untuk Timer Systick, karena biasanya eksternal clock digunakan juga memberikan clock untuk core. Sehingga perlu dilihat dari datasheet prosesor yang dikeluarkan oleh pabrik silikon yang membuatnya. Karena clock berasal dari clock prosesor (core), ada kemungkinan clock tersebut berhenti bekerja saat prosesor berada di kondisi mode daya rendah, sehingga timer Systick juga akan berhenti mencacah.

Timer Systick dikendalikan oleh 4 buah register:

  1. Register kendali dan status (SYST_CSR) untuk mengatur sumber clock, mengaktifkan pencacah, mengatur interupsi dan memberikan keadaan/status dari timer Systick
  2. Register nilai reload (SYST_SVR), register yang berisi nilai auto reload yaitu nilai cacahan awal setiap kali timer mencacah sampai nol.
  3. Register yang berisi nilai cacahan yang sedang berjalan (SYST_CVR)
  4. Register kalibrasi (SYST_CALIB), yang menunjukan nilai awal untuk clock pewaktuan sebesar 10 mdetik (100Hz).

Register CSR (Control and Status Register) berisi bit-bit untuk mengendalikan timer Systick. Bit ENABLE digunakan untuk menghidupkan atau mematikan fungsi pencacah timer Systick. Men-set bit ENABLE akan menghidupkan fungsi timer.

Register CSR

Bit TICKINT menunjukan ketika cacahan mencapai 0, timer Systick akan mengubah status eksepsi timer Systick menjadi tertunda (pending) atau tidak. Jika bit ini 0, maka ketika cacahan mencapai 0, tidak akan mempengaruhi status eksepsi timer Systick (artinya tidak akan membangkitkan eksepsi), sedangkan jika di-set menjadi 1, bit ini akan mempengaruhi eksepsi timer Systick menjadi pending ketika cacahan mencapai 0 dan akan membangkitkan eksepsi/interupsi timer Systick.

Bit CLKSOURCE digunakan untuk memilih sumber clock timer Systick diambil dari clock eksternal (bila bit bernilai 0) atau diambil dari clock prosesor (CLKSOURCE=1). Untuk bit ini perlu melihat ke lembaran data dari pembuat prosesor untuk implementasi sesungguhnya. Sebagai contoh untuk prosesor STM32F207 dari ST Microelectronics, jika CLKSOURCE=1, clock diambil dari clock prosesor (AHB) sedangkan jika CRLSOURCE=0, clock berasal dari AHB/8. Sedangkan bit COUNTFLAG akan di-set menjadi 1 jika cacahan mencapai 0. Pembacaan terhadap bit COUNTFLAG akan membuat bit bernilai 0.

Ketika timer Systick pertama kali diaktifkan, bit ENABLE di-set, timer akan mulai mencacah mundur dengan nilai awal diambil dari register CVR (Current Value Register). Setelah mencapai 0, timer akan mencacah mundur lagi dengan nilai awal diambil dari register RVR (Reload Value Register). Begitu seterusnya. Setiap kali cacahan mencapai 0, bit COUNTFLAG akan di-set.

Register CVR

Operasi penulisan terhadap register CVR akan membuat nilai CURRENT menjadi 0 dan juga mengubah bit COUNTFLAG menjadi 0. Selain itu, akan menyebabkan timer melakukan reload (mencacah dari awal) dengan nilai awal diambil dari register RVR. Penulisan terhadap register CVR tidak akan memicu eksepsi timer Systick. Pembacaan terhadap register RVR akan menghasilkan nilai cacahan saat pembacaan dilakukan.

Register RVR

Operasi penulisan dengan nilai 0 terhadap register RVR akan membuat timer Systick berhenti bekerja. Nilai register RVR tidak bisa ditentukan setelah reset, sebelum mengaktifkan timer Systick, software harus mengisi register RVR dengan nilai yang diinginkan, dan menulis ke register CVR. Hal ini akan membuat register CVR menjadi 0, saat diaktifkan, karena sudah 0, timer langsung melakukan reload register CVR dengan nilai dari register RVR dan mulai mencacah mundur.

Register CALIB (Calibration) digunakan untuk mengkalibrasi timer Systick untuk mendapatkan sistem pewaktuan yang presisi, misalnya 1 milidetik. Register CALIB merupakan register hanya baca. Bit NOREF menunjukan apakah timer Systick menggunakan clock referensi atau tidak. Bit SKEW digunakan untuk menunjukan apakah nilai TENMS sudah tepat untuk cacahan 10 mili detik (100Hz) atau tidak. Jika bit SKEW di-set 1, maka nilai TENMS bisa dijadikan sebagai nilai untuk register RVR untuk pewaktuan 10 mili detik.

Register CALIB

Semoga bermanfaat…

Visits: 4 Visits: 98022

Leave a Reply

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

Copyright © All rights reserved. | Newsphere by AF themes.