Raspberry Pi Pico C/C++ 인터벌 타이머 인터럽트 시도

7310 단어 C++CRaspberryPiPico
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번째는 무엇인가 잘 모르지만, 이것으로 우선 움직입니다.
실제로 움직여 보면

확실히 1ms마다 토글하고 있습니다.

타이머주기 (인수의 1 번째)의 부호를 +로 해 보면
    /* インターバルタイマ設定 */
    add_repeating_timer_ms( 1, &timer_callback, NULL, &timer );


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 );
}


확실히 10회 토글로 멈추고 있습니다.

좋은 웹페이지 즐겨찾기