笛吹けど踊らず、みたいな。
サンプルソースでI2Cが動くことがわかったので、TOPPERS/ASPで動かそうとしている。
よく考えると、TOPPERSで割り込み処理を書くのは初めてだ。
2011年4月号を見つつ、cfgファイルにATT_ISRとCFG_INTを書く。
コンパイルすると、kernel_cfg.cにハンドラが展開されている。
使いたかったのは、SOT1_2の割込になるようなので、No.26になっていた。
MFSだけかもしれんが、割込は「送信割込」と「ステータス割込」が確認できる。
No.26なら、IRQ10MONレジスタになる。
で、やってみると・・・ハンドラが呼ばれない・・・。
IBCR.INTは1になっているので、割り込み要因は発生している。
ロジアナ波形を見ても、ACKのとこまで出力されている。
IRQ10MONは、0x02。つまりステータス割込要求あり。
ここまで揃ってるのに、ハンドラが呼ばれないということは、NVICか。
あら、割込イネーブルレジスタが0のままだわ。
ena_int()しているのに・・・。
とデバッガで追うと、理由がわかった。
ATT_INI()で指定した初期化関数の中でena_int()していたのだけど、コンテキストがタスクじゃないからはじかれていたのだ。
エラーチェックしていればわかったんだけど、省略していたのよ。。。
タスクが始まってからena_int()することで、無事に動くようになりました。
めでたしめでたし。
さて、ようやくここからμITRONっぽいことをやり始めるとしよう。
whileでぐるぐる待つところなんかをそれっぽく仕立てたいものだ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。