初めて質問します。
マイコン初心者なので宜しくお願いします。
SH-7144で、ソフトウェアスタンバイをIRQ3から解除したいのですが、うまくいきません。
環境は、HEWを使ってます。
実験中の為コメント付きの汚いコードになってますが、あらかじめ失礼します。
以下コードです。
// スリープ時の処理を設定
SBYCR.BIT.SSBY = 0x01; // SLEEP 命令実行後、ソフトウェアスタンバイモードに遷移
//SBYCR.BIT.HIZ = 0x01; // ソフトウェアスタンバイモード時に、端子状態をハイインピーダンス
SBYCR.BIT.HIZ = 0x00; // デバッグ用
//SBYCR.BIT.IRQEH = 0x01; // IRQ7~4 ソフトウェアスタンバイモードの解除を無効にする
SBYCR.BIT.IRQEH = 0x00; // デバッグ用
SBYCR.BIT.IRQEL = 0x00; // IRQ3~0 ソフトウェアスタンバイモードの解除を有効にする
//INTC.ICR1.BIT.IRQ3S = 0x00;
//INTC.ICR2.BIT.IRQ3ES = 0x00;
INTC.ICR1.BIT.IRQ3S = 0x01;
INTC.ICR2.BIT.IRQ3ES = 0x00;
INTC.IPRA.BIT._IRQ3 = 0xF;
~~~~~~~~~中略~~~~~~~~~~~
// 42PIN を Port A.PA9 から IRQ3 として使用する
PFC.PACRL1.BIT.PA9MD = 0x02;
//INTC.IPRH.BIT._WDT = 0xF;
WDT.WRITE.TCSR = 0xA55F; // WT/IT = 1, TME = 0, CKS2,1,0 = 0
//WDT.WRITE.RSTCSR = 0x5A5F;
sleep();
以上コードでした。
//INTC.ICR1.BIT.IRQ3S = 0x00;
//INTC.ICR2.BIT.IRQ3ES = 0x00;
INTC.ICR1.BIT.IRQ3S = 0x01;
INTC.ICR2.BIT.IRQ3ES = 0x00;
の部分ですが、本来IRQ3がローの時にスタンバイ解除したかったのですが、
ハードウェアマニュアルの低消費電力状態の項目には、立ち上がり・立ち下がりエッジでの表現しかなかったため上記のような状態になりました。
WDTのみでパワーオンリセットが出来る事と、IRQ3だけで割り込みが出来る事は確認出来たのですが、どうしてもスタンバイの解除が出来ません。
それと、スタンバイの解除が出来た場合は、WDT同様にパワーオンリセットになると考えて宜しいでしょうか。
アドバイス等でも宜しいのでお願いします。
No.2ベストアンサー
- 回答日時:
こんにちは。
当方手持ちの7144ボードで、ご提示のコードを試してみたところ、割と普通に起きてくれましたよ。
もしかして、何か勘違いをされていませんでしょうか。
スタンバイの解除が出来た場合は、リセットではなく、IRQ3の割り込みが発生した時と同じ事が、SLEEP命令の次から起こります。
つまり、SRを0にするなどして割り込みを許可していれば、IRQ3の割り込みハンドラが走り出すし、割り込み禁止なら、SLEEP命令の次から何事もなかったかのように走り出します。
この観点から、もう一度ご確認されてみてはいかがでしょうか。
ご提示のコードから見えない事の確認事項としては、
・WDTは、もともと使っていないですよね?(TCSRのTMEが1になっていないですよね?)
という事くらいでしょうか。
あと、「デバッグ中」の実験もしてみましたが、
・レベルセンスでも、起きてきました。
・SBYCRのHIZビットを1に設定しても、起きてくれました。
もう少しですので、頑張って下さい。
あと、蛇足ながら、「パワーオン・リセット」という用語について。
WDTでのリセットと、パワーオン・リセットは、ソフトウェアから見ると似ていますが、全くの別物です。
違いをよくお調べになって、常に意識して区別される事をお勧めいたします。
pyonmae様
ご回答ありがとうございます。
少し諦めかけていたのですが、pyonmae様の環境で出来たという事で少し頑張ってみました。
ご指摘通り、スタンバイからの復帰に関して認識が間違ってました。
sleep→WDT→WDTの設定によるパワーオンリセット
になるのか、
sleep→IRQ割り込み→mainへ飛ぶ
のどちらかと思ってました。
sleep→IRQ割り込み→sleep直後に戻る
が正解ですね。
IRQ割り込みの時にSCIによるデバッグメッセージを入れていたのですが、SCIがソフトウェアスタンバイ時にリセットされる事を失念していて余計に混乱してしまいました。
IRQ割り込み処理の中に、SCIの初期処理を追加してsleep直後にデバッグメッセージを出力してみた所、スタンバイからの復帰が確認出来ました。
>WDTでのリセットと、パワーオン・リセットは、ソフトウェアから見ると似ていますが、全くの別物です。
違いをよくお調べになって、常に意識して区別される事をお勧めいたします。
ありがとうございます。もう少し勉強してみます。
お陰様で解決出来ました。ありがとうございます。
No.1
- 回答日時:
データシートRev.4.00 「24.3.2 ソフトウェアスタンバイモード」に関する記載の中に以下の記述があります.
IRQ割り込み入力による解除
スタンバイコントロールレジスタ(SBYCR)のIRQELビット、IRQEHビットが1に設定されている場合、/IRQ端子の立ち下がりエッジまたは立ち上がりエッジ・・・(中略)・・・が検出されると、クロックの発振が開始されます*
記載の通り
SBYCR.BIT.IRQEH = 0x01;
SBYCR.BIT.IRQEL = 0x01;
で試してみましょう.
ビット名称(※イネーブル)から推察しても「24.2.1 レジスタの説明」は誤記かも.
WDTについては「12.4.3」と「12.6.6」を読めば謎が解けると思いますよ.
"WDT = リセット"ではありません.
bug_bug様
ありがとうございます。
ご指摘通り、
IRQ端子の立ち下がりエッジまたは立ち上がりエッジでしか、動作しませんでした。
なので、IRQは立ち下がりで割り込みされるように設定致しました。
SBYCR.BIT.IRQEH = 0x01;
SBYCR.BIT.IRQEL = 0x01;
に関しては、マニュアル通り、0x01 で無効。0x00 で有効でした。
イネーブルという表現は、少し混乱を生みました。
WDTに関しては、自分の認識に誤りがございました。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
このレジの並び方は間違ってま...
-
スーパーのレジで並んでいたら...
-
ウォッチドッグタイマ(WDT)の...
-
CPU負荷率の安全な上限と計...
-
pic 複数の割り込み関数 切り分...
-
PICマイコン 割り込み実行時間...
-
【組込み】割り込み中のstatic...
-
USB機器からのデータ受信による...
-
定周期での割り込み
-
VB6でSendKeyを利用したTab移動...
-
Macターミナルで実行中のプログ...
-
スレッドの監視方法について
-
VBAの配列サイズとメモリに関して
-
プロダクションコードとは?
-
緯度、経度の 10進法と 60進法...
-
バックグラウンドのプロセスの...
-
C# シリアル通信でデータ受信...
-
レジスタマップって何ですか?
-
プロセスIDの取得方法について
-
MFCのワーカースレッドとUIスレ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
スーパーのレジで並んでいたら...
-
このレジの並び方は間違ってま...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
CPU負荷率の安全な上限と計...
-
CPUの処理量を減らすコーデ...
-
pic 複数の割り込み関数 切り分...
-
Excelでタイマーの一時停止する...
-
VB.NET スレッドからのイベント...
-
H8SX/1655のタイマー割り込みに...
-
マイコン C言語 割り込み処理...
-
H8マイコンでの割り込み(シリ...
-
割り込みのカウントの仕方
-
一定時間操作がなかったら、と...
-
PICマイコンでエンコーダパルス...
-
STATUSのZフラグについて
-
Z80の割り込みについて
-
(H8マイコン)タイマ割込で変更...
おすすめ情報