ATtiny3217などのtinyAVR-1シリーズマイコンで、SCK信号を事象システムに流してTCB(Timer/Counter B)を起動させる方法について解説します。データシートにおける事象システムの記述とその利用方法を理解し、実際のアプリケーションに適用するためのコツを紹介します。
ATtiny3217の事象システムについて
ATtiny3217のようなtinyAVR-1シリーズには、事象システム(Event System)が搭載されており、外部信号や内部信号をトリガーとして各種モジュールを制御することができます。例えば、SPIのSCK信号を事象システムに入力し、その立ち上がりをトリガーにTCBを起動することができます。
データシートには、SCK信号が「レベル」で事象を生成できると記載されていますが、そのままでは事象発生部として選択できないことが明記されています。これにより、SCK信号を直接事象として使用する方法に疑問が生じます。
事象システムの構成と理解
事象システムは、外部または内部の信号をトリガーにして、タイマやカウンタ、ADCなどを制御するために使用されます。SCK信号はSPI通信のクロック信号であり、通常は外部デバイスとの通信に使われますが、この信号を利用して事象を発生させることも可能です。
データシートに記載されている「レベル」事象とは、信号が一定のレベルに到達したときに発生する事象であり、立ち上がりや立ち下がりエッジで発生する「エッジ」事象とは異なります。しかし、SCK信号の立ち上がりエッジをトリガーとしてTCBを起動させることは、ピン入力を監視することによって実現可能です。
事象発生部としてSCKを使用する方法
事象システム周辺機能でSCK信号を事象発生部として利用するためには、ピンの入力を監視する形で設定を行います。ATtiny3217では、事象システムの「非同期チャネル発生部選択レジスタ」や「同期チャネル発生部選択レジスタ」で直接SCKを選択することはできませんが、SPIのSCKが出力されるピンを監視し、立ち上がりでTCBを起動させることが可能です。
具体的には、次の手順でSCKの立ち上がりをトリガーとしてTCBを起動することができます。
- SCK信号を事象システムの入力ピンとして選択
- 事象システムを設定し、SCKの立ち上がりを検出する
- 立ち上がりが検出されるとTCBを起動する設定を行う
TCBを起動させるための設定例
次に、SCK信号の立ち上がりでTCBを起動するための簡単なコード例を紹介します。このコードでは、事象システムを設定し、SCKの立ち上がりエッジを検出して、TCBを起動する流れを示します。
// 事象システムの設定例
void setup() {
// SCK信号を事象システムの入力ピンとして設定
EVSYS.CH0MUX = EVSYS_CHMUX_PIN0_gc; // SCKを使用する設定
// 事象が発生した際にTCBを起動する設定
TCB0.CTRLA = TCB_ENABLE_bm | TCB_CLKSEL_CLKDIV1_gc;
// 事象システムの設定
EVSYS.CTRL = EVSYS_DIGFILT_bm | EVSYS_ASYNCCH0_bm;
// ここで立ち上がりエッジを検出し、TCBを起動
}
まとめ
ATtiny3217でSCK信号を事象システムを通じてTCBを起動させる方法について解説しました。SCK信号は事象を生成することはできますが、事象発生部として直接選択することはできないため、ピン入力を監視してSCKの立ち上がりでTCBを起動する設定が必要です。事象システムの設定を適切に行うことで、SPI通信の信号を応用した様々な用途に活用することができます。

コメント