マイコン工作実験日記

Microcontroller を用いての工作、実験記録

ちょびっと改造

2010-04-30 14:39:58 | Weblog
先日はAT91SAM7S用のTOPPERS/ASPを動かしてみましたが、チップ依存部のコードを読んでみると変更したい箇所があったので、ちょっと改造してみました。変更するのは、使用するタイマです。

AT91SAM7シリーズの各デバイスは、WDT, PIT, RTT, TCという4種類のタイマを持っています。WDTはwatch dog timerで、システム監視用です。RTTはReal Time Timerで経過時間を計測するためのものです。WDTとRTTのふたつは内蔵の32KHzのRC発信器で動作します。PITとTCは、通常クリスタルを発振源としてPLLで逓倍して作成したマスタクロック(MCK)で動作するタイマです。TCが入出力端子を持っており、入力のキャプチャやPWM出力ができるのに対して、PITは周期的な割り込み生成が主な機能で入出力端子を持っていません。

元のASPのチップ依存部では、TCをTOPPERSのタイマとして使っているですが、わたしはいつもPITを使うことにしているので、この部分を変更したくなったわけです。TCではなくて、PITを使いたい主な理由は...
  1. そもそもPITはOSの周期割り込み用途向けに用意されたタイマであるから。
  2. 周期割り込みの生成が目的であれば、入出力端子は必要ないから。
  3. SAM7SにはTCタイマは、TC0~TC2の3チャンネルしかない。そのうちのひとつを、RTOSに取られてしまうのはイタイ。
と、いったところです。PITを使うことにすると、その割り込みはシステムコントローラを経由するため、DBGUシリアルと同じ割り込み要求番号(INTNO)となってしまいます。そこで、もともとはDEF_INHでタイマ割り込みのハンドラを定義していたのを、ATT_ISRで割り込みサービスルーチンの定義に置き換えてやります。SAM7やSAM9では、RTT, WDTもシステムコントローラを経由しての割り込み要求となるので、ATT_ISRが使えるのはとてもありがたいですね。

# ここまで記事を書いてから気が付きましたが、ベストテクノロジーの
# ブログに同じ内容の記事がありました。