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秒くらい。

みっかぼの無料Androidアプリはこちら。