H8/36064 SLEEP命令での直接遷移

はじめまして。

ヴィストン社のビュートローバというキットを利用して、

H8/36064の組込み開発を学習しています。

システムクロックを分周(12MHz→1/16)したいのですが、上手くいきません。

開発環境はHEWを使用して、

スタートアップなどは自動生成したものをそのまま使用しています。

main関数内に以下のように記述しましたが、

SLEEP命令後にmain関数に戻ってきていないように思います。

どなたか、お知恵を貸していただけませんでしょうか?

/*--- ソース ---*/

SYSCR1.BIT.SSBY = 1;
SYSCR2.BIT.SMSEL = 0;
SYSCR2.BIT.MA = 0x05;

IENR1.BIT.IENDT = 1;
IRR1.BIT.IRRDT = 0;

SYSCR2.BIT.DTON = 1;
set_imask_ccr(0);

sleep();

set_imask_ccr(1);

IO.PCR6 = 0x15;

for( ;; )
{
IO.PDR6.BIT.B0 = 0;


}

  • けろいちさん

    こんにちは。

    確かに解りにくいですね。

    ハードウェアマニュアル 3-7ページ 3.2.5 割り込みフラグレジスタ1(IRR1)

    のIRRDTビットの説明で、クリア条件が0をライトしたときと記載されています。

    クリア条件に割り込みを受付けたときとは記載が無いので、この説明から読み解く以外ありません。

    H8系は割り込みを受付けても要求フラグは0クリアされませんのでなれるまで注意が必要です。

  • こんにちは。

    おっしゃる通り、クリア条件には割込みを受け付けた時とはないですね。

    いろいろと難しいところも多いですが、

    期待通りに動いたときはとても楽しい。

    がんばりたいと思います。

    お知恵を貸してくださった皆様、ありがとうございました!

  • わわいです

    直接遷移といっても、スリープモードからの復帰にそういう名前の割り込みを使ってるというだけの話で、割り込みの処理を行わないといけないのは変わりがありません

    ということで、割り込みを有効にする、割込み条件から割り込みを受け付ける、割り込みサービスルーチンから割り込みをリセット、あるいはディセーブルして復帰する、という流れを考えると何をしなければならないかが分かってくるかと思います