クラス TimerWiPy -- ハードウェアタイマーの制御
注釈
このクラスは WiPy 用に実装した非標準の Timer です。WiPy 上では単に machine.Timer として利用できますが、より一般的な machine.Timer クラスと区別するために、以下のドキュメントでは machine.TimerWiPy と表記しています。
ハードウェアタイマーは周期処理や時間イベントを扱います。タイマーは、おそらく MCU や SoC により最も柔軟で様々な種類のあるハードウェアであり、モデルごとに大きな違いがあります。MicroPython の Timer クラスは、指定した周期で(または少し経過後に1回だけ)コールバックを実行するベースライン操作を定義します。ボードによっては標準的でない動作を定義できます(したがって他のボードへの移植性はありません)。
コンストラクタ
- class machine.TimerWiPy(id, ...)
指定の id で新しいタイマーオブジェクトを構築します。id に -1 を指定すると、(ボードがサポートしていれば)仮想タイマーを構築します。
メソッド
- TimerWiPy.init(mode, *, width=16)
タイマーを初期化します。たとえば次のように使います:
tim.init(Timer.PERIODIC) # 周期モードの 16 ビットタイマー tim.init(Timer.ONE_SHOT, width=32) # ワンショットの 32 ビットタイマー
キーワード引数:
modeは次のいずれかになります。TimerWiPy.ONE_SHOT- タイマーは、設定したチャネルの周期が経過するまで1回だけ実行します。TimerWiPy.PERIODIC- タイマーは、チャネルに設定した周波数で定期的に実行します。TimerWiPy.PWM- ピンに PWM 信号を出力します。
widthは 16 か 32 (ビット)でなければなりません。5Hz 未満の非常に低い周波数(または長い周期)には 32 ビットのタイマーを使うべきです。32 ビットモードはONE_SHOTとPERIODICのモードでのみ利用できます。
- TimerWiPy.deinit()
タイマーを非初期化します。タイマーを停止し、タイマーのペリフェラルを無効にします。
- TimerWiPy.channel(channel, **, freq, period, polarity=TimerWiPy.POSITIVE, duty_cycle=0)
チャネルの識別子のみを渡した場合、以前に初期化されたチャネルオブジェクトが返されます(以前のチャネルがなければ
Noneが返されます)。さもなければ、TimerChannel オブジェクトを初期化して返します。
動作モードは、そのチャネルを作成するのに使った Timer オブジェクトに設定されたものになります。
channelは、タイマーの幅が 16 ビットの場合はTIMER.AかTIMER.Bでなければなりません。幅が 32 ビットの場合はTIMER.A | TIMER.Bで なければなりません 。
キーワード専用の引数:
freqは周波数を Hz で設定します。periodは周期をマイクロ秒で設定します。
注釈
freqかperiodのどちらかを指定しなければならず、両方を指定することはできません。polarityはPWMに適用され、デューティサイクルの極性を定義しますduty_cycleはPWMにのみ適用されます。これはパーセント (0.00〜100.00) です。WiPy は浮動小数点数をサポートしていないので、デューティサイクルは 0〜10000 の範囲で指定しなければなりません。10000 が 100.00 を、5050 が 50.50 を表します。
注釈
チャネルが PWM モードのとき、対応するピンは自動的に割り当てられるので、
Pinクラスでピンの代替機能を割り当てる必要はありません。PWM の機能をサポートするピンは次のとおりです:タイマー 0 のチャネル A では
GP24。タイマー 1 のチャネル A では
GP25。タイマー 2 のチャネル B では
GP9。タイマー 3 のチャネル A では
GP10。タイマー 3 のチャネル B では
GP11。
クラス TimerChannel --- タイマーのチャネルを設定
タイマーチャネルは、タイマーを使用して信号を生成またはキャプチャするのに使います。
TimerChannel オブジェクトは、Timer.channel() メソッドをで作成します。
メソッド
- timerchannel.irq(*, trigger, priority=1, handler=None)
このコールバックの動作は、タイマーチャネルの動作モードに大きく依存します:
モードが
TimerWiPy.PERIODICの場合、コールバックは設定した周波数または周期で定期的に実行されます。モードが
TimerWiPy.ONE_SHOTの場合、コールバックは設定したタイマーが満了したときに1回だけ実行されます。モードが
TimerWiPy.PWMの場合、コールバックはデューティサイクルの値に達したときに実行されます。
受け付けるパラメータは次のとおりです:
priorityは割り込みの優先度です。1〜7 の範囲の値を取れます。値が大きいほど優先度が高くなります。handlerは、割り込みが発生したときに呼び出される省略可能な関数です。triggerは、動作モードがTimerWiPy.PERIODICまたはTimerWiPy.ONE_SHOTの場合はTimerWiPy.TIMEOUTでなければなりません。モードがTimerWiPy.PWMの場合、trigger はTimerWiPy.MATCHでなければなりません。
コールバックのハンドラはハード割り込みであり、実行時には 割り込みハンドラの作成 で説明されている制約が適用される点に注意してください。
コールバックオブジェクトを返します。
- timerchannel.freq([value])
タイマーチャネルの周波数 (Hz) を取得または設定します。
- timerchannel.period([value])
タイマーチャネルの周期(マイクロ秒)を取得または設定します。
- timerchannel.duty_cycle([value])
PWM 信号のデューティサイクルを取得または設定します。これはパーセント (0.00〜100.00) です。WiPy は浮動小数点数をサポートしていないので、デューティサイクルは 0〜10000 の範囲で指定しなければなりません。10000 が 100.00 を、5050 が 50.50 を表します。
定数
- TimerWiPy.ONE_SHOT
- TimerWiPy.PERIODIC
タイマー操作モード。