1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5Stackのタイマ割込み関数に関する備忘録

Posted at

概要

タイマ割込みについて自分が使ったものをまとめておく。
参考にしたサイトは以下のサイト。

宣言

hw_timer_t *timer = NULL;

割込み時に実行する関数

void IRAM_ATTR onTimer();
{
    // 割込み時に実行する処理
}

IRAM_ATTRを記載しておくのは、関数をフラッシュメモリではなくRAMに格納しておくためらしい。

タイマ作成

timer = timerBegin(0, 80, true);

第一引数はタイマ番号。M5Stack Core2(ESP32)では4つまで使えるらしいので、0~3で指定。
第2引数は分周比。設定については以下の通り。

M5Stackのペリフェラル周波数は80MHzです。
タイマのカウント周波数は、分周器というペリフェラル周波数を整数分の1に落とす装置で作り出します。タイマカウントしやすいように分周比を80とし、1カウントを80M / 80 = 1MHzにするのが一般的です。

第3引数はカウンターをカウントアップするならtrue、カウントダウンするならfalse。

実行関数とタイマの紐づけ

timerAttachInterrupt(timer, &onTimer, true);

第1引数はタイマ。
第2引数は実行したい関数。
第3引数は割込みの検知方法。trueならエッジトリガー、falseならレベルトリガー

割込みタイミングの設定

timerAlarmWrite(timer, 100000, true);

第1引数はタイマ。
第2引数は割込み発生のカウント数。
カウント数 = 1カウントの周波数(Hz) × 割込み間隔(s)
第3引数は割込み周期の設定。trueなら周期的に実行、falseなら1度きり。

タイマ割込みの有効化

timerAlarmEnable(timer);

引数はタイマ。
有効化されるとタイマが開始される。

タイマの停止

timerStop(timer)

引数はタイマ。
タイマが一時停止する。

タイマの開始

timerStart(timer);

引数はタイマ。
止めたタイマを再開できる。

タイマ割込みの設定判定

timerAlarmEnabled(timer);

タイマ割込みの設定がされているかを確認する。
タイマに対して、timerAlarmEnable()が実行されていればtrue、されていなければfalseを返す。

タイマの開始判定

timerStartEnabled(timer);

タイマが開始しているか、止まっているかを判定する。
開始していればtrue、停止していればfalseを返す。

まとめ

今回、コーヒースケールをM5Stackで作るにあたって調べたことをまとめた。
意外と全部の関数が記載されているサイトがなくて困った。

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?