LoginSignup
1
0

More than 1 year has passed since last update.

nRF Connect SDK:タイマー

Posted at

タイマーはちょっとだけ扱いが違う

nRF SDK時代にはタイマーもペリフェラルの一つとして扱われており、TWIMやSPIMと同列にインスタンスを作って使っていました。これらのAPIはnRF Connect SDKでも残っており、Zephyrのお作法としてはあまり好ましくないと思われますが直接APIを叩くことで各種ペリフェラルを使うことができます。
TWIM

SPIM

タイマードライバーも同様に残っていますが・・・

タイマードライバーもTWIMやSPIMと同様に残っています。残ってはいるのですが・・・Zephyr OSが使っているため、ユーザーは使用することができません。厳密には使おうとするとFatal Errorを起こして動きません。
ですので、タイマーに関する一切の制御はZephyrの機能を使って実装することになります。

タイマーAPI

ZephyrのAPI一覧はこちらです。

使うのはk_timer_start()とk_timer_stop()、そしてK_TIMER_DEFINEの3つだけだと思います。

サンプルコード

0.5秒毎にHello Worldを表示し、3秒後にタイマーを停止します。

main.c
/*
 * Copyright (c) 2012-2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr.h>
#include <sys/printk.h>

static void timer_stop_handler(struct k_timer *timer)
{
    printk("Finish!\n");
}

static void timer_handler(struct k_timer *timer)
{
    printk("Hello World! %s\n", CONFIG_BOARD);
}
K_TIMER_DEFINE(timer, timer_handler, timer_stop_handler);

void main(void)
{
    k_timer_start(&timer, K_NO_WAIT, K_MSEC(500));
    k_msleep(3000);
    k_timer_stop(&timer);
}

実行結果

こんな感じです。
image.png

余談

あれ、タイマーのことについて書いたと思っていたのに書いてなかった・・・。
そんなに難しくないですし、内容もZephyr寄りなのでこのくらいで(笑)。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0