2012/08/05

[os]割込が発生すれど、呼ばれず

笛吹けど踊らず、みたいな。

サンプルソースで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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。