• カテゴリ TOPPERS の最新配信
  • RSS
  • RDF
  • ATOM

ブログ - TOPPERS/ASPを動かす #2・・・タスクスイッチ用タイマの変更

TOPPERS/ASPを動かす #2・・・タスクスイッチ用タイマの変更

カテゴリ : 
TOPPERS
2010-1-19 23:00
指摘があったので chip_time.c と chip_timer.h をちょっと修正。
タイマのインターバルが10kHzになっていたので、1kHzにしました。これでホントに元のサンプルと同じ速度になったかな?
2010/01/29

 

タスクスイッチ用タイマ

タスクを並列に処理しているように見せかけるための機能を実現するのタスクスイッチ用のタイマらしく、マイコンに内蔵された時計を利用して一定間隔で何かしでかす仕掛けの様です。
という事でまだまだ理解が追いついてない状態で、この部分に手を加えてみようというのが今回のネタです。

Periodic Interval Timer (PIT)への変更

タスクスイッチ用のタイマに関するソースは ~/asp/arch/arm_gcc/at91sam7s/chip_timer.c に書かれている様で、ねちねち読むとTimer Counter Channel 0 (TC0)の初期化や割り込み処理ルーチンしかない感じ。それでもって、単純に時間を刻んでいれば良い筈なんだろうと決めつけると、そこそこ高機能なTC0をインターバルタイマとしてだけ使うのは何だかもったいない気がしてきました。
そこで、あまり触れられる機会が少ない Periodic Interval Timer (PIT)で代替できないだろうかと考えました。chip_timer.c ではTC0の初期化や割り込み処理ルーチンしかないので、改造する範囲はかなり少なくて済みそうだからという憶測も手伝い、改造を英断。

またもやドキュメントを中途半端に読みつつ、何度か試行錯誤しながら処理方法を模索し、ホントに後々問題にならないのかは全く自信が無いまま、とりあえず関係するソースを修正して再度のコンフィギュレーションしなおした asp.bin が#1と同じ動きをしたならば良しと決めました。
まずはTC0を使用するように記述されている ~/asp/arch/arm_gcc/at91sam7s/chip_timer.h と ~/asp/arch/arm_gcc/at91sam7s/chip_timer.c の該当箇所をPIT化し、以下のコマンドを実行してサンプルプログラムをコンパイル。
cd ~/asp/OBJ
make clean
make depend
make asp.bin
おや? make depend をした段階で、何やら定義の重複エラーが発生したと言ってくる。そんなつもりは無いのだが。おまけに手を入れたトコとは関係ないソースとの競合があるらしい
エラーメッセージから INTNO_SIO をgrepしていくと、適当に修正した chip_timer.h の INTNO_TIMER が、INTNO_SIO に設定されている INTNO_SYSIRQ_PID と同じ値だという事らしい。どうやらPITは他のペリフェラルのいくつかと割り込みベクタが共通になっている事が原因っぽいけど、ダメな理屈は分からない状態で難儀する事に。

ドキュメントを読もう!

悩むこと数年、試行錯誤で修正しても何ら解決しそうになかったので、マジメに資料を読むしかない!という事に行き着きました。

割り込みベクタを共有したい場合の方法については、~/asp/doc/configurator.txt の「(5-2-1) 割込みハンドラの生成」に共有になっている場合に使用できそうな内容が記述されています。これを参照しながら  chip_timer.cfg と、関係がある事すら意識していなかった競合相手 dbgu_serial.cfg を修正。
「割り込みハンドラの生成」はGCC Developer Liteのsam7sターゲットでSYSIRQの分岐処理として提供されている sys.c みたいなコードを使ってるとダメらしく、割り込みハンドラ側でフラグをちゃんと見ないといけない事も判明 (chip_timer.c の target_timer_handler と、dbgu_serial.c の sio_isr)。

動作確認

再度 make depend を実行し、文句は言ってこなくなった様なのでひとまず改造はOKといった所でしょうか。make asp.bin を実行。completeの文字が表示されて ~asp/OBJ/asp.bin が作成されていればコンパイルは成功。さっそく書き込んで動作を見てみましょう。
#1と同じ動きをしましたかね? dbgu_serial.c もいじくったので大丈夫か不安だったのですが、sample1.c の中身は別として同じ動きをしている気がしますがいかがでしょう。

※元のソースからの差分はこちらからダウンロードできます。最終段階の動くであろうと思われるソースになっていますので、~/aspフォルダに上書きして使ってください。

トラックバック

トラックバックpingアドレス http://www.besttechnology.co.jp/modules/d3blog/tb.php/29