Raspberry Pi Pico C/C++ 인터벌 타이머 인터럽트 시도
7310 단어 C++CRaspberryPiPico
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회 토글로 멈추고 있습니다.
Reference
이 문제에 관하여(Raspberry Pi Pico C/C++ 인터벌 타이머 인터럽트 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keyyum/items/3ce448c098c546dced20텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)