LPC810メモ:SysTick Timer
SysTick Timerを試す。
前提とする環境はこちら→LPC810メモ 共通の準備
- SysTick Timer
- 指定した周期で割り込みを発生させるタイマ。
- counterは24bit。1clockで1countか、2clockで1countか選択できる。
- LPCの機能というよりは、Cortex-M0+.の機能らしい。
- この例の動作
- 1秒ごとに割り込みを発生させて、LEDの点灯/消灯を切替える。
サンプルコード
#include "LPC8xx.h" int main(void) { // LED点滅用に、8番pinを出力に設定しておく LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); LPC_GPIO_PORT->DIR0 |= (1<<0); // SysTick Timer関連のレジスタの構造体は、LPC8xx.hからincludeされる // core_cm0plus.h で定義されている。 // UM10601 14.6.2 System Timer Reload value register // タイマの周期を1秒に設定。 // デフォルトでは2clockで1countなので、12MHz/2で6000000。 SysTick->LOAD = 6000000; // タイマの初期値をゼロにする。 // UM10601 14.6.3 System Timer Current value register SysTick->VAL = 0; // タイマを有効化 // UM10601 14.6.1 System Timer Control and status register SysTick->CTRL = (1 << 0) // ENABLE = 1 | (1 << 1) // TICKINT = 1 .. 割り込み有効化 ; return 0 ; } // 割り込みハンドラの定義 extern "C" { void SysTick_Handler(void) { // 8番pinの出力を反転 // (LED点滅) LPC_GPIO_PORT->NOT0 |= (1<<0); } }
補足/雑感
- MRT(Multi-Rate Timer)やSCT(SCTimer/PWM)と比べればかなりシンプル。コードの量も少ない。
- ただしあまり周期は長くとれない。
- 2clockで1countに設定して、24bitの最大値(16777215?)にしても、12MHzだと2.7秒くらい。