スイッチをマジメに読むにはチャタリングの除去をする必要がありますが、タイマー割り込みを設定するほどのことではないのでサンプルコードにちょうど良い物がないかなと探してみたらTiny USBのコードの中でboard_millis()という関数で起動からの積算時間をミリ秒単位で取得していました。ソースコードを見てみるとTiny USBとして抽象化するためにラッピングしているだけのようなので、直接SDKのAPIを呼ぶようにします。
APIとしては to_ms_since_boot(get_absolute_time()) こんな感じでget_absolute_time()でマイクロ秒単位の時間を単純に/1000しているだけのようです。
実際のコードはほぼサンプルコードと同じにして経過時間が達していなければリターンするコードとなっています。
int32_t Switch_Task( void )
{
static uint32_t start_ms = 0;
uint32_t s,d,e;
int32_t i;
if (to_ms_since_boot(get_absolute_time()) - start_ms < SWITCH_INTERVAL)
{
return 0; /* 時間になる前ならリターン */
}
start_ms += SWITCH_INTERVAL;
~中略~int main()
{
stdio_init_all();
puts("Raspberry Pi Pico");
while (1)
{
Switch_Task();
}
0 件のコメント:
コメントを投稿