概要
タイマ割込みについて自分が使ったものをまとめておく。
参考にしたサイトは以下のサイト。
宣言
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で作るにあたって調べたことをまとめた。
意外と全部の関数が記載されているサイトがなくて困った。