4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi Pico C/C++ インターバルタイマ割り込みを試してみる

Posted at

Raspberry Pi Pico C/C++ SDKのタイマ用関数のまとめでタイマの使い方がなんとなく分かったので実際に動かしてみます

##1msタイマ割り込みを試してみる
1ms毎にGPIO0をトグルしてみます。

timier_test.c
#include "pico/stdlib.h"

#define GPIO_00   ( 0 )

bool timer_callback( repeating_timer_t *rt )
{
    /* 割り込み毎にトグルする */
    if ( gpio_get( GPIO_00 ) != 0 )
    {
        gpio_put( GPIO_00, 0 );
    }
    else
    {
        gpio_put( GPIO_00, 1 );
    }

    /* 500us待機 */
    busy_wait_us_32( 500 );

    return ( true );
}

void main( void )
{
    static repeating_timer_t timer;

    /* GPIO設定 */
    gpio_init( GPIO_00 );
    gpio_set_dir( GPIO_00, GPIO_OUT );

    /* インターバルタイマ設定 */
    add_repeating_timer_ms( -1, &timer_callback, NULL, &timer );

    while( true )
    {

    }

}

※コールバック関数(割り込み関数)timer_callbackには実験のためあえて0.5msの待機を入れています。

add_repeating_timer_msでタイマ周期(引数の1番目),コールバック関数(割り込み関数)(引数の2番目)を設定します。

    /* インターバルタイマ設定 */
    add_repeating_timer_ms( -1, &timer_callback, NULL, &timer );

引数の3番目,4番目はなにかよくわかっていませんが、これでとりあえず動きます。
実際に動かしてみると
timer_10.jpg
確かに1ms毎にトグルしています。

タイマ周期(引数の1番目)の符号を+にしてみると

    /* インターバルタイマ設定 */
    add_repeating_timer_ms( 1, &timer_callback, NULL, &timer );

timer_15.jpg
1.5ms毎のトグルになりました。

実はタイマ周期(引数の1番目)の符号によって時間の計測開始タイミングが変わるようになっています。

計測時間 実際のコールバック処理間隔
>0 コールバック関数終了~コールバック関数開始 タイマ周期 + コールバック処理時間
<0 コールバック関数開始~コールバック関数開始 タイマ周期

timer_callbackに入っている0.5ms待機分時間が伸び1.5ms毎になったというわけです。

##コールバック関数の戻り値

コールバック関数(割り込み関数)timer_callbackの戻り値は割り込みを継続するかを意味しています。
ためしに10回で戻り値がfalseになるようにしてみます。

bool timer_callback( repeating_timer_t *rt )
{
    static uint count = 0;
    bool ret;
    count++;

    /* 割り込み毎にトグルする */
    if ( gpio_get( GPIO_00 ) != 0 )
    {
        gpio_put( GPIO_00, 0 );
    }
    else
    {
        gpio_put( GPIO_00, 1 );
    }

    if ( count >= 10 )
    {
        count = 0;
        ret = false;
    }
    else
    {
        ret = true;
    }

    return ( ret );
}

timer_ret.jpg
確かに10回トグルで止まっています。

4
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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?